একটি ডিরেক্টরি ট্রিকে নকল করতে, ফাইলগুলিতে হার্ডলিঙ্ক তৈরি করতে আমি কীভাবে rsync ব্যবহার করতে পারি?


23

সময়ে সময়ে, আমাকে আমার সার্ভারে ডেটা ফাইলগুলিতে বেশ কয়েকটি বড় মাইগ্রেশন পরিবর্তন করতে হবে এবং আমি এটি করার জন্য একটি ভাল উপায়ের সন্ধান করছি। আমি রুট ডেটা ফোল্ডারে শুরু করে আমার ডিরেক্টরি কাঠামোটি নকল করতে আরএসসিএন ব্যবহার করার কথা ভাবছিলাম, সমস্ত মূল ফাইলের হার্ড লিঙ্ক তৈরি করেছিলাম (এর মধ্যে কিছুগুলি এর চেয়ে বড় বড়), এবং আমি গন্তব্য বৃক্ষটিতে কেবল যে ফাইলগুলিকে স্থানান্তর করতে হবে সেগুলি ওভাররাইট করতে পারি। শেষ পর্যন্ত, আমি দুটি mvঅপারেশন সহ পুরানো ফাইলগুলি থেকে নতুন ফাইলগুলিতে নিরাপদে স্যুইচ করতে পারি ।

যাইহোক, আমি এটি করতে আরএসআইএনসি পেতে পারি না। আমি চেষ্টা করেছিলাম

rsync -a --link-dest=$DATA $DATA $DATA/../upgrade_tmp

তবে ফাইলগুলিতে হার্ড লিঙ্ক তৈরি করার পরিবর্তে, আরএসসিএনসি সেগুলি সম্পূর্ণরূপে অনুলিপি করে। একই উত্স এবং লিংক-ডেস্ট ডিরেক্টরিটি ব্যবহার করে কোনও সমস্যা আছে?

উত্তর:


21

rsync এটি একটি শক্তিশালী সরঞ্জাম, তবে দুর্ভাগ্যক্রমে এটির কয়েকটি পথের নামটি অদ্ভুতভাবে পছন্দসই।

যদি $DATAএকটি নিখুঁত পথ হয় (যেমন এটি একটি দিয়ে শুরু হয় /), তবে সঠিক কমান্ড-লাইনটি ব্যবহার করতে হবে:

rsync -a --link-dest=$DATA $DATA/ $DATA/../upgrade_tmp

[এখন, rsyncএর অদ্ভুততা সম্পর্কে কেবল একটি সংক্ষিপ্ত অংশ । /সোর্স আর্গুমেন্টে ট্রেলিং যোগ করুন Note এটি উত্স ডিরেক্টরিটি না করে সোর্স ডিরেক্টরিটির বিষয়বস্তুগুলিরrsync সাথে কাজ করতে বলে । (আমি ধরে নিচ্ছি যে এর মধ্যে ইতিমধ্যে কোনও পেছন নেই )) এই ক্ষেত্রে, আমরা বিষয়বস্তুগুলির সাথে কাজ করতে চাই, তাই আমরা পিছনে যুক্ত করছি ]]$DATA//

অন্যদিকে, $DATAযদি কোনও আপেক্ষিক পথ হয় (যেমন এটি একটি দিয়ে শুরু হয় না /), তবে সান আর সম্পর্কে মন্তব্যটি --link-destপ্রশংসনীয়: লিংক-ডেথ পাথ গন্তব্য পথের তুলনায় ব্যাখ্যা করা হয়েছে , সুতরাং আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

rsync -a --link-dest=../`basename $DATA` $DATA/ $DATA/../upgrade_tmp

সম্পাদনা

একটি চূড়ান্ত নোট, এটি দেখা যাচ্ছে যে rsyncআমি যে দ্বিতীয় কমান্ড-লাইন দিয়েছি তা $DATAপরম পথ কিনা তা বিবেচনা না করেই কাজ করা উচিত , যেহেতু basenameকোনও পথ পরম বা আপেক্ষিক কিনা তা বিবেচনা করে না।


1
কেবল একটি অনুপস্থিত স্ল্যাশ, কে এই কথা ভেবেছিল ... চমৎকার ব্যাখ্যা করার জন্য ধন্যবাদ!
জিন-ফিলিপ পেলিট

এই জন্য আপনাকে ধন্যবাদ, আমি বেশ কিছু ক্রমবর্ধিষ্ণু ব্যাকআপ নির্দেশাবলী অনুসরণ চেষ্টা করেছি, মত এই এক এবং এই ছল কোন উল্লেখ খুঁজে পাইনি। এই একমাত্র জিনিসটি ছিল যা নিশ্চিত করা হয়েছিল যে ফাইলগুলি হার্ডলিঙ্ক করা হচ্ছে। ls -ilah
ওয়ালফ

আমি ইউনিক্স.স্ট্যাকেক্সেঞ্জার / এ / ৮50০68//74৪৪৪ এ বর্ণিত রিলপথ () ফাংশনটির সাথে এইভাবে একটি $SOURCEডিরেক্টরিকে একটি ডিয়ারের$TARGET মতো ব্যাকআপ করতে ব্যবহার করেছি :SOURCE='abs_path_to_backup'; TARGET='.'; rsync -a --link-dest=$(relpath $TARGET $SOURCE) $SOURCE/ $TARGET/
নাথান এস ওয়াটসন-হাই

13

আপনি যা চান তা হ'ল "সিপি -াল":

cp -al $DATA/ $DATA/../upgrade_tmp/
  • - একটি পুনরাবৃত্তি rsync -a
  • -l ফাইলগুলি অনুলিপি না করে হার্ড লিঙ্ক করবে।

1
cp -alদুর্ভাগ্যক্রমে আমার সিস্টেমে উপলব্ধ নেই (ম্যাক ওএস এক্স 10.6)। আমি পরিবর্তে প্যাক্স ব্যবহার করব ...
জিন-ফিলিপ পেলিট

7

--link-destবিকল্প rsyncআপেক্ষিক গন্তব্য ডিরেক্টরির না বর্তমান ডিরেক্টরির। সুতরাং আপনি যা চান তা হ'ল:

rsync -a --link-dest=../`basename $DATA` $DATA $DATA/../upgrade_tmp

ওহো, আমি বেসনাম বলতে চাইছিলাম, মূলত আমার নাম ছিল ir
শান রিফশনিডার

1
ম্যান পৃষ্ঠাটি সেই --link-destবিকল্পটি বলে , যদি আপেক্ষিক হয় , লক্ষ্য ডিরেক্টরি সম্পর্কিত। আমার ক্ষেত্রে এটি পরম। এমনকি এটি লক্ষ্য ডিরেক্টরি সম্পর্কিত তুলনায় এটি কাজ করে না।
জিন-ফিলিপ পেলিট

7

দেখা যাচ্ছে যে rsyncঅন্যান্য সরঞ্জামগুলির চেয়ে এটি করা আরও কঠিন । এর সঠিক উত্তরটি rsyncহ'ল স্টিভেন মোনাইয়ের, তবে এটির সবচেয়ে সহজ উপায় হ'ল হয় এমন কোনও সিস্টেম cp -alবা pax -rwlএমন সিস্টেমে ব্যবহার করা যেখানে এর -lজন্য বৈধ বিকল্প নেই cp:

pax -rwl $DATA $DATA/../upgrade_tmp

অথবা

cp -al $DATA/ $DATA/../upgrade_tmp/

4

এটা আমার জন্য কাজ করে:

$ rsync --hard-links --recursive --link-dest=/local user@host:/remote/ /local

আমি rsync সংস্করণটি 3.1.0 ব্যবহার করি।

মানুষের কাছ থেকে :

--hard-লিঙ্ক

ট্রান্সফারটিতে হার্ড-লিঙ্কযুক্ত ফাইলগুলি সন্ধানের জন্য আরএসসিএনকে বলে, এই বিকল্পটি ছাড়াই, স্থানান্তরটিতে হার্ড-লিঙ্কযুক্ত ফাইলগুলি পৃথক ফাইলের মতো বিবেচনা করা হয়।

--link-DEST = dir

অপরিবর্তিত ফাইলগুলি ডিআইআর থেকে গন্তব্য ডিরেক্টরিতে কঠোরভাবে লিঙ্কযুক্ত। ফাইলগুলি একসাথে লিঙ্ক করার জন্য ফাইলগুলি অবশ্যই সংরক্ষিত সমস্ত বৈশিষ্ট্যে (যেমন অনুমতি, সম্ভবত মালিকানা) অভিন্ন থাকতে হবে


2
কেবল কোড স্নিপেটই যথেষ্ট নয়, এটি কী করে এবং কেন তা ব্যাখ্যা করুন।
পিটার বলেছেন মনিকা

--হার্ড-লিঙ্কগুলি আরএসইএনকে স্থানান্তরটিতে হার্ড-লিংকযুক্ত ফাইলগুলি সন্ধান করতে বলে, এই বিকল্পটি ছাড়াই, স্থানান্তরটিতে হার্ড-লিঙ্কযুক্ত ফাইলগুলি পৃথক ফাইল হিসাবে বিবেচনা করা হয়। --link-dest = DIR অপরিবর্তিত ফাইলগুলি ডিআইআর থেকে গন্তব্য ডিরেক্টরিতে শক্তভাবে যুক্ত। ফাইলগুলি একসাথে যুক্ত হওয়ার জন্য সমস্ত সংরক্ষিত গুণাবলী (যেমন অনুমতি, সম্ভবত মালিকানা) এ ফাইলগুলি অবশ্যই অভিন্ন হতে হবে।
আলেকজান্ডার ফেদোরভ

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

2

নীচের লিঙ্কটি চেষ্টা করতে পারেন http://www.lessfs.com/wordpress/ এটি COW ( রাইটে অনুলিপি) কাজ করে যা সময় এবং স্থান সাশ্রয় করে


কমফেসগুলি অত্যন্ত আকর্ষণীয় তবে এটি খুব পরীক্ষামূলকও। এখনও উত্পাদন ব্যবহারের জন্য প্রস্তাবিত নয়।
mattdm

2

প্রথমে কেবল গন্তব্যস্থলে ডিরেক্টরিগুলি তৈরি করুন:

rsync -av --include '*/' --exclude '*' /source/ /destination/

তারপরে কেবল ফাইলগুলি হার্ড লিঙ্ক করুন:

cd /source
find . -type f -exec ln -v {} /destination/{} \;

ধন্যবাদ - প্রকৃতপক্ষে, আমি paxআমার মন্তব্যে দেখানো মত ব্যবহার করতে পারি যা সহজ বলে মনে হচ্ছে।
জিন-ফিলিপ পেলিট

1

হার্ডলিঙ্কগুলি সংরক্ষণ এবং মানচিত্রটি পড়তে বিকল্প -H ব্যবহার করুন।


1
- এইচ কাজ করে না। আমার উত্স ট্রিতে সংরক্ষণের জন্য আমার কোনও হার্ডলিঙ্ক নেই, আমি কেবল আমার উত্স গাছের একটি অনুলিপি চাই যেখানে অনুলিপিটিতে সমস্ত ফাইল মূল ফাইলগুলিতে হার্ডলিঙ্কযুক্ত। দুঃখিত আমার আসল প্রশ্নটি অস্পষ্ট ছিল ...
জিন-ফিলিপ পেলিট

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