হার্ডলিঙ্কগুলি সংরক্ষণ করে কীভাবে ডিরেক্টরিগুলি অনুলিপি করবেন?


40

যে ডিরেক্টরিগুলিতে ফাইলগুলি এক থেকে অন্য পার্টিশনে রয়েছে সেগুলি কীভাবে সরানো যায়?

ধরে নেওয়া যাক আমরা /mnt/Xহার্ডলিঙ্কগুলির সাথে ডিরেক্টরিগুলি ভাগ করে নেওয়ার সাথে ডিরেক্টরিতে পার্টিশনটি মাউন্ট করেছি। এই জাতীয় ডিরেক্টরিগুলি অন্য পার্টিশনে কীভাবে স্থানান্তরিত করা যায়, /mnt/Yসেই হার্ডলিঙ্কগুলি সংরক্ষণের সাথে এটি থাকা উচিত ।

"হার্ডলিঙ্কগুলির সাথে সাধারণভাবে ফাইলগুলি ভাগ করে নেওয়ার ডিরেক্টরিগুলি" বলতে কী বোঝাতে চেয়েছি তার আরও ভাল উদাহরণের জন্য, এখানে একটি উদাহরণ রয়েছে:

# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a

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

উত্তর:


29

প্রথম উত্তর: জিএনইউ ওয়ে

জিএনইউ cp -aঅনুলিপি যথাসম্ভব কাঠামো এবং মেটাডেটা সংরক্ষণ করে। উত্স ডিরেক্টরিতে ফাইলগুলির মধ্যে হার্ড লিঙ্কগুলি এতে অন্তর্ভুক্ত রয়েছে। অন্যান্য সমস্ত বৈশিষ্ট্য ছাড়াই বিশেষভাবে হার্ড লিঙ্ক সংরক্ষণ নির্বাচন করতে -a, ব্যবহার করুন --preserve=links

mkdir src
cd src
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
cp -r -l a hardlinks_of_a
cd ..
cp -a src dst

3
ট্যারে +1, সিপির জন্য gnu- নির্দিষ্ট যুক্তি ব্যবহারের জন্য -1।
নটহাগো 15

আপনি একটিতে তিনটি উত্তর দিয়েছেন। আপনি কি তাদের তিনটি বিভক্ত করতে পারেন যাতে তাদের আলাদাভাবে মন্তব্য করা যায় এবং মূল্যায়ন করা যায়? (টিপ: আপনি শুধুমাত্র একটি ছেড়ে এই সম্পাদনা করতে পারেন, - উদাহরণস্বরূপ "CP -a" জন্য পরবর্তীতে আরো দুটি "আলকাতরা" এবং "প্যাক্স" জন্য যোগ করুন,।)
Grzegorz Wierzowiecki

1
@ গ্রজেগোর্জউইয়ারজোওইকি বিভাজন সম্পন্ন হয়েছে
অ্যালান কারি

6
@ হুগো: স্ট্যান্ডার্ড সরঞ্জামগুলিতে জিএনইউ-নির্দিষ্ট আরগস ব্যবহার করে কোনও ভুল নেই। জিএনইউ সংস্করণগুলি আজকাল ডি-ফ্যাক্টো স্ট্যান্ডার্ড, এবং যখন তারা প্রাক ইনস্টল করা হয়নি তখনও জিএনইউ সরঞ্জামগুলি ইনস্টল করা প্রচলিত ছিল (আমি জানি আমি সবসময়ই করতাম - সেগুলি সোলারিস এবং * বিএসডি সংস্করণগুলির চেয়ে সহজ ছিল) , এবং তারা বিভিন্ন * নিক্সের মধ্যে ধারাবাহিকতা সরবরাহ করেছিল)। আপনি যখন জিনউইমগুলি ব্যবহার করেন তবে যখন প্রয়োজন হয় না তখন এটি নির্দিষ্ট করে দেওয়া ভাল অনুশীলন। এছাড়াও গ্রজেগোর্জ "লিনাক্স অন নন" বলেছিলেন না তাই এটি যে পরিবেশের কথা বলছেন সেটাই ধরে নেওয়া যুক্তিযুক্ত।
ক্যাস

1
@ কেন নটহাগো: পসিক্স কীভাবে "আরও বেশি স্ট্যান্ডার্ড হতে পারে?"। পসিক্স হল এমন জিনিস যা আমাদের যেখানে আনে সেখানে নিয়ে আসে। আপনি কি জানতেন যে উইন্ডোজ এনটি থেকে সমস্ত উইন্ডোজ সংস্করণ সম্পূর্ণরূপে পসিক্স অনুগত? POSIX ফাইল I / O ফাংশন ব্যবহার করার সময় তাদের 255 অক্ষরের দৈর্ঘ্যের সীমাবদ্ধতা থাকে যা এগুলি অকেজো করে। আপনি কি জানতেন যে সোলারিস, আইরিক্স, এইচপি-ইউএক্স সবই পসিক্স অনুগত, এবং তবুও তাদের সরঞ্জামগুলির সমস্ত যুক্তি পৃথক (যেমন টার)। সিপি -a হ'ল যে কোনও সিপি সংস্করণ যা জিএনইউ অনুলিপি প্রতিস্থাপন করতে চায় তার ন্যূনতম প্রয়োজনীয়তা।
জোহানেস ওভারম্যান

36

এর জন্য আরএসইএনসি এর একটি -Hবা --hard-linksবিকল্প রয়েছে এবং এটি বন্ধ এবং পুনরায় চালু করতে সক্ষম হয়ে ওঠার আগের আরএসআইএনসি সুবিধাগুলি রয়েছে এবং পূর্ববর্তী রান চলাকালীন / পরে যে কোনও ফাইল পরিবর্তিত হয়েছিল সেগুলি দক্ষতার সাথে ডিল করতে পুনরায় চালানো হবে।

-H, --hard-links
    This tells rsync to look for hard-linked files in
    the source and link together the corresponding
    files on the destination.  Without  this option,
    hard-linked files in the source are treated as
    though they were separate files. [...]

rsyncম্যান পৃষ্ঠাটি পড়ুন এবং -H এর জন্য অনুসন্ধান করুন। নির্দিষ্ট ক্যাভেট সম্পর্কে এখানে আরও অনেক বিস্তারিত রয়েছে।


2
আমি পরীক্ষা করেছি - এটি কাজ করে।
গ্রজেগোর্জ ওয়েয়ারজোইইকি

হ্যাঁ আমি জানি. আমি আমার ব্যাকআপ স্ক্রিপ্টগুলিতে বছরের পর বছর ধরে এটি ব্যবহার করে আসছি। আপনার প্রশ্ন হিসাবে ফাইল সিস্টেমের মধ্যে ফাইল সরাতে।
ক্যাস

আরএসআইএনসি ফাইল তালিকা তৈরি করার সময় মেমরির গাবগুলি ব্যবহার করে। আমার জন্য "বিল্ডিং ফাইল তালিকার বিল্ডিং ..." বহু ঘন্টা থাকার পরে এটি আমার 16 গিগাবাইটের স্মৃতি পূরণ করে এবং কোনও কিছুই অনুলিপি না করে জামিন পেয়েছে। YMMV।
এমএসসি

2
থেকে man rsync: আরএসসিএনসি ৩.০.০ দিয়ে শুরু করা, পুনরাবৃত্তির ব্যবহৃত অ্যালগরিদম এখন একটি ইনক্রিমেন্টাল স্ক্যান যা আগের তুলনায় অনেক কম মেমরি ব্যবহার করে এবং প্রথম কয়েকটি ডিরেক্টরি স্ক্যান করার পরে স্থানান্তর শুরু করে। এই ইনক্রিমেন্টাল স্ক্যানটি কেবল আমাদের পুনরাবৃত্তির অ্যালগরিদমকে প্রভাবিত করে এবং পুনরাবৃত্তিযোগ্য স্থানান্তর পরিবর্তন করে না। এটি কেবল তখনই সম্ভব যখন স্থানান্তরটির উভয় প্রান্তই কমপক্ষে সংস্করণ 3.0.0 হয়। উভয় নোট করুন --delete-beforeএবং --delete-afterএই উন্নত অ্যালগরিদম অক্ষম করুন।
ক্যাস

এছাড়াও, rsyncঅবিশ্বাস্যরূপে কার্যকর হলেও এটি প্রতিটি কাজের জন্য সর্বদা সেরা সরঞ্জাম নয়। এই দিনগুলিতে আমি জেডএফএস ডেটাসেটগুলি ব্যবহার করতে পছন্দ করি যাতে আমি এবং zfs sendসেগুলি স্ন্যাপশট করতে পারি - আমি বেশিরভাগই জেডএফএস নন ফাইল সিস্টেমগুলিতে আরএসসিএনসি ব্যবহার করি। btrfsঅনুরূপ স্ন্যাপশট আছে + প্রেরণ ক্ষমতা।
ক্যাস

14

তৃতীয় উত্তর: পসিক্স ওয়ে

POSIX tarইউটিলিটিটি মানক করে না , যদিও তারা tarসংরক্ষণাগার বিন্যাসটি মানক করেছে । টার আর্কাইভগুলি পরিচালনা করার জন্য পসিক্স ইউটিলিটি বলা হয় paxএবং এতে একটি একক প্রক্রিয়াতে প্যাক এবং আনপ্যাক অপারেশন করতে সক্ষম হওয়ার বোনাস বৈশিষ্ট্য রয়েছে।

mkdir dst
pax -rw src dst

10

দ্বিতীয় উত্তর: প্রাচীন ইউনিক্স ওয়ে

উত্স ডিরেক্টরিতে একটি টার সংরক্ষণাগার তৈরি করুন, এটি একটি পাইপের মাধ্যমে প্রেরণ করুন এবং গন্তব্য ডিরেক্টরিতে আনপ্যাক করুন।

# create src as before
(cd src;tar cf - .) | (mkdir dst;cd dst;tar xf -)

1
পরীক্ষিত -> কাজ করে। হার্ডলিঙ্কগুলি সংরক্ষণ করা হয়েছে।
গ্রজেগোর্জ ওয়েয়ারজোইইকি

1
কেন এটি আসলে হার্ডলিঙ্কগুলি সংরক্ষণ করে তার কোনও অন্তর্দৃষ্টি?
পিটার্ফ

1
কারণ tarহার্ড-লিঙ্কগুলি সংরক্ষণ করে। গনুহ আলকাতরা সালে অন্তত, আপনি এই আচরণ সঙ্গে নিষ্ক্রিয় করতে পারেন--hard-dereference
CA গুলির

আমার ক্ষেত্রে, একটি বৃহত্তর ডিরেক্টরি হায়ারার্কি (একটি টাইমম্যাচিন ব্যাকআপ) অনুলিপি করার চেষ্টা করে, কিছু কিছু হার্ড লিঙ্ক সংরক্ষণ করা হয়েছিল তবে কিছু ক্ষেত্রে ফাইলটি প্রতিলিপি করা হয়েছিল। আমি মনে করি এটি এর কারণ tar xহিসাবে ফাইলগুলির এখনও ফাইলগুলি পাইপ-ইন করা হচ্ছে বলে পুরো ফাইল তালিকা নেই tar c। সম্ভবত আপনি যদি এটি সংরক্ষণের আগে পুরো সংরক্ষণাগারটি সংরক্ষণ করেন তবে তা ঠিক হবে। কেউ যদি এই তত্ত্বটি নিশ্চিত করতে পারে তবে আমি খুব খুশি হব।
এমএসসি

10

সূত্র: http://www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/

আপনার একটি সঠিক অনুলিপি তৈরি করতে হবে তা হ'ল

rsync -az -H --delete --numeric-ids /path/to/source/ /path/to/dest/

উপরে rsync সম্পর্কে আমার মন্তব্য দেখুন।
এমএসসি

1
আমার সন্দেহ হয় এটি এসিএল, বর্ধিত বৈশিষ্ট্য এবং আরও কিছু অনুলিপি করবে না। লিনাক্স সংস্করণে এগুলি সংরক্ষণের জন্য -A এবং -X বিকল্প রয়েছে তবে আমি মনে করি আপনি ম্যাকওএসের ভাগ্যের বাইরে রয়েছেন।
এডওয়ার্ড ফালক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.