কেউ ভাবতে পারেন যে --link-dest
'অভিন্ন ফাইলে প্রবেশ করা সমস্ত ক্ষেত্রে কাজ করবে। ফাইলটি পুরানো হয়ে থাকলেও / এর বিভিন্ন সামগ্রী থাকা সত্ত্বেও ফাইলটি বিদ্যমান থাকে না।
এটির কারণে, আরএসসিএন ম্যান পৃষ্ঠা থেকে --link-dest
:
"এই বিকল্পটি খালি গন্তব্য শ্রেণিবিন্যাসে অনুলিপি করার সময় সবচেয়ে ভাল কাজ করে, কারণ rsync বিদ্যমান ফাইলগুলিকে যথাযথ হিসাবে বিবেচনা করে (সুতরাং কোনও গন্তব্য ফাইল উপস্থিত থাকলে আরএসসিএনসি কখনই লিংক-ডেস্ট ডায়ারগুলিতে দেখে না )"
এর অর্থ হ'ল যদি y/file
উত্স হিসাবে একই উপস্থিত থাকে এবং z/file
তার মেয়াদ শেষ হয়ে যায়,
rsync -a --del -link-dest=y source:/file z
টিডব্লিউও আইওনডগুলি (এবং ডিস্কস্পেসের দ্বিগুণ) ব্যবহৃত হওয়ার ফলস্বরূপ, y/file
এবং z/file
এর একই বিষয়বস্তু এবং ডেটস্ট্যাম্পগুলি থাকবে।
আমি এটি জুড়ে এসেছি কারণ আমি প্রতিদিন এই স্ক্রিপ্টটি চালানোর সাথে মূলত দৈনিক ব্যাকআপ করি:
mv $somedaysago $today;
yest=$today; today=`date +%Y%m%d`;
rsync -avPShyH --del --link-dest=../$yest host:/dirs $today
যেহেতু আমার ব্যাকআপগুলি 10 এম ফাইল পর্যন্ত বিস্তৃত, তাই rm -rf $olddir; rsync source:$dir newdir
কাজটি খুব দীর্ঘ সময় নেয় (বিশেষত যখন কেবলমাত্র 0.5% ফাইলগুলি প্রতিদিন পরিবর্তন হয়, কেবল 50K নতুন বা পরিবর্তিত ফাইলগুলি হ্যান্ডেল করার জন্য 10M ডায়ার এন্ট্রিগুলি মুছতে এবং তৈরি করতে হয়, যা আমার ব্যাকআপগুলি পরের দিনের জন্য সময়ে সম্পূর্ণ হয় না)।
পরিস্থিতিটির একটি ডেমো এখানে দেওয়া হয়েছে:
a
আমাদের উত্স, এর 1
মাধ্যমে 4
আমাদের সংখ্যাযুক্ত ব্যাকআপ রয়েছে:
$ mkdir -p 1 2; echo foo > 1/foobar; cp -lrv 1/* 2
`1/foobar' -> `2/foobar'
$ ls -i1 */foobar
1053003 1/foobar
1053003 2/foobar
$ mkdir a; echo quux > a/foobar
$ mv 1 3; rsync -avPhyH --del --link-dest=../2 a/ 3
sending incremental file list
./
foobar
5 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
sent 105 bytes received 34 bytes 278.00 bytes/sec
total size is 5 speedup is 0.04
$ ls -i1 */foobar
1053003 2/foobar
1053007 3/foobar
1053006 a/foobar
$ mv 2 4; rsync -avPhyH --del --link-dest=../3 a/ 4
sending incremental file list
./
foobar
5 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/2)
sent 105 bytes received 34 bytes 278.00 bytes/sec
total size is 5 speedup is 0.04
$ ls -il1 */foobar
1053007 -rw-r--r-- 1 math math 5 Mar 30 00:57 3/foobar
1053008 -rw-r--r-- 1 math math 5 Mar 30 00:57 4/foobar
1053006 -rw-r--r-- 1 math math 5 Mar 30 00:57 a/foobar
$ md5sum [34a]/foobar
d3b07a382ec010c01889250fce66fb13 3/foobar
d3b07a382ec010c01889250fce66fb13 4/foobar
d3b07a382ec010c01889250fce66fb13 a/foobar
এখন আমাদের কাছে এর 2 টি ব্যাকআপ a/foobar
রয়েছে টাইমস্ট্যাম্প সহ সমস্ত উপায়ে একরকম, তবে বিভিন্ন ইনোড দখল করে।
কেউ মনে করতে পারে একটি সমাধান হবে --delete-before
, যা ইনক্রিমেন্টাল স্ক্যানের উপকারটিকে হত্যা করে তবে ফাইলটি মুছে ফেলা হবে না বলে এটি কার্যকর হয় না তবে বর্ধিত অনুলিপি সম্ভব হলে ক্ষেত্রে ভিত্তি হিসাবে ব্যবহৃত হয়।
কেউ হয়তো আরও অনুমান করতে পারে তখন আমরা এই বর্ধিত-অনুলিপি হেজটি বন্ধ করে দিতে পারি --whole-file
, তবে এটি কোনওভাবেই অ্যালগরিদমকে সহায়তা করে না, আমরা যা চাই তা পাওয়ার কোনও উপায় নেই।
আমি এই আচরণটিকে আরএসসিএনকে আরও একটি বাগ হিসাবে বিবেচনা করি, যেখানে বিভিন্ন কমান্ড আর্গুমেন্টের যত্ন সহকারে নির্বাচন থেকে একটি উপকারী আচরণ নির্ণয় করা যেতে পারে, তবে পছন্দসই ফলাফল পাওয়া যায় না।
দুর্ভাগ্যক্রমে একটি সমাধান একটি পার্সোনাল ক্রিয়াকলাপ থেকে একটি পারমাণবিক অপারেশন হিসাবে একটি শুকনো-রানের সাথে সরে যাওয়া -n
, এটি লগ করা, লগটিকে ইনপুট হিসাবে সমস্ত পরিবর্তিত ফাইল ম্যানুয়ালি প্রাক-মুছে ফেলার জন্য প্রক্রিয়াকরণ করা হবে, তারপরে rsync --link-dest
আমরা যা চাই তা পেতে দৌড়াতে চাই - একটি বড় কলজ একটি একক পরিষ্কার rsync তুলনায়।
সংযোজন: প্রাক লিঙ্ক করার চেষ্টা $yesterday
এবং $today
ব্যাকআপ সার্ভারে সঙ্গে উৎপাদন বক্স বিরুদ্ধে ব্যাকআপ আগে rsync --link-dest=../$yesterday $yesterday/ $today
- কিন্তু একই ফলাফল - যেকোনো ফাইল যে কোন ভাবেই বিদ্যমান, এমনকি 0 দৈর্ঘ্য, মুছে না করা হবে এবং লিঙ্ক dested পরিবর্তে একটি সম্পূর্ণ নতুন কপিটি নতুন ইনোড এবং আরও ডিস্কস্পেস ব্যবহার করে সোর্সডির থেকে তৈরি করা হবে।
এ খুঁজছি pax(1)
একটি সম্ভাব্য প্রাক লিঙ্ক-পূর্বে ব্যাকআপ সমাধান হিসেবে।
--delete-after
ঠিক আছে, তবে হাতে থাকা ইস্যুটির সাথে সম্পর্কিত নয়। উত্স থেকে অনুপস্থিত ফাইলগুলি অনুলিপিটি শেষ হওয়ার পরে মুছে ফেলা হবে। আমি যে বিষয়টি বুঝিয়ে দিচ্ছি তা আজকের ব্যাকআপের সাথে সম্পর্কিত যা গতকালের অনুরূপ তবে গতকালের ইনোডের সাথে লিঙ্কযুক্ত কোনও পুরানো বিদ্যমান তারিখের ফাইলের বিপরীতে নয়, গতকালের ডিস্ক-স্পেসের দ্বিগুণ হয়ে নতুন ফাইল হিসাবে সংরক্ষণ করা হয়েছে অভিন্ন অনুলিপি বিবেচনা করা হয়।
rsnapshot
? এছাড়াও, "অভিন্ন" ফাইলগুলি পুনরায় সংযোগ করতে একটি ছোট স্ক্রিপ্ট লিখতে বিবেচনা করুন। আমি উভয়ই আমার সিস্টেমে করি।
hardlink(1)
ধীর গতি (আরএসসিএনসি এর মেটাডেটা স্ক্যানের চেয়ে 15x ধীর); pax
দ্রুত তবে এচডিডি হেডগুলি পুরানো ব্যাকআপটিকে নতুনের সাথে তুলনা করে th rsync -n
ব-দ্বীপের তালিকাটি পাওয়ার অর্থ উত্পাদনের সার্ভারগুলিতে দুবার আঘাত করা (10 এম ফাইলগুলি স্ক্যান করা 50K পরিবর্তনগুলি অনুলিপি করার চেয়ে অনেক বেশি প্রভাবিত হয়)। এর অনুমতি দেওয়ার জন্য rsync এ একটি বিকল্প সম্পর্কে তালিকাটি মেইল করব Ill
--delete-after
এই ব্যবহারের দৃশ্যে ব্যবহার করি , এতে কী দোষ আছে?