RSSync --inplace পুরো ফাইলটি লিখতে পারে, বা কেবল সেই অংশগুলিতে যা আপডেট করতে হবে? (বিটিআরএফএস + আরএসসিএন ব্যাকআপের জন্য)


21

ইতিহাসের সাথে একটি দক্ষ ব্যাকআপ সমাধান তৈরি করতে আমি কীভাবে বিটিআরএফএস স্ন্যাপশটগুলিকে আরএসসিএন-এর সাথে একত্রিত করি তা আমি বেশ কয়েকটি গাইড পড়ছিলাম। তবে এটি সমস্ত নির্ভর করে rsync --inplaceযে প্রকৃতপক্ষে পরিবর্তিত ফাইলগুলির কেবলমাত্র সেগুলিই সংশোধন করে বা এটি যদি পুরো ফাইলটিকে যথাক্রমে ওভাররাইট করে। এটি যদি পুরো ফাইলটি লিখতে থাকে তবে মনে হয় বিটিআরএফস সর্বদা ফাইলটির একটি নতুন অনুলিপি তৈরি করবে, যা ধারণাটি আরও কম দক্ষ করে তুলবে।


এমনকি এটি কীভাবে জানবে যে এটি পুরো ফাইলটিতে লেখা এড়াতে পারে? কি পরিবর্তন হয়েছে তা নির্ধারণের জন্য প্রথমে পুরো ফাইলটি পড়ার দরকার নেই ?
মেহরদাদ

2
@ মেহরদাদ হ্যাঁ, এটি হয় তবে পুরোটি পড়তে সমস্যা হয় না isn't যদি rsyncপুরো ফাইলটি পড়ে এবং তারপরে শুধুমাত্র প্রয়োজনীয় অংশগুলির সন্ধান এবং আপডেট করা হয় তবে বিটিআরএফগুলি কেবলমাত্র এই আপডেট হওয়া ব্লকগুলি অনুলিপি করবে। তবে যদি পুরো ফাইলটি rsyncপড়েন এবং লিখেন তবে এটি সমস্যা হবে।
পেটর পুদলক

1
@Mehrdad rsyncশুধুমাত্র জানে না এটা সম্পূর্ণ ফাইল লেখার এড়াতে পারে, সে কি এটি করতে পরিচালনা ছাড়া নেট উপর সম্পূর্ণরূপে এটা কপি। চতুর ছোট প্রোগ্রাম।
গুন্থার পাইজ

উত্তর:


31

আপনি আরএসসিএনসি দুটি স্থানীয় পাথ পাস করলে এটি "- হোয়াইট-ফাইল" ব্যবহার করে ডিফল্ট হবে, ডেল্টা-স্থানান্তর নয়। সুতরাং, আপনি যা খুঁজছেন তা হ'ল "- না-পুরো-ফাইল"। আপনি '-সি' অনুরোধ করলে আপনি ব-দ্বীপ-স্থানান্তরও পাবেন।

আপনি যাচাই করতে পারেন তা এখানে:

$ mkdir a b
$ dd if=/dev/zero of=a/1 bs=1k count=64
$ dd if=/dev/zero of=a/2 bs=1k count=64
$ dd if=/dev/zero of=a/3 bs=1k count=64
$ rsync -av a/ b/
sending incremental file list
./
1
2
3

sent 196831 bytes  received 72 bytes  393806.00 bytes/sec
total size is 196608  speedup is 1.00

তারপরে একটি ফাইল স্পর্শ করুন এবং পুনরায় সিঙ্ক করুন

$ touch a/1
$ rsync -av --inplace a/ b/
sending incremental file list
1

sent 65662 bytes  received 31 bytes  131386.00 bytes/sec
total size is 196608  speedup is 2.99

আপনি এটি "এলএস -লি" দিয়ে ইনোডটি পুনরায় ব্যবহার করেছেন তা যাচাই করতে পারেন, তবে লক্ষ্য করুন এটি পুরো 64 কে বাইট প্রেরণ করেছে। --No-পুরো-ফাইল দিয়ে আবার চেষ্টা করুন

$ touch a/1
$ rsync -av --inplace --no-whole-file a/ b/
sending incremental file list
1

sent 494 bytes  received 595 bytes  2178.00 bytes/sec
total size is 196608  speedup is 180.54

এখন আপনি কেবল 494 বাইট প্রেরণ করেছেন। ফাইলের কোনও লেখা ছিল কিনা তা যাচাই করতে আপনি স্ট্রেস ব্যবহার করতে পারেন তবে এটি কমপক্ষে ব্যবহৃত ডেল্টা-স্থানান্তর দেখায়।

নোট (মন্তব্য দেখুন) যে স্থানীয় ফাইল সিস্টেমের জন্য, --whole-fileধরে নেওয়া হয় (rsync জন্য ম্যান পৃষ্ঠা দেখুন)। অন্যদিকে, কোনও নেটওয়ার্ক জুড়ে --no-whole-fileধরে নেওয়া হয়, তাই --inplaceএটি তার নিজের মতো আচরণ করবে --inplace --no-whole-file


--inplaceবোঝায় না কেন --no-whole-file?
জেরেমিয়া

--no-whole-fileডিফল্ট যাই হোক না কেন ?
জেরেমিয়া

2
@ জেরেমিয়া না যদি উভয় পথই স্থানীয় হয়। এবং আমার উদাহরণটি দেখায় যে আমি ২০১৩ সালে যে আরএসএনসি ব্যবহার করছিলাম --inplaceসেটির --no-whole-fileসংস্করণ বোঝায় না , তবে আপনাকে নিজের নিজস্ব আরএসসিএন সংস্করণ দিয়ে এই পরীক্ষাটি পুনরাবৃত্তি করতে স্বাগত জানাই।
ডেটালেস

ঠিক আছে, inplacesame একই / পৃথক ব্লকের জন্য স্ক্যান করা সম্পর্কে নয়, এটি অফসেট ০ থেকে এখনই বিদ্যমান ফাইলটি ওভাররাইট করার কথা ((অন্যথায় একটি অস্থায়ী অনুলিপি নির্মিত হয়, এবং কেবলমাত্র পুরাতন টার্গেট ফাইলটি মুছুন এবং টেম্পোপারি অনুলিপিটির নতুন নামকরণ করা হবে) । প্রক্রিয়াটি বাধাগ্রস্ত হলে পুরানো ফাইলটিকে যতদূর সম্ভব রাখা সম্ভবত এটি "নিরাপদ" বলে মনে করা হচ্ছে performance অবশ্যই এটি কার্য সম্পাদনের জন্য আরও খারাপ, পিক স্টোরেজ খরচ (বড় ফাইলগুলি ভাবেন), সম্ভবত খণ্ডিতকরণ ...) ...
ফ্রাঙ্ক নোক

1
আমি ধরে নেব, এটি অন্য উপায়ে বৃত্তাকার হিসাবে, --no-whole-fileসর্বদা বোঝায় --inplace, অন্যথায় এর বেশিরভাগ কার্যকারিতা লাভ শেষ হয়ে যায়। যদিও এই নথিটি পাওয়া যায় নি ...
ফ্রাঙ্ক নোক

15

ম্যানুয়ালটির সঠিক অংশটি উদ্ধৃত করে এখানে অনুমান করা যায় এমন নির্দিষ্ট উত্তর:

   --inplace

          [...]

          This option is useful for transferring large files
          with  block-based  changes  or  appended data, and
          also on systems that are disk bound,  not  network
          bound.   It  can  also  help  keep a copy-on-write
                                               *************
          filesystem snapshot from diverging the entire con‐
          *******************
          tents of a file that only has minor changes.

4

--inplaceযে অঞ্চল পরিবর্তন হয়েছে কেবল সেগুলি ওভাররাইট করে। বিটিআরএফএস-এ লেখার সময় সর্বদা এটি ব্যবহার করুন।


এবং আপনার কাছে এমন কোনও প্রমাণ রয়েছে যা দেখায় যে এটি ফাইলের অন্যান্য অংশগুলিকে ওভাররাইট করে না?
পেট্র পুডলাক

একই কি জেডএফএসের জন্য প্রযোজ্য?
ew white

@ নিউ হোয়াইট: যেহেতু জেডএফএস বিটিআরএফএসের মতো COW (অনুলিপি-অন-লিখন), তাই হ্যাঁ।
জেরেমিয়া

@ পেটরপুদলক -vvvদেখায় এটি ম্যাচ করা ব্লকগুলি এড়িয়ে চলেছে
টম হেল

3

আরএসআইএনসি-র ডেল্টা ট্রান্সফার অ্যালগরিদম পুরো ফাইলটি সঞ্চারিত হয়েছে বা কেবল যে অংশগুলি পৃথক হয়েছে তা নিয়ে ডিল করে। ব্যান্ডউইদथে সংরক্ষণ করতে দুটি মেশিনের মধ্যে কোনও ফাইলকে সংযুক্ত করার সময় এটি ডিফল্ট আচরণ। পুরো ফাইলটি সংক্রমণ করতে বাধ্য করার জন্য --whole-file(বা -W) এর সাথে এটি ওভার্রাইড করা যেতে পারে rsync

--inplacersyncস্থানান্তরকালে একটি অস্থায়ী ফাইল তৈরি করবে কিনা তা নিয়ে কাজ করে। ডিফল্ট আচরণ হ'ল অস্থায়ী ফাইল তৈরি করা। এটি সুরক্ষার একটি পরিমাপ দেয় যে স্থানান্তরটিতে বাধা থাকলে গন্তব্য মেশিনে বিদ্যমান ফাইলটি অক্ষত / ছোঁয়া থাকে। --inplaceএই আচরণটিকে ওভাররাইড করে এবং rsyncবিদ্যমান ফাইলটি সরাসরি আপডেট করতে বলে । এটির সাহায্যে, স্থানান্তর বাধাগ্রস্থ হলে গন্তব্য মেশিনে কোনও অসামঞ্জস্যিত ফাইল থাকার ঝুঁকিটি চালান।


2

ম্যান পৃষ্ঠা থেকে:

This  option  changes  how  rsync transfers a file when its data
needs to be updated: instead of the default method of creating a
new  copy  of  the file and moving it into place when it is com-
plete, rsync instead writes the updated  data  directly  to  the
destination file.

এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে এটি সম্পূর্ণরূপে ফাইলটির উপরে লিখেছেন - আমি ধারণা করি যে অন্য কোনও উপায়ে আরএসসিএনসি কাজ করা অসম্ভব হয়ে পড়েছিল।


2
নির্ধারণের কি অংশের আপডেট প্রয়োজন পর, এটা ঠিক করতে পারে চাইতে ঐ অংশে এবং তাদের পরিবর্তে সম্পূর্ণ ফাইল লেখার আপডেট করুন।
পেটর পুদলক

0

ইন-জায়গা rsync উপর তাত্ত্বিক কাজ বর্ণনা করা হয় এই কাগজ

কাগজের রেফারেন্স: ডি রাশ এবং আর বার্নস। ইন-প্লেস রাইকিঙ্ক: মোবাইল এবং ওয়্যারলেস ডিভাইসগুলির জন্য ফাইল সিঙ্ক্রোনাইজেশন। ইউএসএনআইএক্স বার্ষিক প্রযুক্তিগত সম্মেলন, ফ্রেইনিক্স ট্র্যাক, 91-100, ইউএসএনআইএক্স, 2003।

লিঙ্ক থেকে:

... আমরা জায়গাটিতে পুনর্গঠন সমর্থন করার জন্য বিদ্যমান আরএসসিএনসি বাস্তবায়নটি পরিবর্তন করেছি।

বিমূর্ত: [...] আমরা আরএসসিএনটি সংশোধন করেছি যাতে এটি স্থান সীমাবদ্ধ ডিভাইসগুলিতে কাজ করে। লক্ষ্য হোস্টের ফাইলগুলি একই স্টোরেজে আপডেট করা হয় ফাইলটির বর্তমান সংস্করণটি দখল করে। স্পেস-সীমাবদ্ধ ডিভাইসগুলি traditionalতিহ্যবাহী আরএসসিএন ব্যবহার করতে পারে না কারণ এটি ফাইলের পুরানো এবং নতুন সংস্করণ উভয়ের জন্য মেমরি বা স্টোরেজ প্রয়োজন। উদাহরণগুলির মধ্যে রয়েছে সেলুলার ফোন এবং হ্যান্ডহেল্ড পিসিগুলিতে ফাইলগুলি সিঙ্ক্রোনাইজ করা, যার মধ্যে ছোট স্মৃতি রয়েছে। ইন-প্লেস আরসিএনসি অ্যালগরিদম কোনও গ্রাফের একটি ফাইলের সংকীর্ণ প্রতিনিধিত্বকে এনকোড করে, যা স্থানের সম্পত্তি অর্জনের জন্য টপোলজিকভাবে সাজানো হয়। [...]

সুতরাং এটি আরএসসিএন - ইনপ্লেস কী করছে তার প্রযুক্তিগত বিবরণ বলে মনে হয়। কাগজের শুরু অনুযায়ী:

আমরা আরএসসিএনটি সংশোধন করেছি যাতে এটি স্থান পুনর্নির্মাণের সাথে ফাইল সিঙ্ক্রোনাইজেশন কার্য সম্পাদন করে। [...] অস্থায়ী স্থান ব্যবহার করার পরিবর্তে, লক্ষ্য ফাইলটিতে পরিবর্তনগুলি ইতিমধ্যে বর্তমান সংস্করণ দ্বারা দখল করা স্থানটিতে স্থান নেয়। এই সরঞ্জামটি এমন জায়গাগুলি ডিভাইসগুলিকে সিঙ্ক্রোনাইজ করতে ব্যবহার করা যায় যেখানে স্থান সীমাবদ্ধ।

@ ডেটালেসের উত্তর থেকে পরিষ্কার হওয়ার সাথে সাথে বোঝা যাচ্ছে যে --inplaceএকই স্টোরেজ স্পেসটি ব্যবহার করা হচ্ছে, তবে এটি এখনও পুরো ফাইলটি সেই জায়গাতে অনুলিপি করতে পারে। বিশেষত, যখন স্থানীয় ফাইল সিস্টেমগুলি থেকে / অনুলিপি করা হয়, তখন rsync --whole-fileবিকল্পটি গ্রহণ করে । অন্যদিকে নেটওয়ার্ক সিস্টেমে যখন এটি আসে তখন এটি --no-whole-fileবিকল্পটি গ্রহণ করে ।


1
উম, তাহলে উত্তর কি?
Xen2050

আমার ক্ষমা। আমি যথেষ্ট মনোযোগ দিচ্ছিলাম না। @ ডেটালেসের উত্তর সহ, এটি জিনিস পরিষ্কার করতে হবে।
ডায়াগন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.