एक संपूर्ण डिस्क का डीडी फिर से शुरू करना


10

मैं अच्छे पुराने का उपयोग कर यादृच्छिक डेटा के साथ अपनी हार्ड ड्राइव को अधिलेखित कर रहा हूं dd:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

यह एक 2TB सरणी है और मेरा मैकबुक (लिनक्स चला रहा है, ठीक है) केवल लगभग 3.7MB / s पर डेटा लिख ​​सकता है, जो बहुत ही दयनीय है क्योंकि मैंने घर पर अपना डेस्कटॉप 20MB / s देखा है। जब मैं आज रात घर जाऊंगा, तो मैं ddयहां रन रोकना चाहूंगा , इसे घर ले जाऊंगा , और देखूंगा कि अधिक शक्तिशाली मशीन के साथ रात भर किस तरह की प्रगति की जा सकती है।

मैं एक साधारण लूप का उपयोग करके प्रगति की निगरानी कर रहा हूं:

while true; do kill -USR1 $PID ; sleep 10 ; done

आउटपुट इस तरह दिखता है:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

यदि मुझे ddघर पर पास को फिर से शुरू करना है, तो मैं इसे कैसे पुनः आरंभ करूंगा? मैं seekपैरामीटर से अवगत हूं , लेकिन मैं इसे क्या कहता हूं, रिकॉर्ड संख्या या बाइट की गिनती?


1
क्या मैं रिकॉर्ड संख्या का उपयोग करता हूं? क्या ब्लॉक लिखित गणना के बराबर है?
नातुल्ली केय

2
ब्लॉकों की संख्या = कुल बाइट्स / ब्लॉक आकार, सिद्धांत रूप में यह 238048755782/512 = 464938976 होना चाहिए, लेकिन आपके पास कुछ आंशिक रिकॉर्ड हैं इसलिए मैं संख्या को सुरक्षित रखने के लिए कुछ ब्लॉकों को घटा seek=464938960
दूंगा

जवाबों:


8

जैसा कि @don_crissti ने पहले ही टिप्पणी की थी, बस seek=फिर से शुरू करने के लिए उपयोग करें।

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU dd बाइट्स में मांग का भी समर्थन करता है, ताकि आप बिना किसी रुकावट के, वास्तव में फिर से शुरू कर सकें:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

एक बड़े अवरोधक को धीमी डिवाइस की तरह गति के लिए भी मदद करनी चाहिए /dev/urandom

यदि आप तेजी से विकल्प की तलाश कर रहे हैं, तो आप cryptsetup plainOpenएक यादृच्छिक कुंजी और शून्य के साथ कर सकते हैं , इसे /dev/urandomपरिमाण के आदेश (एईएस-एनआई के बिना) से हराया जाना चाहिए या यहां तक ​​कि पूर्ण गति (एईएस-एनआई के साथ) चलाना चाहिए।

आप यह भी इस्तेमाल कर सकते हैं shred -n 1कि आपके उपयोग के मामले के लिए छद्म डेटा काफी अच्छा है। shredबहुत धीमी मशीन पर भी पूर्ण डिस्क गति का उपयोग करने में सक्षम होना चाहिए।


मैं plainOpenअब तक नहीं जानता था । महान! लगभग 4 घंटे में 2TB ड्राइव के मेरे स्क्रबिंग को 12 से अधिक उपयोग करके 256GB के विपरीत समाप्त कर दिया /dev/urandom
नातुल्ली केय

4

बस उन लोगों के लिए एक अनुस्मारक जो केवल यादृच्छिक डिस्क (जो कि आम नहीं है ) के बजाय कॉपी करना चाहते हैं : आप उचित स्थिति में पढ़ना शुरू करने और सही स्थिति में लिखना शुरू skip=BLOCKSकरने के लिए उपयोग कर सकते हैं । दोनों विकल्प ब्लॉक का उपयोग करते हैं, बाइट्स का नहीं। जब ब्रेकिंग / रीस्टार्टिंग होती है, तो बस मामले में ब्लॉक का एक गुच्छा निकालने की सलाह दी जाती है। यह आमतौर पर 512 से ऊपर मूल्य बढ़ाने के लायक है , क्योंकि आप एक पंक्ति में बहुत सारे डेटा पढ़ने पर बेहतर प्रदर्शन तक पहुंच सकते हैं।seek=BLOCKSbs

आपके मामले में, यह वास्तव में एक ब्लॉक मूल्य है जिसे आपको पास करने की आवश्यकता है seek। शायद आपको यह देखने के लिए समायोजित bsकरने की कोशिश करनी चाहिए कि क्या आप गति बढ़ा सकते हैं, क्योंकि /dev/randomतेज चलना चाहिए (छद्म यादृच्छिक और गैर-अवरोधक जब इसमें कोई एंट्रॉपी उपलब्ध नहीं है)


0

dd512 बाइट्स जैसे एक छोटे ब्लॉक आकार के साथ आपके डिस्क के अधिकतम थ्रूपुट की तुलना में बहुत धीमा होने की संभावना है। अच्छे प्रदर्शन के लिए एक उच्च ब्लॉक आकार (एक कूबड़ पर मैं कुछ एमबी कहूँगा) का उपयोग करें। या उपयोग करें cat- लिनक्स पर मैंनेcatdd एक डिस्क को शामिल करते समय इष्टतम ब्लॉक आकार के रूप में तेज पाया (मुझे नहीं पता कि क्या OSX के लिए भी है)।

यह पता लगाने के लिए कि कितनी दूर तक catपहुंचा है, lsof -p1234जहां प्रक्रिया की प्रक्रिया आईडी 1234 है cat

एक स्थिति से फिर से शुरू करने के लिए, का उपयोग करें

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

जहां 123456 बाइट्स में ऑफसेट है।


0

डिस्क पर क्लोन करना:

इस सूत्र से इस उत्तर पर विस्तार करते हुए , यह एक पूरी डिस्क को क्लोन करने और फिर से शुरू करने के बारे में हो सकता है:

यह उदाहरण एक विशिष्ट प्रणाली पर एक SSD के लिए 5400rpm रोटरी ड्राइव से कॉपी करने के लिए अनुकूलित है। gddप्रतिनिधित्व करता है GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

मैं इसे एक दो तरीकों से फिर से शुरू कर सकता हूं:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

या:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

पहले उदाहरण में, हम जिस कारण का उपयोग करते हैं 59011और नहीं करते हैं 59012, वह यह 59011है कि कितने ब्लॉक आकार के रिकॉर्ड पूरी तरह से बाधित होने से पहले कॉपी किए गए थे। (रिकॉर्ड आउट)।

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