एक ड्राइव से दूसरे में पूरे फाइल सिस्टम पदानुक्रम की प्रतिलिपि बनाएँ


95

मैं पूरी फाइल सिस्टम पदानुक्रम को एक ड्राइव से दूसरे ड्राइव पर कॉपी करना चाहूंगा .. प्रत्येक निर्देशिका की सामग्री के साथ-साथ लिनक्स प्लेटफॉर्म में नियमित फाइलें। संभवत: लिनक्स इन-बिल्ट फ़ंक्शन के साथ ऐसा करने का सबसे अच्छा तरीका जानने के लिए आभारी होंगे। फाइल सिस्टम एक एक्सट्रीम फैमिली है।


1
उम्म ... प्यार कहाँ है dd? dd if=/dev/sda1 of=/dev/sdb1 bs=4096
जूनियुब्रिस्ट

dj के लिए @juniorRubyist +1। मैं हमेशा इसका इस्तेमाल करता हूं। लेकिन कौन से झंडे का उपयोग करना है? मैं उपयोग करता हूं conv=notrunc,noerror,sync
बेनीबेला

-1 dd2 कारणों के लिए: सबसे पहले एक फाइल सिस्टम की ब्लॉक-स्तरीय कॉपी करना एक बुरा विचार है जो माउंट किया गया है (जिसके लिए मामला है /) और दूसरी बात ddयह है कि जैसे फाइल सिस्टम के भीतर घुड़सवार स्रोतों से डेटा कॉपी नहीं किया जाएगा /bootऔर /home
एरिक

जवाबों:


33

मैं अक्सर उपयोग करता हूं

> cp -ax / /mnt

प्रकल्पित / mnt नई डिस्क / mnt पर आरोहित है और / पर कोई अन्य आरोह नहीं है।

-x इसे एक फाइल सिस्टम पर रखता है।

इस कोर्स को जड़ के रूप में या सुडो का उपयोग करने की आवश्यकता है।

इस लिंक में कुछ विकल्प हैं, जिसमें ऊपर वाला भी शामिल है

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html


हालांकि यह पुराना पुराना जवाब है, यह अभी भी ध्यान देने योग्य है कि आप आमतौर पर मौजूद सभी सामानों को कॉपी नहीं करना चाहते हैं /, अर्थात /dev, को छोड़कर /sys, /procआदि। इसलिए यह जारी करने से पहले कि cpमैं बेहतर दृष्टिकोण (rsync का उपयोग करके) की खोज करने का सुझाव देता हूं
Marcin Orlowski

2
@MarcinOrlowski वोल्फजेएम के झंडे के उपयोग का -xमतलब है कि आपके द्वारा उल्लेखित सिंथेटिक फाइल सिस्टम कॉपी नहीं किए जाएंगे।
जिम एल।

192

आप जो चाहते हैं वह rsync है

इस कमांड का इस्तेमाल किसी फोल्डर को सिंक्रोनाइज़ करने के लिए किया जा सकता है, और आधे रास्ते में गर्भपात होने पर कॉपी को फिर से शुरू करने के लिए भी किया जा सकता है। एक डिस्क को कॉपी करने का कमांड है:

rsync -avxHAX --progress / /new-disk/

विकल्प हैं:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

प्रतिलिपि की गति में सुधार करने के लिए, फ़ाइलों की डेल्टास / डिफरेंसेस की गणना से बचने के लिए -W( --whole-file) जोड़ें । यह तब डिफ़ॉल्ट होता है जब स्रोत और गंतव्य दोनों को स्थानीय पथ के रूप में निर्दिष्ट किया जाता है, क्योंकि rsync के डेल्टा-ट्रांसफर एल्गोरिथ्म का वास्तविक लाभ नेटवर्क उपयोग को कम कर रहा है।

--numeric-idsउपयोगकर्ता / समूह के नाम से यूआईडी / जीआईडी ​​मूल्यों की मैपिंग से बचने के लिए जोड़ने पर भी विचार करें।


1
प्रतिभा, धन्यवाद। Btw, मैं का उपयोग कर समाप्त हो गया, rsync -avxHAWX --numeric-ids --progress / mnt/लेकिन मुझे करना चाहिए था rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out। मुझे शक है कि टर्मिनल में आउटपुट डालना प्रक्रिया को धीमा कर देता है। : डी
क्रिस के

28
--info=progress2के बजाय --progressबड़े स्थानान्तरण के लिए उपयोगी है, क्योंकि यह व्यक्तिगत फ़ाइलों के बजाय (लाखों लाइनों के लिए) समग्र प्रगति देता है।
फ्लोरियन

3
मुझे प्रतिस्थापित करना था Xऔर इसके Aसाथ E, क्योंकि Eमेरे मैक पर विस्तारित विशेषताओं और ACL को कवर किया गया है। परीक्षण किया गया:rsync version 2.6.9 protocol version 29
जोनाथन कोमार

1
के अलावा > ~/rsync.out, 2> ~/rsync.errकिसी भी फ़ाइल में किसी भी त्रुटि को बचाएगा।
ऐले

2
आप कुछ अन्य फ़ोल्डर से से कॉपी कर रहे हैं /:, ध्यान दें कि स्रोत निर्देशिका पर स्लैश होने (या नहीं) एक फर्क नहीं पड़ता rsync source/ dest/अंदर प्रतियां सब कुछ source/करने के लिए dest/है, जबकि rsync source dest/प्रतियां फ़ोल्डर sourceऔर सब कुछ अंदर में dest/
सेमी-एक्सट्रिंसिक

45

माइकल आरोन सफ़्यान का जवाब विरल फाइलों के लिए नहीं है। -Sविकल्प ठीक करता है।

इसके अलावा यह संस्करण प्रत्येक फ़ाइल की प्रगति के साथ स्पैम नहीं करता है और डेल्टा सिंकिंग नहीं करता है जो गैर-नेटवर्क मामलों में प्रदर्शन को मारता है।

एक स्थानीय ड्राइव से दूसरे स्थानीय ड्राइव पर फाइलसिस्टम कॉपी करने के लिए बिल्कुल सही।

rsync -axHAWXS --numeric-ids --info=progress2

1
गजब का। यह वास्तव में एक अच्छा काम कर रहा है
गिल्डस

1
यह स्वीकृत उत्तर होना चाहिए, महान काम करता है। उदाहरण55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
Drew

1
<3 यह एकदम सही है
टिम स्ट्रीजहॉर्स्ट

6

एक ड्राइव से दूसरे के लिए एक शॉट स्थानीय प्रति के लिए, मुझे लगता है कि ऊपर से वोल्फमैन द्वारा वर्णित के रूप में cp पर्याप्तता है।

उदाहरण के लिए स्थानीय या दूरस्थ बैकअप जैसे बड़े कामों के लिए, rsync सबसे अच्छा है ।

बेशक, rsync उपयोग करने के लिए काफी अधिक जटिल है।

क्यों rsync:

  • यह आपको B को ड्राइव करने के लिए A या B को ड्राइव करने के लिए अपनी ड्राइव A के सभी या कुछ हिस्सों को कॉपी करने की अनुमति देता है, जैसे कॉपी से कुछ निर्देशिकाओं को छोड़कर (उदाहरण के लिए / खरीद को छोड़कर)।

  • एक और बड़ा फायदा यह है कि यह देशी उपकरण फाइल ट्रांसफर की निगरानी करता है: जैसे कि बड़े ट्रांसफर के लिए, यदि कनेक्शन बाधित होता है, तो यह ब्रेकपॉइंट से जारी रहेगा।

  • और आखिरी लेकिन कम से कम नहीं, rsync ssh कनेक्शन का उपयोग करता है, इसलिए यह आपको दूरस्थ सिंक्रनाइज़ सुरक्षित "प्रतियां" प्राप्त करने की अनुमति देता है। करने के लिए एक नज़र आदमी पेज के साथ-साथ कुछ उदाहरण के लिए यहाँ


4

जैसे माइकल सफ़यान ऊपर सुझाव देते हैं, मैंने rsyncइस उद्देश्य के लिए उपयोग किया है । मैं निर्देशिकाओं को बाहर करने के लिए कुछ अतिरिक्त विकल्पों का उपयोग करने का सुझाव देता हूं जिन्हें आप शायद कॉपी नहीं करना चाहते हैं।

यह संस्करण ग्नोम- और डेबियन / उबंटू-आधारित प्रणालियों के लिए काफी विशिष्ट है, क्योंकि इसमें उपयोगकर्ताओं के घर निर्देशिकाओं के उपनिर्देशिका शामिल हैं जो गनोम के साथ-साथ एपीटी पैकेज कैश के लिए विशिष्ट हैं।

अंतिम पंक्ति कैश / कैश / कैश नाम की किसी भी निर्देशिका को बाहर कर देगी, जो कुछ उपयोगों के लिए बहुत आक्रामक हो सकती है:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache

2

थ्रेड री rsync में दो उपयोगी बिट्स जोड़ना: साइफ़र बदलना, और उपयोग करना --update:

वोल्फमैन के पद के अनुसार, cp -axसुरुचिपूर्ण है, और स्थानीय सामान के लिए अच्छा है।

हालाँकि, rsyncयह भी कमाल है। माइकल के जवाब के आगे -W, साइबर बदलने से चीजों को गति भी मिल सकती है (हालांकि किसी भी सुरक्षा निहितार्थ पर पढ़ें)।

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

नहीं है कुछ चर्चा (और मानक) एक धीमी गति से सीपीयू वास्तविक अड़चन होने के बारे में जगह के आसपास है, लेकिन यह मेरी मदद करने के लिए जब मशीन अन्य समवर्ती काम करने तक भरी हुई है प्रतीत होता है।

एक बड़ी, पुनरावर्ती प्रतिलिपि में rsync का उपयोग करने के अन्य बड़े कारणों में से एक इस प्रकार है क्योंकि -u स्विच (या --update )। यदि प्रतिलिपि के दौरान कोई समस्या है, तो आप इसे ठीक कर सकते हैं, और rsync उठाएगा जहां इसे छोड़ा था (मुझे नहीं लगता कि scp के पास यह है)। स्थानीय रूप से इसे करने से cp में एक -u स्विच भी होता है।

(मैं निश्चित नहीं हूं कि --update और --whole-file के निहितार्थ क्या हैं, लेकिन वे हमेशा इस प्रकार के कार्य में मेरे लिए समझदारी से काम लेते हैं)

मुझे लगता है कि यह rsync की सुविधाओं के बारे में एक धागा नहीं है, लेकिन इसके लिए सबसे आम कुछ मैं उपयोग कर रहा हूं:

  • -डेली-आफ्टर आदि (जैसा कि माइकल ने फॉलो-अप में उल्लेख किया है), यदि आप नई प्रणाली को मूल स्थान पर वापस सिंक करना चाहते हैं या उसके बाद कुछ करना चाहते हैं। तथा,
  • --exclude - स्किपिंग निर्देशिकाओं / फ़ाइलों के लिए, उदाहरण के लिए उपयोगकर्ता होम निर्देशिकाओं आदि को छोड़ते हुए एक नई जगह पर एक नई प्रणाली की प्रतिलिपि बनाने / बनाने के लिए (या तो आप कहीं और से घर बढ़ा रहे हैं, या नए उपयोगकर्ता आदि बना रहे हैं)।

संयोग से, अगर मुझे कभी विंडोज का उपयोग करना है, तो मैं बड़ी पुनरावर्ती प्रतियों को करने के लिए साइबरविन से rsync का उपयोग करता हूं, क्योंकि एक्सप्लोरर की थोड़ी सी मस्तिष्क मृत शुरुआत से शुरू करना चाहती है (हालांकि मुझे लगता है कि फाइंडर ओएस एक्स भी बदतर है)


2

rsync

"यह दृष्टिकोण dd के साथ डिस्क क्लोनिंग से बेहतर माना जाता है क्योंकि यह एक अलग आकार, विभाजन तालिका और फाइल सिस्टम का उपयोग करने की अनुमति देता है, और cp -a के साथ कॉपी करने से बेहतर है, क्योंकि यह फ़ाइल अनुमतियों, विशेषताओं पर अधिक नियंत्रण की अनुमति देता है , एक्सेस कंट्रोल लिस्ट (ACL) और विस्तारित विशेषताएँ। "

से:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

मैन पेज हियर


2

जैसा कि जूनियररुबिस्ट द्वारा टिप्पणियों में उल्लेख किया गया है, यहां पसंदीदा दृष्टिकोण का उपयोग करना चाहिए dd। मुख्य कारण प्रदर्शन है, यह फ़ाइल-दर-फ़ाइल के बजाय एक ब्लॉक-बाय-ब्लॉक कॉपी है।

एक विभाजन क्लोनिंग

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

एक पूरी डिस्क क्लोनिंग

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

संदर्भ

  1. https://wiki.archlinux.org/index.php/disk_cloning

dd2 कारणों से एक बहुत बुरा विचार है: सबसे पहले एक फाइल सिस्टम की ब्लॉक-स्तरीय प्रतिलिपि का प्रदर्शन करना जो माउंट किया गया है (जो कि मामला है /) लक्ष्य फाइल सिस्टम त्रुटियों में संभावित परिणाम से अधिक होगा, और दूसरी बात ddयह है कि भीतर घुड़सवार स्रोतों से डेटा कॉपी नहीं किया जाएगा जैसे फाइलसिस्टम /bootऔर /home। आपका लिंक डिस्क क्लोनिंग के लिए मान्य है, न कि "फाइल पदानुक्रम" क्लोनिंग
एरिक

1

'dd' कमाल का है, लेकिन ddrescue (उपयुक्त इंस्टॉल gddrescue) और भी बेहतर है। यदि dd बाधित हो जाता है, तो पुनरारंभ करने का कोई तरीका नहीं है (rsync का उपयोग करने का एक और अच्छा कारण)। जब आप लॉगफ़ाइल के साथ ddresoscope का उपयोग करते हैं, तो यह ट्रैक रखता है कि किन ब्लॉकों को कॉपी किया गया है।

डुअल बूट विंडोज / लिनक्स सिस्टम का बैकअप लेते समय, मैं विंडोज विभाजन के लिए ntfsclone और लिनक्स विभाजन के लिए ddrescue और MBR के लिए dd का उपयोग करता हूं। (मैंने GPT / UEFI का उपयोग करके एक दोहरी बूट सिस्टम का बैकअप लेने की कोशिश नहीं की है।)

मुझे जो देखना पसंद है वह एक ddrescue टूल है जो ntfsclone जैसी फ़ाइलों को बना सकता है जहां नियंत्रण पात्रों के रूप में अनलॉक्ड स्पेस चिह्नित है। यह छवि को सीधे माउंट नहीं करता है, लेकिन यह केवल निहित डेटा के रूप में बड़ा होने की अनुमति देता है।

किसी ने dtrescue के लिए ntfsclone "विशेष छवि प्रारूप" के साथ आने की कृपा करें ...


0

rsync जैसा कि ऊपर बताया गया सही समाधान है।

मैं सिर्फ -S" स्पार्स फ़ाइलों को कुशलतापूर्वक संभालना " जोड़ूंगा, यदि कोई डॉक्यूमेंट डेविमेम्पर वॉल्यूम या कॉपी किए जाने के समान है।


0

मैंने यहाँ प्रस्तावित rsync आदेशों की कोशिश की, लेकिन अंततः मुझे बहुत क्लीनर और तेज़ परिणाम मिले partclone। स्रोत को अनमाउंट करें और विभाजन को लक्षित करें और फिर निम्नलिखित को चलाएँ:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

यह निम्न चरणों का पालन करता है:

  1. विभाजन का क्लोन (केवल उपयोग किए गए भाग)
  2. सुनिश्चित करें कि फ़ाइल सिस्टम ठीक है (resize2fs इस चरण को लागू करता है)
  3. नई फ़ाइल सिस्टम में विभाजन का आकार बदलें

उपरोक्त कार्य उसी स्थिति में होता है जब लक्ष्य विभाजन समान आकार या स्रोत से बड़ा होता है। यदि आपका लक्ष्य स्रोत से छोटा है (लेकिन सभी डेटा को फिट करता है) तो निम्न कार्य करें:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M डेटा क्लोनिंग से पहले फाइलसिस्टम को न्यूनतम आकार तक सिकोड़ लेता है।

ध्यान दें कि partcloneअधिकांश सिस्टम पर डिफ़ॉल्ट रूप से इंस्टॉल नहीं किया गया है। Clonezilla की तरह एक लाइव डिस्ट्रो का उपयोग करें या अपने डिस्ट्रोस पैकेट मैनेजर ( apt-get install partcloneडेबियन-आधारित सिम्स पर) से पार्टक्लोन स्थापित करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.