मैं पूर्ण डिस्क dd को कैसे गति दूंगा?


62

मैं ddइस कमांड के साथ दो समान ड्राइव पर कर रहा हूं :

 dd if=/dev/sda of=/dev/sdb bs=4096

दोनों हार्ड ड्राइव बिल्कुल एक ही मॉडल नंबर हैं, और दोनों में 1TB का स्टोरेज स्पेस है। /dev/sda 4096 के एक blockize का उपयोग करता /dev/sdaहै। एक स्थानीय ड्राइव है और /dev/sdbएक रिमोट कैडी है। मैं निम्नलिखित प्रोटोकॉल का उपयोग करने में सक्षम हो सकता हूं:

  • USB2.0 हाईस्पीड (वर्तमान में योजना)
  • गीगाबिट ओवर-द-नेटवर्क क्लोन (वास्तव में यह भी कोशिश नहीं करना चाहता)
  • USB3.0 (यदि मुझे मेरा अन्य ड्राइव कैडी लगता है)
  • eSATA (यदि मुझे केबल मिल जाए / खरीद लें)
  • SATA (यदि मुझे केबल मिल जाए / मिल जाए, तो लैपटॉप की सीडी ड्राइव से प्यार होगा)

क्या इस ड्राइव कॉपी को चलाने का एक तरीका है जो कम से कम 96 घंटे लेता है? मैं इसके अलावा अन्य टूल का उपयोग करने के लिए खुला हूं dd

मुझे निम्नलिखित विभाजन (UUIDs सहित) को क्लोन करने की आवश्यकता है

  • Fat32 EFI विभाजन (*)
  • NTFS Windows विभाजन (*)
  • HFS + OSX विभाजन
  • EXT4 उबंटू विभाजन (*)
  • स्वैप विभाजन (*)

* Clonezilla द्वारा समर्थित


मैंने Clonezilla की कोशिश की है (और यह बहुत तेज़ था), लेकिन यह HFS + स्मार्ट कॉपीिंग का समर्थन नहीं करता है, जिसकी मुझे आवश्यकता है। शायद नवीनतम संस्करण इसका समर्थन करता है?

जब मैंने अपना पहला क्लोन बनाया, तो मैंने HFS + को छोड़कर सभी विभाजन किए और यह बहुत जल्दी हो गया। (कुल 3 घंटे से अधिक नहीं)


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

क्या SATA केबल खरीदना और मदरबोर्ड पर SATA पोर्ट में बाहरी ड्राइव को अस्थायी रूप से संलग्न करना संभव है?
मार्क प्लॉटनिक

शायद कोई व्यक्ति निम्नलिखित पर विस्तार से बता सकता है: विभाजन तालिका (या तो क्लोनज़िला या डीडी का उपयोग करके) के बारे में, एचएफएस + को छोड़कर सभी विभाजनों को क्लोन करने के लिए क्लोनज़िला का उपयोग करके, और उस एक विभाजन के लिए dd का उपयोग कैसे करें? क्या यह संभव होगा?
अलेक्जेंडर

@Alexander कि मैं अपना पहला क्लोन कैसे बनाया है।
कज़ वोल्फ

1
@LuisAlvarado मैं सिर्फ क्लोन शुरू किया, यार!
कज़ वोल्फ

जवाबों:


68

मेरे अनुभव में, मुझे नहीं लगता कि कमांड लाइन में कुछ तेज है ddbsपैरामीटर को समायोजित करने से गति बढ़ सकती है, उदाहरण के लिए, मेरे पास 2 एचडीडी है जो मुझे पता है कि 100 एमबी / एस से अधिक पढ़ने / लिखने की गति है इसलिए मैं ऐसा करता हूं:

dd if=/dev/sda of=/dev/sdb bs=100M

वहाँ भी है pv(पहले स्थापित करने की आवश्यकता है) जो दोनों ड्राइव पर सबसे तेज गति की जांच करता है और फिर क्लोनिंग पर आगे बढ़ता है। इसे रूट से पूरा करना होगा:

pv < /dev/sda > /dev/sdb

पीवी के साथ मुझे 156 एमबी / एस मिला

pvगति के अलावा के बारे में अच्छी बात यह है कि यह प्रगति, वर्तमान गति, समय की शुरुआत और ईटीए को दर्शाता है। एचएफएस + के संबंध में मुझे नहीं पता, मैं सिर्फ "गति" भाग में मदद करने की कोशिश कर रहा हूं। साथ pvया एक बहुत ही अनुकूलित bsपैरामीटर, आप कम से कम 7 घंटे (6 घंटे के 150 MB / s एक मौजूदा गति से 50 मिनट) में एक 4 टीबी ड्राइव कर सकते हैं।

यहाँ छवि विवरण दर्ज करें

मैंने उन कनेक्शन प्रकारों के साथ कुछ परीक्षण किए जो आप उपयोग कर रहे थे और अन्य जो मैंने उपलब्ध थे। मैं Asus Z87 प्रो और इंटेल DZ68DP का उपयोग कर रहा था। यह मेरे परिणाम थे, लेकिन पहले हमें यह जानना होगा कि कई हस्तांतरण दरों (रॉ गति) के लिए सैद्धांतिक गति सिर्फ यही है, सिद्धांत । असली परीक्षण करने से पता चला कि वे उस कच्ची गति के 40% से 80% के बीच हैं। यह परीक्षण डिवाइस के उपयोग, कनेक्शन प्रकार, मदरबोर्ड, कनेक्टिंग केबल के प्रकार, फाइलसिस्टम प्रकार और अधिक के आधार पर बदल सकता है। इसे ध्यान में रखते हुए, यह वही है जो मुझे मिला है (मैंने केवल डिवाइस की गति लिखें, पढ़ें आमतौर पर अधिक है):

Connected Device  -  Connection Type  -  Speed (Write Speed)
  USB 2.0                 USB 2.0              25 MB/s
  USB 3.0                 USB 2.0              35 MB/s
  USB 3.0                 USB 3.0              73 MB/s
  eSata                   eSata                80 MB/s
  Sata 2G HDD             Sata 2G              120 MB/s
  Sata 3G HDD             Sata 2G              140 MB/s
  Sata 3G HDD             Sata 3G              190 MB/s
  Sata 2G SDD             Sata 2G              170 MB/s
  Sata 3G SDD             Sata 2G              210 MB/s
  Sata 3G SDD             Sata 3G              550 MB/s 

3
dd की प्रगति प्राप्त करने के लिए USR1 सिग्नल भेजें। Dd का नुकसान यह है कि यह मुक्त स्थान की नकल करता है।
4

1
मेरे अनुभव में, bsपैरामीटर को समायोजित करना ddउतना ही तेज हो सकता है cat। आप catपहली जगह में भी उपयोग कर सकते हैं ।
गाइल्स

3
pvअपने आप बहुत अच्छी तरह से काम करता है।
कज़ वोल्फ

11
आप काम करने के लिए dd का उपयोग कर सकते हैं, लेकिन इस तरह ट्रांसफर रेट को मॉनिटर करने के लिए चेन में pv डालें:dd if=/dev/sda1 | pv | dd of=/dev/sdb1
thomasrutter

4
मैंने हमेशा एस के pvबीच में उपयोग किया है dd। कभी नहीं पता था कि इसका इस्तेमाल अकेले किया जा सकता है!
17

12

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

dd bs=64M    51.3
dd bs=1M     41.8
dd bs=4k     48.5
dd bs=512    48.9
cat          41.7
cp           45.3

इस मानदंड से निष्कर्ष यह है कि ddमामलों के लिए ब्लॉक आकार का विकल्प (लेकिन इतना नहीं), और catस्वचालित रूप से एक तेज़ प्रतिलिपि बनाने का सबसे अच्छा तरीका है: ddकेवल आपको धीमा कर सकता है। एक छोटे से ब्लॉक आकार के साथ, ddसमय कम पढ़ता है और लिखता है। एक बड़े ब्लॉक आकार के साथ, एक डिस्क बेकार रहती है जबकि दूसरा पढ़ या लिख ​​रहा है। इष्टतम डिस्क तब प्राप्त होती है जब एक डिस्क पढ़ती है जबकि दूसरी डिस्क लिखती है।

किसी पार्टीशन को कॉपी करने के लिए, फाइलों को कॉपी करना तेज हो सकता है cp -a। यह इस बात पर निर्भर करता है कि कितनी फाइलें हैं और फाइल सिस्टम कितनी जगह खाली है। फ़ाइलों की प्रतिलिपि बनाना एक ओवरहेड है जो फ़ाइलों की संख्या के लगभग आनुपातिक है, लेकिन दूसरी ओर मुक्त स्थान कचरे की नकल करते हुए।

USB2 के लिए अधिकतम डेटा दर 50 एमबी / एस से थोड़ा कम है जो 1TB को स्थानांतरित करने के लिए 6-7 घंटे तक काम करता है। यह एक हार्ड डिस्क मानता है जो USB बस को संतृप्त करने के लिए पर्याप्त तेज़ है; मुझे लगता है कि तेजी से 7200 आरपीएम ड्राइव कर सकते हैं लेकिन 5900 आरपीएम तेज नहीं हो सकता है (शायद वे रैखिक लेखन के लिए हैं?)।

यदि या तो डिस्क समानांतर में उपयोग में है, तो यह प्रतिलिपि को काफी धीमा कर सकता है क्योंकि डिस्क प्रमुखों को घूमने की आवश्यकता होगी।


मैं हालांकि एक पूरी डिस्क की प्रतिलिपि बनाने की कोशिश कर रहा हूं।
कज़ वोल्फ

मुझे उम्मीद है कि अंतर एक ही क्रम का होगा, लेकिन अधिक विश्वसनीय डेटा प्राप्त करने के लिए अपने सिस्टम पर एक बेंचमार्क चलाएं।
गाइल्स

के catलिए इस्तेमाल किया जा सकता है dd if=ubuntu.iso of=/dev/usb? ddUSB2 या USB3 के लिए ऐसा करने की गति निराशाजनक रूप से धीमी है।
ऑक्सीविवि

1
@Oxwivi हां, cat ubuntu.iso >/dev/usbबिल्कुल बराबर है। इसमें कोई जादू नहीं है dd, यह केवल एक इनपुट है इसके इनपुट को इसके आउटपुट में कॉपी करने के लिए।
गाइल्स

ऊपर दी गई बिल्ली कमांड एक मैक पर काम नहीं करती है। मैंने sudo cat linuxmint-17.3-cinnamon-64bit.iso >/dev/disk1वापस कोशिश की "-बैश: / देव / डिस्क 1: अनुमति से इनकार किया"
Nay

12

समस्या आपके कनेक्शन प्रकार, और ब्लॉक आकार की है। सबसे तेज़ परिणामों के लिए आपके ब्लॉक का आकार आपके द्वारा आमतौर पर प्राप्त की जाने वाली सबसे कम लिखने की गति का आधा होना चाहिए। यह आपको एक सुरक्षित मार्जिन देगा, लेकिन फिर भी बड़ी संख्या के लिए अनुमति देगा; निश्चित रूप से आपके पास डेटा को रखने के लिए पर्याप्त रैम होना आवश्यक है।

यूएसबी 2.0 प्रति सेकंड (एमबीपीएस) 12 मेगाबिट्स है, यूएसबी 2.0 हाई स्पीड 480 एमबीपीएस है। यह निश्चित रूप से कच्ची गति है; एक बाइट और फ्रेमिंग ओवरहेड में 8 बिट्स के साथ, एमबी / एस में प्रयोग करने योग्य गति आमतौर पर एक दशमलव स्थान है। तो उदाहरण के लिए 480 कच्चे, 48MB प्रयोग करने योग्य बन जाता है। ध्यान रखें कि यह गणितीय सबसे अच्छा है, वास्तविक दुनिया में यह थोड़ा कम होगा। यूएसबी 2.0 उच्च गति कनेक्शन के लिए आपको लगभग 30-35 एमबी अधिकतम लिखने की गति की अपेक्षा करनी चाहिए, बशर्ते कि वास्तविक भंडारण उपकरण कनेक्शन की गति को समान या पार कर सकता है।


6
यूनिट नाइटपैकिंग: USB2.0 हाई स्पीड 480 Mbit / s = 60 MByte / s, कच्ची गति है। प्रयोग करने योग्य गति एक दशमलव स्थान नहीं है, बल्कि कच्ची गति का लगभग 80% है। हालांकि, एमबीटी / एस में वास्तविक गति का नियम Mbit / s में कच्ची गति 1/10 है, हालांकि मान्य है।
जप

5

मैं मानता हूं कि एक अच्छी तरह से तैयार dd('pv') या 'कैट' कमांड की कच्ची गति को हरा पाना कठिन है, लेकिन अगर कॉपी में कोई समस्या है (खराब क्षेत्र, बिजली की विफलता, उपयोगकर्ता की त्रुटि आदि) तो आपको शुरू करना होगा ऊपर।

मैं ddrescue का सुझाव देना चाहूंगा - एक FOSS उपकरण जिसमें dd की सभी गति है, लेकिन यह डिस्क त्रुटियों के आसपास काम करेगा, और एक विफलता होने पर बाद के बिंदु पर फिर से शुरू करेगा।


2

मैं विंडोज 7 को एक एचडीडी से एसएसडी में स्थानांतरित कर रहा हूं और यह और कुछ अन्य उत्तर मिला ... कुछ मैंने सीखा जो दूसरों की मदद कर सकते हैं। मेरे मामले में, स्रोत ड्राइव बड़ा है, अन्यथा मैंने / dev / sda -> / dev / sdb डिवाइस स्तर पर काम किया होता।

Win7 और इसके 3 विभाजन ... मैंने एक यूएसबी पर Xbuntu 14.04 लाइव सीडी का उपयोग किया। जीत कंप्यूटर की डीवीडी को बाहर निकाल दिया और अपनी जगह पर एसएसडी डाल दिया। स्थापित partclone और यह कोशिश की:

partclone.ntfs -b -N -s /dev/sda3 -o /dev/sdb3

विंडोज में चलने वाले chkdisk की जरूरत वाले ntfs पर पटलक्लाइन पक्की है, इसलिए एक त्वरित फिक्स से भागल खुश हो गया:

ntfsfix -b /dev/sda3
ntfsfix -d /dev/sda3

सभी आज्ञाएँ जड़ के रूप में चलती हैं। पार्टक्लोन के ncurses UI (-N विकल्प) ने कहा कि स्थानांतरण 7GB / मिनट था और 5GB / मिनट पर समाप्त हुआ, जो 83MB / सेकंड के बराबर है। महान हिस्सा partclone है अप्रयुक्त स्थान की नकल नहीं करता है, इसलिए यह क्लोन उल्लेखनीय रूप से तेज है।

अतिरिक्त संभावित गेटेकास:

  • यदि आप जिस ड्राइव में स्थानांतरित कर रहे हैं, वह पहले इस्तेमाल किया गया था, तो उसमें GPT के अवशेष हो सकते हैं। विंडोज 7 फैक्ट्री इंस्टाल आमतौर पर msdos / mbr पार्टीशन टेबल होते हैं। आपको गंतव्य ड्राइव से GPT के टुकड़े निकालने होंगे। इस यूनिक्स और लिनक्स क्यूए ने मुझे इसके साथ मदद की। आपको gdiskडिवाइस पर उपयोग करना है, तो तब z और जीपीटी डेटा का उपयोग करने के लिए x और z का उपयोग करें और सुनिश्चित करें कि आपने MBR को KEEP किया है।

  • और यह न भूलें कि यदि आप उपकरण स्तर dd नहीं करते हैं, तो आपको एमबीआर की प्रतिलिपि बनाने की आवश्यकता होगी
    dd if=/dev/sdb of=/dev/sda bs=446 count=1
    जहां एसडीबी स्रोत या पुरानी ड्राइव है और एसडीए गंतव्य या नई ड्राइव ( स्रोत ) है


1

मैं हाल ही में 100GB विभाजन (HDD) की एक छवि बना रहा हूं और इसे नए SSD डिस्क पर लिख रहा हूं।

यहाँ एक टिप है जो काफी तेजी से प्रक्रिया को तेज कर सकती है :)

फ़ाइल को छोटे भागों में विभाजित करें (बड़ी फ़ाइल है, यह धीमा काम करता है)

sudo dd if=/dev/sda3 conv=sync,noerror bs=2M | split -a 3 -d -b 1G - /maindisk.img

प्रक्रिया के दौरान, आप गति का उपयोग करके (अलग टर्मिनल में) जांच सकते हैं

pgrep -l '^dd$' #to find PROCESSID
kill -USR1 PROCESSID #to check the speed

फिर, जब आपके पास परिणाम फ़ाइलों (maindisk.img000, maindisk.img001, और इसलिए ...) का पूर्ण निर्देशिका होती है, तो उपयोग करें ...

sudo cat maindisk.img* | sudo dd of=/dev/sda1

SSD के नए पक्षपात में छवि को 'बर्न' करने के लिए (समतुल्य पुराने के समान आकार होना चाहिए)

मेरे लिए यह सामान्य तरीके (बिना विभाजन के) की तुलना में तेजी से काम करता था। छवि बनाने की औसत गति ~ 13MB / s थी। जब मैं 'सामान्य' तरीके का उपयोग करता हूं तो यह ~ 15MB / s से शुरू होता है और फिर 1MB / s तक घट जाता है।


1
कई छोटी फ़ाइलों के बजाय एक बड़ी फ़ाइल लिखना धीमा क्यों होगा? लक्ष्य फ़ाइल सिस्टम प्रकार और उसके माउंट फ़्लैग क्या थे?
डेविड फ़ॉस्टर

इसके अलावा conv=syncप्रदर्शन के लिए हानिकारक और नहीं बल्कि इस प्रयोग के मामले में बेकार है।
डेविड फ़ॉस्टर

0

इस धागे को खोजने वाले किसी के लिए, डेटा रिकवरी के लिए डिज़ाइन किए गए टूल का उपयोग करना बहुत आसान और तेज़ है, जैसे कि ddrescue । यह पठन त्रुटियों के मामले में पहले अच्छे हिस्सों को बचाने की कोशिश करता है। इसके अलावा आप किसी भी समय बचाव को बाधित कर सकते हैं और बाद में उसी बिंदु पर इसे फिर से शुरू कर सकते हैं।

इसे दो बार चलाएं:

पहला राउंड, हर ब्लॉक को बिना रीड एरर के कॉपी करें और रेस्क्यू में लॉग इन करें।

sudo ddrescue -f -n /dev/sdX /dev/sdY rescue.log

दूसरा राउंड, केवल ख़राब ब्लॉकों को कॉपी करें और हार मानने से पहले स्रोत से पढ़ने के लिए 3 बार कोशिश करें।

sudo ddrescue -d -f -r3 /dev/sdX /dev/sdY rescue.log

अब आप नई ड्राइव को माउंट कर सकते हैं और भ्रष्टाचार के लिए फ़ाइल सिस्टम की जांच कर सकते हैं।

अधिक जानकारी:
https://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html


0

आईडी इनपुट / रीड - फाइल / डिस्क को पढ़ने की गति को बढ़ाने के लिए एसएटीए पर होने की सलाह देते हैं। USB 2.0 उच्च गति बहुत अच्छी है क्योंकि मैं ddrescue के साथ 33816 kb / s की औसत गति प्राप्त कर रहा हूं जब सेटिंग 2014 kb / s पर USB 2.0 SATA की तुलना में थी


0

एक अलग ब्लॉक आकार का उपयोग करें। यह डेटा की मात्रा ddहै जो एक बार में पढ़ता है। यदि बहुत कम पढ़ा जाता है, तो कार्यक्रम तर्क पर समय का एक बड़ा हिस्सा खर्च किया जाता है और यदि बहुत अधिक पढ़ा जाता है, तो बड़े डेटा को स्थानांतरित करने में बहुत समय व्यतीत होता है।

विभिन्न ब्लॉक आकारों में गति को मापने के लिए, निम्न bashस्क्रिप्ट का उपयोग करें :

  • $devडिवाइस पर सेट करें
  • cbtotalआपकी अपेक्षित रीड स्पीड कम से कम 5x होना ठीक है
    (set -o errexit; skip=0; cbtotal=$((120*1024**2)); bs=256;
    for power in `seq 10`; do
      bs=$((bs*2)); skip=$((skip/2)); count=$((cbtotal/bs));
      if [ "$count" -lt 1 ]; then break; fi;
      echo $bs;
      dd if=$dev of=/dev/null skip=$skip bs=$bs count=$count
      skip=$((skip+count))
    done)

आगे डिस्क पढ़ने के कारण परिणाम बड़े आकार के पक्षपाती हो सकते हैं - यही कारण है कि यह cbtotalकाफी बड़ा सेट करने के लिए महत्वपूर्ण है।

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