एक विरल फ़ाइल के लिए पूरे विभाजन या हार्ड ड्राइव को क्लोन करें


35

मैं एक पूरी विभाजन या एक पूरी हार्ड ड्राइव को एक बड़ी बाहरी डिस्क पर क्लोन करना पसंद करता हूं, लेकिन एक विरल फ़ाइल बनाना पसंद करता हूं। मैं अक्सर ddक्लोनिंग के लिए उपयोग करता हूं , लेकिन यह विरल फाइलों का समर्थन नहीं करता है। वर्कअराउंड के रूप में मैंने कुछ इस तरह इस्तेमाल किया:

cp --sparse=always <(dd if=/dev/sda1 bs=8M) /mount/external/backup/sda1.raw

हालाँकि यह मेरे स्वाद के लिए बहुत मुश्किल है और अगर गर्भपात हुआ तो मैं इस प्रक्रिया को फिर से शुरू नहीं कर सकता। यह हास्यास्पद है कि इसके लिए एक NTFS उपकरण है ( ntfsclone) लेकिन लिनक्स के मूल फ़ाइल सिस्टम (EXT2-4) के लिए ऐसा कोई उपकरण मौजूद नहीं है।

क्या इसके लिए कुछ बेहतर उपकरण हैं, जैसे ddविरल समर्थन वाला एक प्रकार? मैं डिस्क बैकअप के लिए कुछ मालिकाना सॉफ्टवेयर की तलाश नहीं करता हूं, लेकिन बस एक विरल क्लोन कॉपी बनाना चाहता हूं जिसे आवश्यकता पड़ने पर मैं लूप डिवाइस के रूप में माउंट कर सकता हूं।


7
+1 के रचनात्मक उपयोग के लिए cp, यह मेरे लिए कभी नहीं हुआ कि आप डिस्क छवि को स्पार्स-कॉपी कर सकें। अगर मैंने अंतरिक्ष को बचाने की जरूरत महसूस की तो मैंने हमेशा उन्हें संकुचित कर दिया। अब ऐसा क्यों है एक सवाल में जवाब नहीं है?
कालेब

जवाबों:


21

आप चाहते हैं dd_rescue

dd_rescue -a -b 8M /dev/sda1 /mount/external/backup/sda1.raw

1
महान! मैनुअल कहता है "यदि उपयोगकर्ता द्वारा प्रतिलिपि प्रक्रिया को बाधित किया जाता है तो बाद में किसी भी स्थिति में जारी रखना संभव है।" और "-a spArse फ़ाइल लेखन (डिफ़ॉल्ट = नहीं)"। बिल्कुल मैं क्या चाहता हूँ! धन्यवाद!
मार्टिन शेहरर

3
dd_rescueऑनलाइन खोज करने पर मुझे पता चला कि एक अलग टूल भी है जिसे ddrescue(अंडरस्कोर के बिना) कहा जाता है जिसे स्वतंत्र रूप से विकसित किया गया था dd_rescueलेकिन मूल रूप से ऐसा ही लगता है। मैं यहां केवल एक सामान्य FYI के रूप में उल्लेख करता हूं।
मार्टिन स्क्रहरर

हाँ, dd_rescueऔर ddrescueयही बात नहीं है। सैद्धांतिक रूप से वे एक ही काम करते हैं, लेकिन आम तौर पर मैंने पुराने / मूल के साथ बेहतर किस्मत पाई है dd_rescue
स्टीवन प्रिचर्ड

1
यदि कोई सोच रहा है, तो आप किसी भी समय Ctrl-C के साथ कॉपी को रोक सकते हैं। यह आपको आपकी वर्तमान स्थिति दिखाएगा, और आप -sमूल मान को जोड़कर पुनः आरंभ करने के लिए उस मूल्य का उपयोग कर सकते हैं । (तो ऐसा लगेगा dd_rescue -a -b 8M -s 42000k /dev/sda1 /mount/external/backup/sda1.raw।)
स्टीवन प्रिटचर्ड

1
@ स्तुति प्रिटचर्ड: स्थिति को याद रखने की आवश्यकता नहीं है। एक तीसरा फ़ाइल नाम निर्दिष्ट करें, जो लॉगफ़ाइल होगा, और पुनः आरंभ करने पर यह पढ़ेगा कि इसे छोड़ दें और जहां इसे छोड़ा गया है।
तन्निथ रोसेनबौम

20

बस पूर्णता के लिए ddrescue के लिए कॉल करें । --sparseया -Sध्वज की अनुमति देता है गंतव्य कम लिखा जा रहे हैं:

$ ddrescue -S -b8M /dev/sda1 /mount/external/backup/sda1.raw

या लंबे विकल्प के साथ:

$ ddrescue --sparse --block-size 8M /dev/sda1 /mount/external/backup/sda1.raw

या यदि आप MiBs पसंद करते हैं :

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw

बचाव को बाधित करने और फिर से शुरू करने के लिए, आप लॉगफ़ाइल का उपयोग भी कर सकते हैं:

$ ddrescue -S -b8Mi /dev/sda1 /mount/external/backup/sda1.raw ~/sda1.rescue.log

ध्यान दें कि GNU ddrescueऔर dd_rescueविभिन्न कार्यक्रम हैं। लेकिन GNU ddrescueअधिक व्यापक प्रतीत होता है। उदाहरण के लिए यह पहले से ही जीआरएमएल के साथ पैक किया गया है ।


क्या पुनर्स्थापना करते समय छवि का कोई विशेष उपचार करने की आवश्यकता है, क्या आप एक ddresoscope को पुनर्स्थापित करने के लिए उपयोग की गई कमांड प्रदान कर सकते हैं?
user12439

सिद्धांत रूप में भंडारण माध्यम आप बचाव के लिए उपयोग कर रहे हैं तो आप आम तौर पर सिर्फ dd लिखने के लिए प्रतिस्थापन डिस्क के लिए उपयोग कर सकते हैं, और अधिक विश्वसनीय माना जाता है: dd if=sda1.raw of=/dev/sdb1। हालाँकि, पुनर्स्थापना के लिए ddresoscope का उपयोग करने के लिए, आप बस नए स्रोत / गंतव्य के बचाव के लिए आपके द्वारा उपयोग किए जाने वाले स्रोत / गंतव्य को बदलते हैं, अधिमानतः एक नई लॉग फ़ाइल के साथ। यदि संभव हो तो (अक्सर नहीं), तो आप निश्चित रूप से उपयोग ddrescue के डेटा की प्रतिलिपि कर सकते हैं सीधे एक प्रतिस्थापन डिस्क पर बुरा स्रोत डिस्क से।
zaTricky

3

GNU dd में विरल फ़ाइल समर्थन प्रदान करने के लिए 2007 में एक पैच की पेशकश की गई थी, लेकिन ऐसा लगता है कि इसे कोर्यूटिल्स में नहीं बनाया गया है (कम से कम 8.4 के रूप में नहीं)। मुझे संदेह है कि dd तब से बहुत अधिक बदल गया है, पैच बहुत अधिक काम के बिना वर्तमान संस्करण के खिलाफ लागू हो सकता है।

मैं वास्तव cpमें आपके प्रश्न के रचनात्मक उपयोग से प्रभावित हूं , और इसे फिर से शुरू करने के लिए इसका उपयोग करने के ट्रैक पर मुझे मिला (यहां स्रोत में ~ 80M से फिर से शुरू)

cp --sparse=always \
  <(dd if=/dev/sda1 bs=8M skip=10) /dev/stdout \
  | dd bs=8M seek=10 of=/mount/external/backup/sda1.raw

संपादित करें: खरोंच। दूसरा ddनिश्चित रूप से आउटपुट फ़ाइल में गलत स्थिति की तलाश कर रहा है, क्योंकि यह इनपुट के समान लंबाई नहीं है।


1
जैसा कि भैंसले के जवाब के साथ होता है, सटीक पुनर्मिलन के लिए dd की प्रगति को लॉग करना सबसे अच्छा होगा। यदि आप पहले रन और रिज्यूमे दोनों के लिए इस दृष्टिकोण का उपयोग करते हैं, और दोनों समानांतर dd के स्वतंत्र रूप से लॉग इन करते हैं, तो आप जान सकते हैं कि आउटपुट की तलाश में कितनी दूर है। अगर मेरे पास समय हो तो मैं यह काम करने की कोशिश करूंगा।
एली हेडी जूल

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

हाँ, मुझे पता चला है कि खुद को। ओह अच्छी तरह से, यह पागल नए उपयोग पा रहा था cp- धन्यवाद!
एली हेडी

1
2012 में dd कमिट: git.savannah.gnu.org/cgit/coreutils.git/commit/… "dd: conv = sparse ऑप्शन के लिए सपोर्ट जोड़ें" ("(iwrite): एनयूएल ब्लॉक के एक लेखन को एक तलाश में बदलें। अगर अनुरोध किया गया है। ")
ऑक्सक्स

1

बस मेरे 2 सेंट जोड़ने। कच्ची डिस्क से विरल फ़ाइल बनाने का एक और तरीका कुछ इस तरह से उपयोग करना qemu-img के साथ है :

qemu-img convert -f raw /dev/sda /tmp/sda.raw

आप इसे एकल विभाजन पर भी उपयोग कर सकते हैं। इसके अलावा, आपके पास कच्ची डिस्क / विभाजन को किसी अन्य प्रारूप में बदलने का विकल्प है जो qemu-img का समर्थन करता है (QCOW2, VHD [x], vmdk, आदि)


1

एक अन्य विकल्प rsync है । उदाहरण के लिए:

rsync -SP --copy-devices /dev/sda1 /mount/external/backup/sda1.raw

स्पष्टीकरण:

  • -S/ --sparseलिखने पर विरल ब्लॉकों को छोड़ना
  • -P/ --partial --progressप्रगति दिखाने और आंशिक रूप से स्थानांतरित फ़ाइलों को रखने के लिए
  • --copy-devices डिवाइस सामग्री कॉपी करने के लिए

आप --appendएक बाधित कॉपी को फिर से शुरू करने के लिए जोड़ सकते हैं (या --append-verifyनए और पुराने दोनों डेटा मिलानों पर चेकसम की पुष्टि करने के लिए)।

संपादित करें : मुझे बस कॉपी-डिवाइसेज का एहसास हुआ। शिफ्ट विचाराधीन है और कई प्रणालियों पर मौजूद नहीं हो सकती है (हालांकि यह फेडोरा , उबंटू , डेबियन और अन्य लोगों द्वारा शामिल है )


0

नोट: यह टिप्पणियों में वर्णित कारणों के लिए काम नहीं करता है, मैं इसे संदर्भ के लिए यहां छोड़ रहा हूं।

किल -USR1 का उपयोग करके dd के आँकड़ों की निगरानी करें:

$ cp --sparse=always <(dd if=/dev/urandom bs=8M) \
    /mount/external/backup/sda1.raw&
$ watch kill -USR1 `pidof -s /bin/dd`

स्किप / तलाश का उपयोग करके फिर से शुरू करें:

$ i_bytes= # get from the last dd statistic
$ o_bytes=`du -b /mount/external/backup/sda1.raw | cut -f 1`   
$ cp --sparse=always <(dd if=/dev/urandom bs=8M skip=$i_bytes \
    seek=$o_bytes) /mount/external/backup/sda1.raw&
$ watch kill -USR1 `pidof -s /bin/dd`

$ I_bytes के बिना इसे फिर से शुरू करना अधिक कठिन होगा। मशीन के दुर्घटनाग्रस्त होने या जो भी हो, फ़ाइल में dd आँकड़ों को लॉग करना शायद सबसे आसान है।


दूसरा cpसिर्फ मौजूदा फ़ाइल को अधिलेखित करेगा, है ना? मैं skipऔर अन्य विकल्पों को जानता हूं dd। मसला cpहिस्सा है।
मार्टिन स्क्रहरर

हम्म, हाँ, तुम सही हो।
भैंसले


0

बस क्यों नहीं:

cp --sparse=always /dev/sda1 /mount/external/backup/sda1.raw
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.