যদি পুরানো ফাইলটি ইতিমধ্যে বিদ্যমান থাকে তবে --link-dest বিকল্পের সাথে অভিন্ন ফাইলগুলি সংযুক্ত করতে কীভাবে rsync পাবেন?


11

কেউ ভাবতে পারেন যে --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এই ব্যবহারের দৃশ্যে ব্যবহার করি , এতে কী দোষ আছে?
গুগৌড

1
--delete-afterঠিক আছে, তবে হাতে থাকা ইস্যুটির সাথে সম্পর্কিত নয়। উত্স থেকে অনুপস্থিত ফাইলগুলি অনুলিপিটি শেষ হওয়ার পরে মুছে ফেলা হবে। আমি যে বিষয়টি বুঝিয়ে দিচ্ছি তা আজকের ব্যাকআপের সাথে সম্পর্কিত যা গতকালের অনুরূপ তবে গতকালের ইনোডের সাথে লিঙ্কযুক্ত কোনও পুরানো বিদ্যমান তারিখের ফাইলের বিপরীতে নয়, গতকালের ডিস্ক-স্পেসের দ্বিগুণ হয়ে নতুন ফাইল হিসাবে সংরক্ষণ করা হয়েছে অভিন্ন অনুলিপি বিবেচনা করা হয়।
গণিত

আপনি যা প্রশ্ন করছেন তা পুরোপুরি নিশ্চিত নয়। আপনি বিবেচনা করেছেন rsnapshot? এছাড়াও, "অভিন্ন" ফাইলগুলি পুনরায় সংযোগ করতে একটি ছোট স্ক্রিপ্ট লিখতে বিবেচনা করুন। আমি উভয়ই আমার সিস্টেমে করি।
রোয়াইমা

1
আপনি যদি এখানে প্রয়োজনীয় উত্তরটি না পান তবে আপনি RSSync তালিকায় পোস্ট করতে পারেন। আরএসআইএনসি বিকাশকারীরা নিয়মিত অনেক উন্নত ব্যবহারকারীদের সাথে প্রশ্নের উত্তর দেন। আপনি সেগুলিকে তালিকা.সাম্বা.আর.এল / মেইলম্যান / লিস্টিনফো / আরসিঙ্কের মাধ্যমে খুঁজে পেতে পারেন । আমি বেশিরভাগ সেখানে লুকিয়ে থাকি এবং অনেক কিছু শিখি।
জো

আরএসএন্যাপশট পুরানো ব্যাকআপগুলি পুনর্ব্যবহার করবে না - এবং আমার প্রয়োজন: আমার যদি 2 মো এবং 2-মো + 1 দিনের পুরানো ব্যাকআপ থাকে তবে আমি নতুন টার্গেট হিসাবে একটিটিকে চক্র করতে পারি। যেহেতু / 5% ফাইলের দিন / দিন পরিবর্তন হয়, তাই আমি 10 এম এর পরিবর্তে 50 কে হার্ডলিঙ্ক তৈরি করি। এই গতির ভিন্নতা 5 টি সার্ভার / নাইট বনাম নয় ব্যাক আপ করতে দেয়। hardlink(1)ধীর গতি (আরএসসিএনসি এর মেটাডেটা স্ক্যানের চেয়ে 15x ধীর); paxদ্রুত তবে এচডিডি হেডগুলি পুরানো ব্যাকআপটিকে নতুনের সাথে তুলনা করে th rsync -nব-দ্বীপের তালিকাটি পাওয়ার অর্থ উত্পাদনের সার্ভারগুলিতে দুবার আঘাত করা (10 এম ফাইলগুলি স্ক্যান করা 50K পরিবর্তনগুলি অনুলিপি করার চেয়ে অনেক বেশি প্রভাবিত হয়)। এর অনুমতি দেওয়ার জন্য rsync এ একটি বিকল্প সম্পর্কে তালিকাটি মেইল ​​করব Ill
গণিত

উত্তর:


12

(প্রশ্ন সম্পাদনা থেকে রূপান্তরিত)

এটি rsync আপগ্রেড করে সমাধান করা হয়। সংস্করণ 3.1.1 বা --link-destতারপরে এখন লক্ষ্য এবং ডিরেক্টরিতে অভিন্ন ফাইলগুলি একটি হার্ডলিঙ্কযুক্ত ফাইলের সাথে প্রতিস্থাপন করবে । প্রচুর জায়গা বাঁচায়।

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