पूर्ण डीडी प्रति hdd से hdd तक


34

मूल प्रश्न:

यदि मेरे पास निम्न विशेषताओं के साथ 2 समान हार्ड ड्राइव हैं :

  • एसएटीए 6.0 जीबी / एस
  • 5400 आरपीएम
  • 3 टीबी

एक पूर्ण डीडी कॉपी को पूरा होने में कितना समय लगेगा?

अब तक यह 5 घंटे से चल रहा है और अभी भी चल रहा है ...

मैं लिनक्स उबंटू 12.04 64 बिट का उपयोग कर रहा हूं और मैं जिस कमांड का उपयोग कर रहा हूं वह है:

dd if=/dev/sdb of=/dev/sdc

अद्यतन: 1

अब मैं प्रगति देख सकता हूं, और कॉपी 430 जीबी के लिए 6+ घंटे हो गए हैं। HDD 3TB है ...

क्या ऐसा करने का कोई तेज़ तरीका नहीं है?


अद्यतन: 2

यह पहले की तुलना में बहुत बेहतर लगता है (सुझावों के लिए ग्रॉक्सएक्सडा के लिए धन्यवाद):

sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128K

ETA 3TB के लिए लगभग 9 घंटे का है, जबकि इससे पहले 6 घंटे के बाद 430GB तक पहुंच गया था, इसलिए मैं अनुमान लगा रहा हूं कि पिछली कमांड का उपयोग करते हुए लगभग 36 घंटे लग गए होंगे।


प्रक्रिया के आँकड़ों को हथियाने की कोशिश करें: USR1 सिग्नल को एक 'dd' प्रक्रिया में भेजने से यह मानक त्रुटि के लिए I / O आँकड़े प्रिंट करता है और फिर प्रतिलिपि बनाना फिर से शुरू करता है। $ dd अगर = / dev / zero of = / dev / null & pid = $! $ किल -USR1 $ pid वास्तविक सिग्नल के लिए अपने मैन पेज की जाँच करें क्योंकि यह विभिन्न dd कार्यान्वयनों के लिए अलग-अलग है।
ग्रोक्सेडा

@Groxxda, मुझे नहीं पता कि कैसे करना है।
१२:२० पर जोशीरोवेन

1
GNU dd उपयोग करता है SIGUSR1, और BSD dd उपयोग करता हैSIGINFO
groxxda

इसके अलावा "समान केबल से जुड़े" से आपका क्या तात्पर्य है? क्या आप पोर्ट गुणक के कुछ प्रकार का उपयोग कर रहे हैं? (यदि आप 150MB / s के हस्तांतरण की दर प्राप्त करते हैं, तो यह आपको 5-6 घंटे तक ले जाना चाहिए, लेकिन मुझे लगता है कि इसका आधा अधिक यथार्थवादी है।)
groxxda

1
आप एक भिन्न (बड़ा) को निर्दिष्ट ( bs=तर्क ) को निर्दिष्ट करके प्रक्रिया को गति देने में सक्षम हो सकते हैं dd। प्रत्येक HDD को अपने स्वयं के पोर्ट से जोड़ने पर भी विचार करें।
ग्रोक्सेडा

जवाबों:


58

ddपुराने दिनों में उपयोगी था जब लोग टेप का उपयोग करते थे (जब ब्लॉक आकार मायने रखता था) और जब सरल उपकरण जैसे कि catबाइनरी-सुरक्षित नहीं हो सकते हैं।

आजकल, लिखने dd if=/dev/sdb of=/dev/sdcका एक जटिल, त्रुटि-प्रवण, धीमा तरीका है cat /dev/sdb >/dev/sdc। हालांकि dd, कुछ अपेक्षाकृत दुर्लभ कार्यों के लिए अभी भी उपयोगी है , यह उन ट्यूटोरियल की संख्या की तुलना में बहुत कम उपयोगी है जो यह उल्लेख करते हैं कि आप विश्वास करेंगे। कोई जादू नहीं है dd, जादू सब में है /dev/sdb

आपका नया आदेश sudo dd if=/dev/sdb bs=128K | pv -s 3000G | sudo dd of=/dev/sdc bs=128Kफिर से अनावश्यक रूप से धीमा और जटिल है। डेटा को एक समय में 128kB पढ़ा जाता है (जो dd512B के डिफ़ॉल्ट से बेहतर है , लेकिन उतना बड़ा नहीं जितना अच्छा)। यह तब लिखे जाने से पहले दो पाइपों के माध्यम से जाता है।

सरल और तेज catकमांड का उपयोग करें । (कुछ बेंचमार्क में मैंने कुछ साल पहले लिनक्स के तहत बनाया catथा , cpअलग-अलग डिस्क के बीच एक कॉपी के cpमुकाबले तेज था , और ddकिसी भी ब्लॉक साइज से तेज था ; ddएक ही डिस्क पर कॉपी करते समय एक बड़ा ब्लॉक साइज थोड़ा तेज था।)

cat /dev/sdb >/dev/sdc

यदि आप इस कमांड को चलाना चाहते हैं sudo, तो आपको रीडायरेक्शन को रूट के रूप में करना होगा:

sudo sh -c 'cat /dev/sdb >/dev/sdc'

यदि आप एक प्रगति रिपोर्ट चाहते हैं, चूंकि आप लिनक्स का उपयोग कर रहे हैं, तो आप आसानी से catप्रक्रिया की पीआईडी (१२३४ कहते हैं) और इसके इनपुट (या आउटपुट) फ़ाइल विवरणक की स्थिति को देखकर आसानी से प्राप्त कर सकते हैं ।

# cat /proc/1234/fdinfo/0
pos:    64155648 
flags:  0100000

यदि आप एक प्रगति रिपोर्ट चाहते हैं और आपका यूनिक्स संस्करण फ़ाइल डिस्क्रिप्टर पदों पर प्राप्त करने का आसान तरीका प्रदान नहीं करता है, तो आप pvइसके बजाय स्थापित और उपयोग कर सकते हैं cat


बड़े ब्लॉकों के साथ क्या अजीब बात है कि टोंटी डिस्क है, तो इससे catतेज क्या होता है dd? क्या यह हो सकता है कि catकैश का उपयोग करें?
इमैनुएल

1
@ गिल्स, उत्तर के लिए धन्यवाद। मेरे पास क्लोन करने के लिए एक और 3TB ड्राइव है और अगले बिल्ली विकल्प की कोशिश करेंगे। जहाँ तक मैं बता सकता हूँ, उस नए dd कमांड को पूरा होने में 3 घंटे लगने वाले हैं, कुल मिलाकर लगभग 11 घंटे। यदि दूसरे 3TB HDD के लिए बिल्ली का दृष्टिकोण 11 घंटे से अधिक तेज है, तो मैं शेष ड्राइव के लिए उस विधि का उपयोग करूंगा।
जोशीरोवेन

2
@ गिल्स, इसलिए प्रगति रिपोर्ट प्राप्त करने के लिए, क्या मैं sudo sh -c 'pv /dev/sdb >/dev/sdc'इसके बजाय उपयोग करता हूं sudo sh -c 'cat /dev/sdb >/dev/sdc'?
जोशीरोवेन

1
@oshirowanen हाँ, pvजहाँ आप उपयोग करेंगे उसका उपयोग करें cat
गिल्स एसओ- बुराई को रोकना '

1
@unhammer नहीं! आप प्रत्येक डिवाइस को एक-एक करके कॉपी करेंगे, जैसे cat /dev/sdc1 >/dev/sdb1 && cat /dev/sdd1 >/dev/sde1। दोनों भागों को समेटने का कोई मतलब नहीं है। यदि आप btrfs वॉल्यूम की संरचना को बदलना चाहते हैं, तो इसे दो उप-वलों से एक में बदलने के लिए, आपको संरचना को बदलने के लिए btrfs टूल का उपयोग करने की आवश्यकता है, या जैसा कि आपने वांछित संरचना के साथ एक नया फ़ाइल सिस्टम बनाने और फ़ाइलों को कॉपी करने के लिए किया था ।
गिल्स एसओ- बुराई को रोकें '

7

ddडिफ़ॉल्ट रूप से (512 बाइट्स) द्वारा एक बहुत छोटे अवरोधक का उपयोग करता है। जिसके परिणामस्वरूप बहुत सारे ओवरहेड ( प्रत्येक 512 बाइट्स के लिए एक read()और write()syscall) हो जाते हैं।

जब आप बड़े अवरोधक का उपयोग करते हैं तो यह बहुत तेज़ हो जाता है। इष्टतम गति पर bs=64kया तो शुरू होता है। अधिकांश लोग अभी भी बड़े का उपयोग करते हैं, bs=1Mइसलिए यह मानव पठनीय हो जाता है (जब ddकहता है कि यह कॉपी किया गया है 1234 blocks, तो आप जानते हैं कि यह 1234 MiBकोई गणित किए बिना है)। बड़े ब्लॉकों का उपयोग करने से गति में सुधार होने की संभावना नहीं है, बस अधिक मेमोरी खपत।

तो कमांड होनी चाहिए:

dd bs=1M if=/dev/sdb of=/dev/sdc

यदि आपके पास पहले से ही धीमी गति से ddचल रहा है, तो आप इसे बाधित कर सकते हैं और तेज ddउदाहरण के साथ फिर से शुरू कर सकते हैं । इसके लिए यह जानना जरूरी है कि कॉपी पहले से कितनी आगे बढ़ी है। ddजब आप इसे रद्द करते हैं तो आमतौर पर प्रगति को प्रिंट करता है, या आप इसे USR1सिग्नल भेज सकते हैं, जबकि यह अपनी प्रगति को प्रिंट करने के लिए चल रहा है।

kill -USR1 $(pidof dd)

उदाहरण के लिए यदि यह इससे अधिक कॉपी करता है 1234MiB, तो आप स्थिति 1234MiBका उपयोग करके फिर से शुरू कर सकते हैं :

dd bs=1M seek=1234 skip=1234 if=/dev/sdb of=/dev/sdc

यदि इससे कम कॉपी की गई 1234MiB, तो आपकी कॉपी अधूरी होगी। यदि इससे अधिक की प्रतिलिपि बनाई गई है 1234MiB, तो यह कुछ पहले से ही कॉपी किए गए भागों को फिर से कॉपी करेगा, जो सामान्य रूप से कोई नुकसान नहीं करता है। इसलिए यदि संदेह है तो आपको उस मूल्य से थोड़ा छोटा चुनना चाहिए जो आपको लगता है कि पहले से ही कॉपी किया गया था।


5

चल रही dd प्रक्रिया के बारे में आंकड़े प्राप्त करना

आप मानक त्रुटि के killलिए ddआउटपुट आंकड़े बनाने के लिए उपयुक्त सिग्नल के साथ कमांड का उपयोग कर सकते हैं ।
GNU dd मैन पेज से:

Sending a USR1 signal to a running 'dd' process makes it print I/O statistics to standard error and then resume copying.
      $ dd if=/dev/zero of=/dev/null& pid=$!
      $ kill -USR1 $pid
      18335302+0 records in 18335302+0 records out 9387674624 bytes (9.4 GB)  copied,  34.6279 seconds, 271 MB/s

सुनिश्चित करें कि आप सही सिग्नल के लिए पहले अपने मैन पेज की जांच करें क्योंकि यह अलग-अलग dd कार्यान्वयन पर भिन्न हो सकता है: (BSD dd SIGINFO का उपयोग करता है)।

प्रक्रिया में तेजी लाना

  1. प्रत्येक HDD को अपने SATA पोर्ट से कनेक्ट करें ताकि डेटा को एक डिवाइस से पढ़ा जा सके और दूसरे को उसी समय लिखा जा सके।
  2. bs=तर्क का उपयोग करके एक उपयुक्त अवरोधक का उपयोग करें । सुपरसुसर पर इस धागे को देखें और अपने लिए कुछ मान आज़माएँ।
  3. ddपढ़ने और लिखने के लिए अलग-अलग आह्वान का उपयोग करें और उन्हें जोड़ने के लिए एक पाइप का उपयोग करें ( dd if=/dev/sda bs=1M | dd of=/dev/sdb bs=1M)।
    यदि आप ऐसा करते हैं और एक blockize निर्दिष्ट करते हैं, तो सुनिश्चित करें कि आप प्रत्येक इनवोकेशन पर एक ही blockize का उपयोग करते हैं।
  4. आप directतर्क जैसे अन्य अनुकूलन का प्रयास कर सकते हैं ।
  5. सुनिश्चित करें कि आपकी हार्ड डिस्क माउंट नहीं हैं या इसका परिणाम दूषित प्रतिलिपि हो सकता है।

0

क्या आपने 'gparted' की कोशिश की है? आप शाब्दिक रूप से विभाजन को एक ड्राइव से दूसरे में कॉपी-पेस्ट कर सकते हैं और आवश्यकतानुसार उसका आकार बदल सकते हैं। आपको अंतरण दर और शेष समय मिलता है। यह linux विभाजन के लिए नीचे 'e2image' का उपयोग करता है।


0

HDClone नामक व्यावसायिक सॉफ़्टवेयर है । यह फ्रीवेयर और वाणिज्यिक दोनों के रूप में लाइसेंस प्राप्त है। या तो संस्करण बूट करने योग्य पेनड्राइव या डीवीडी बना सकता है, साथ ही डिस्क की प्रतिलिपि भी बना सकता है। स्रोत और गंतव्य HD को कनेक्ट करें और GUI- आधारित निर्देशों का पालन करें।

निशुल्क लगभग 80 एमबी / सेकंड की दर से स्थानांतरित हो जाएगा, जबकि भुगतान किए गए संस्करण बहुत तेजी से जा सकते हैं। NTFS और FAT फाइल सिस्टम के लिए, भुगतान किए गए संस्करणों को केवल HD के कब्जे वाले बिट्स को क्लोन करने के लिए कॉन्फ़िगर किया जा सकता है, जो प्रत्येक क्लोन की गति को नाटकीय रूप से बढ़ाता है।


(1) क्या आप इस उत्पाद से संबद्ध हैं? (२) हम इसे कहाँ प्राप्त कर सकते हैं?
स्कॉट

1
या आप बस "बिल्ली / देव / sdx> / देव / sdy" का उपयोग कर सकते हैं ...
HörmannHH
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.