rsync: - আকার-কেবলমাত্র এবং --ignore-সময়ের মধ্যে পার্থক্য


114

আমি দুটি বিকল্পের মধ্যে পার্থক্যটি কী তা বোঝার চেষ্টা করছি

rsync --size-only

এবং

rsync --ignore-times

এটি আমার বোধগম্য যে ডিফল্টরূপে rsync ফাইল টাইমস্ট্যাম্প এবং ফাইলের মাপ উভয়ের সাথে তুলনা করে যাতে কোনও ফাইল সিঙ্ক্রোনাইজ করা উচিত বা না করা উচিত। উপরের বিকল্পগুলি ব্যবহারকারীকে এই আচরণকে প্রভাবিত করতে দেয়।

উভয় বিকল্পগুলি মনে হয়, কমপক্ষে মৌখিকভাবে একই জিনিসটির ফলাফল: কেবলমাত্র আকারের সাথে তুলনা করা

আমি কি এখানে কিছু সূক্ষ্ম অনুপস্থিত?


18
এটি সম্ভবত ভালো কিছু আরও ভাল মাপসই করা হবে SuperUser.com বা Unix.SE , যেহেতু এটি একটি বিদ্যমান (অ-প্রোগ্রামিং এর সাথে সম্পর্কিত) টুল কিছু সরাসরি কোড লেখা এর সাথে সম্পর্কিত ব্যবহার বদলে সম্বন্ধে।
জেরি কফিন

উত্তর:


110

বিভিন্ন উপায়ে ফাইলগুলির সাথে আরএসসিএনসি তুলনা করা যায় - অনুমোদনের উত্স হ'ল আরএসইএনসি অ্যালগরিদম বিবরণ: https://www.andrew.cmu.edu/course/15-749/READINGS/required/cas/tridgell96.pdfআরএসসিএন- এর উইকিপিডিয়া নিবন্ধটিও খুব ভাল।

স্থানীয় ফাইলগুলির জন্য, আরএসআইএনসি মেটাডেটার তুলনা করে এবং যদি মনে হয় যে ফাইলটি অনুলিপি করার দরকার নেই কারণ উত্স এবং গন্তব্যগুলির মধ্যে আকার এবং টাইমস্ট্যাম্পের মিল এটি আর দেখায় না। যদি তারা মেলে না, এটি ফাইলটির সিপি। তবে, যদি মেটাডেটা ম্যাচ করে তবে ফাইলগুলি আসলে একই না হয়? তারপরে আরএসসিএনসি সম্ভবত আপনি যা ইচ্ছা করেছিলেন তা করেন নি।

একই আকারের ফাইলগুলি এখনও পরিবর্তিত হতে পারে। একটি সাধারণ উদাহরণ হ'ল একটি পাঠ্য ফাইল যেখানে আপনি টাইপকে সংশোধন করেন - যেমন "তেহ" কে "দ্য" তে পরিবর্তন করা। ফাইলের আকার একই, তবে সংশোধন করা ফাইলটিতে একটি নতুন টাইমস্ট্যাম্প থাকবে। --size-only"সময়টির দিকে তাকাবেন না; যদি আকারের মিলগুলি ফাইলগুলি মিলছে তবে", যা এই ক্ষেত্রে ভুল পছন্দ হবে।

অন্যদিকে, ধরুন আপনি cp -r A Bগতকাল দুর্ঘটনাক্রমে বড় কিছু করেছেন তবে আপনি সময় স্ট্যাম্পগুলি সংরক্ষণ করতে ভুলে গেছেন এবং এখন আপনি বিপরীতে অপারেশনটি করতে চান rsync B A। আপনি সিপি'যুক্ত সমস্ত ফাইল গতকালই টাইম স্ট্যাম্পে রয়েছে, যদিও সেগুলি গতকাল সত্যিই পরিবর্তিত হয়নি, এবং আরএসসিএনসি ডিফল্টরূপে সমস্ত ফাইল অনুলিপি করে, এবং কালকেও টাইমস্ট্যাম্প আপডেট করে। --size-onlyএক্ষেত্রে আপনার বন্ধু হতে পারে (উপরের উদাহরণটি মডুলো)।

--ignore-timesফাইলগুলির একই পরিবর্তনের সময় আছে কিনা তা বিবেচনা না করে ফাইলগুলি তুলনা করতে বলে says উপরের টাইপোর উদাহরণটি বিবেচনা করুন, তবে তারপরে আপনি কেবল টাইপো সংশোধন করেননি তবে আপনি touchসংশোধন করা ফাইলটিও মূল ফাইলের মতো একই সময়ের পরিবর্তনের জন্য ব্যবহার করেছেন - আসুন আমরা কেবল বলি যে আপনি সেভাবেই লুক্কায়িত। ওয়েল --ignore-timesফাইল পরিবর্তন করতে হবে যদিও আকার এবং সময় ম্যাচ।


58

সংক্ষিপ্ত উত্তরটি --ignore-timesএটির নামের থেকে আরও বেশি কিছু করে। এটি সময় এবং আকার উভয়ই উপেক্ষা করে । বিপরীতে, --size-onlyএটি যা বলে ঠিক তাই করে।


দীর্ঘ উত্তরটি হ'ল rsyncকোনও ফাইল পুরানো কিনা তা সিদ্ধান্ত নেওয়ার তিনটি উপায় রয়েছে:

  1. উত্স এবং গন্তব্য আকারের তুলনা করুন।
  2. উত্স এবং গন্তব্য টাইমস্ট্যাম্প তুলনা করুন।
  3. উত্স এবং গন্তব্য স্থির চেকসাম তুলনা করুন।

এই চেকগুলি ডেটা স্থানান্তর করার আগে সম্পাদিত হয়। উল্লেখযোগ্যভাবে, এর অর্থ এটি স্ট্যাটিক চেকসাম স্ট্রিম চেকসাম থেকে পৃথক - পরে ডেটা স্থানান্তর করার সময় গণনা করা হয়।

ডিফল্টরূপে, rsyncশুধুমাত্র 1 এবং 2 ব্যবহার করে 1 এবং 2 উভয়ই একক দ্বারা একসাথে অধিগ্রহণ করা যায় stat, যেখানে 3 টির জন্য পুরো ফাইলটি পড়া দরকার (এটি স্থানান্তরের জন্য ফাইলটি পড়া থেকে স্বাধীন)। ধরে নিলাম কেবলমাত্র একটি সংশোধক নির্দিষ্ট করা হয়েছে, এর অর্থ নিম্নলিখিত:

  • ব্যবহার করে --size-only, শুধুমাত্র 1 সঞ্চালিত হয় - টাইমস্ট্যাম্প এবং চেকসাম উপেক্ষা করা হয়। ফাইলের আকার উভয় প্রান্তে অভিন্ন না হলে অনুলিপি করা হয়।

  • ব্যবহার করে --ignore-times, 1, 2 বা 3 এর দুটিও সম্পাদন করা হয় না। একটি ফাইল সর্বদা অনুলিপি করা হয়।

  • ব্যবহার করে --checksum, 3 টি 1 টি ছাড়াও ব্যবহৃত হয় , তবে 2 সম্পাদিত হয় না । আকার এবং চেকসাম না মিললে একটি ফাইল অনুলিপি করা হয়। আকারের সাথে মেলে চেকসামটি কেবল গণনা করা হয়।


1
--চেকসাম হ'ল আমি যা খুঁজছিলাম। আমি বিল্ড আউটপুট অনুলিপি করছিলাম যা কেবল বেশিরভাগ ফাইলের জন্য সময় পরিবর্তন ছিল। - চেকসাম যুক্ত করার অর্থ এটি সময়ের পার্থক্যগুলিকে উপেক্ষা করে তবে নিশ্চিত হয়েছিল যে তারা বিট হিসাবে অভিন্ন ছিল। এটি আমি প্রত্যাশা করেছিলাম --ignore-বার এমনটি করার জন্য অতিরিক্ত তথ্যের জন্য আপনাকে ধন্যবাদ।
জোসেফ কনোলি

50

আপনি অনুপস্থিত যে আরএসসিএনসি চেকসাম দ্বারা ফাইলগুলিও তুলনা করতে পারে।

--size-onlyএর অর্থ এই যে টাইমস্ট্যাম্পগুলি পৃথক হলেও আকারে মেলে এমন ফাইলগুলিকে আরএসসিএনসি এড়িয়ে যাবে। এর অর্থ এটি ডিফল্ট আচরণের চেয়ে কম ফাইল সিঙ্ক্রোনাইজ করবে। এটি সামগ্রিক ফাইলের আকারকে প্রভাবিত করে না এমন পরিবর্তনগুলির সাথে কোনও ফাইল মিস করবে। আপনার যদি এমন কিছু থাকে যা ফাইলগুলি পরিবর্তন না করেই ফাইলে তারিখগুলি পরিবর্তন করে এবং আপনি যে ফাইলগুলি পরিবর্তন করেন নি সেগুলি অনুসন্ধানের জন্য আরএসসিএনসি প্রচুর সময় ব্যয় করতে চান না, এটি ব্যবহারের বিকল্প।

--ignore-timesমানে টাইমস্ট্যাম্প এবং ফাইলের আকারের মিল থাকলেও আরএসসিএনসি প্রতিটি ফাইল চেকসাম করবে। এর অর্থ এটি ডিফল্ট আচরণের চেয়ে বেশি ফাইল সিঙ্ক্রোনাইজ করবে। এটিতে ফাইলের আকার অন্তর্ভুক্ত থাকবে এমনকি ফাইলের আকার একই এবং পরিবর্তনের তারিখ / সময়টি মূল মানটিতে পুনরায় সেট করা হয়েছে। প্রতিটি ফাইল চেকসামিং করার অর্থ এটি সম্পূর্ণরূপে ডিস্ক থেকে পড়তে হবে, যা ধীর হতে পারে। কিছু বিল্ড পাইপলাইনগুলি নির্দিষ্ট তারিখে টাইমস্ট্যাম্পগুলি পুনরায় সেট করবে (যেমন 1970-01-01) চূড়ান্ত বিল্ড ফাইলটি বিটের জন্য পুনরুত্পাদনযোগ্য বিট, যেমন টাইমস্ট্যাম্পগুলি সংরক্ষণ করে এমন একটি টার ফাইলের মধ্যে প্যাক করার সময়।


4
"তারিখ / সময় পুনরায় সেট করা অনুশীলনে করা সম্ভব নয়, তবে এটি ঘটতে পারে" - উদাহরণস্বরূপ এমন সফ্টওয়্যার ব্যবহার করার সময় যা পুনরুত্পাদনযোগ্য বিল্ডসের নামে, প্রতিটি ফাইলকে জোর করে তারিখের পরিবর্তে 1970-01-01 এ পুনরায় সেট করে এবং আসল সৃষ্টি / পরিবর্তনের সময়।

10
আসলে, আমি মনে করি আপনি যদি চেকসাম ব্যবহার করতে চান তবে আপনাকে -c বিকল্পের প্রয়োজন। এটি ছাড়া, --ignore- সময়গুলি সমস্ত ফাইল নিঃশর্তভাবে অনুলিপি করবে।
এডওয়ার্ড ফালক

1
-A বিকল্প এই বিকল্পগুলিকে ওভাররাইড করতে পারে। আমার ক্ষেত্রে আমি --compare-dir = এবং - আকার-কেবল ব্যবহার করছি এবং অপ্রত্যাশিত ফলাফল পাচ্ছি। -এ-টু-আর পরিবর্তন করা সমস্যার সমাধান করে।
dbagnara

@dbagnara আমি আজ নিশ্চিত করেছিলাম যে - সাইজ-কেবলমাত্র "-a, বা" ওভাররাইড "-a এর উপরে বসে আছে। আমার একটি ড্রাইভ ছিল যে যে কোনও কারণেই সমস্ত পরিবর্তনের সময়গুলি এক মাসের বেশি বেড়েছে। ব্যাকআপে Rsync প্রতিটি ফাইলের অনুলিপি করছিল (একটি-অন দিয়ে)। - আকার-যুক্ত কেবলমাত্র সমস্যাটি সংশোধন করে কাঙ্ক্ষিত ফলাফলের দিকে নিয়ে যায় (সুতরাং -a - আকার-কেবল)। সুতরাং আমি শেষ করি যে কেবল আকারের সংরক্ষণাগারকে ওভাররাইড করে।
টমি

1

একটি বৈজ্ঞানিক লিনাক্স 7.7 সিস্টেমে, আরএসসিএন-এর ম্যান পেজটি বলেছেন:

--ignore-times          don't skip files that match size and time

আমার কাছে অভিন্ন বিষয়বস্তুযুক্ত দুটি ফাইল রয়েছে তবে বিভিন্ন নির্মাণের তারিখ রয়েছে:

[root@windstorm ~]# ls -ls /tmp/master/usercron /tmp/new/usercron
4 -rwxrwx--- 1 root root 1595 Feb 15 03:45 /tmp/master/usercron
4 -rwxrwx--- 1 root root 1595 Feb 16 04:52 /tmp/new/usercron

[root@windstorm ~]# diff /tmp/master/usercron /tmp/new/usercron
[root@windstorm ~]# md5sum /tmp/master/usercron /tmp/new/usercron
368165347b09204ce25e2fa0f61f3bbd  /tmp/master/usercron
368165347b09204ce25e2fa0f61f3bbd  /tmp/new/usercron

এর সাথে --size-only, দুটি ফাইলই এক হিসাবে বিবেচিত:

[root@windstorm ~]# rsync -v --size-only -n  /tmp/new/usercron /tmp/master/usercron

sent 29 bytes  received 12 bytes  82.00 bytes/sec
total size is 1595  speedup is 38.90 (DRY RUN)

এর সাথে --ignore-times, দুটি ফাইল পৃথক হিসাবে বিবেচিত:

[root@windstorm ~]# rsync -v --ignore-times -n  /tmp/new/usercron /tmp/master/usercron
usercron

sent 32 bytes  received 15 bytes  94.00 bytes/sec
total size is 1595  speedup is 33.94 (DRY RUN)

এটি দেখে মনে হচ্ছে --ignore-timesএটির কোনও প্রভাব নেই।


2
--ignore-timesফাইলগুলির টাইমস্ট্যাম্পগুলি একই থাকলেও অনুলিপি করতেন।
মিস্টারমিয়াগি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.