กลับมาทำงาน DD ของดิสก์ทั้งหมด


10

ฉันเขียนทับฮาร์ดไดรฟ์ของฉันด้วยข้อมูลแบบสุ่มโดยใช้เครื่องมือตัวเก่าdd:

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

มันเป็นอาร์เรย์ขนาด 2TB และ MacBook ของฉัน (ใช้ Linux ได้ไหม?) สามารถเขียนข้อมูลได้ที่ประมาณ 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
ฉันจะใช้หมายเลขบันทึกหรือไม่ จำนวนบล็อกนั้นเท่ากับหรือไม่
Naftuli Kay

2
จำนวนบล็อก = จำนวนไบต์ทั้งหมด / ขนาดบล็อกตามทฤษฎีแล้วควรเป็น 238048755782/512 = 464938976 แต่คุณมีบางส่วนที่นั่นดังนั้นฉันจะลบบล็อกจำนวนเล็กน้อยออกจากจำนวนที่ปลอดภัยเช่นseek=464938960
don_crissti

คำตอบ:


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ด้วยลำดับความสำคัญ (ไม่มี AES-NI) หรือแม้แต่วิ่งด้วยความเร็วเต็มที่ (ด้วย AES-NI)

คุณสามารถใช้shred -n 1ถ้าข้อมูล pseudorandom ดีพอสำหรับกรณีการใช้งานของคุณ shredควรจะสามารถใช้ความเร็วดิสก์เต็มแม้ในเครื่องที่ช้ามาก


ฉันไม่รู้มาplainOpenก่อนเลย ที่ดี! เสร็จฉันหนีของไดรฟ์ 2TB ในรอบ 4 ชั่วโมงเมื่อเทียบกับ 256GB ในกว่า 12 /dev/urandomใช้
Naftuli Kay

4

เพียงแค่เตือนสำหรับคนที่ต้องการที่จะคัดลอกดิสก์มากกว่าเพียงแค่การสุ่ม (ซึ่งไม่ว่าธรรมดา): คุณสามารถใช้skip=BLOCKSในการเริ่มต้นการอ่านในตำแหน่งที่เหมาะสมและseek=BLOCKSการเริ่มต้นการเขียนในตำแหน่งที่ถูกต้อง ตัวเลือกทั้งสองใช้บล็อกไม่ใช่ไบต์ เมื่อทำลาย / รีสตาร์ทขอแนะนำให้ลบบล็อกจำนวนมากในกรณี โดยปกติแล้วมันน่าจะเพิ่มbsมูลค่าสูงกว่า 512 เนื่องจากคุณสามารถเข้าถึงประสิทธิภาพที่ดีขึ้นถ้าคุณอ่านข้อมูลจำนวนมากในแถว

seekในกรณีของคุณเป็นจริงค่าบล็อกที่คุณต้องผ่านไป บางทีคุณควรลองปรับbsเพื่อดูว่าคุณสามารถเพิ่มความเร็วได้หรือไม่ตาม/dev/randomควรไปอย่างรวดเร็ว (หลอกแบบสุ่มและไม่บล็อกเมื่อไม่มีเอนโทรปี)


0

ddด้วยขนาดบล็อกเล็ก ๆ เช่น 512 ไบต์น่าจะช้ากว่าอัตราความเร็วสูงสุดของดิสก์ ใช้ขนาดบล็อกที่สูงขึ้น (ในลางสังหรณ์ฉันจะบอกว่าไม่กี่ MB) เพื่อประสิทธิภาพที่ดี หรือใช้cat- บน Linux ฉันพบcatว่าเร็วเท่ากับddขนาดบล็อกที่ดีที่สุดเมื่อดิสก์เดียวมีส่วนเกี่ยวข้อง (ฉันไม่รู้ว่ามันค้างไว้สำหรับ OSX หรือไม่)

ในการค้นหาว่าไปไกลแค่ไหนcatให้รันlsof -p1234โดยที่ 1234 คือ ID กระบวนการของcatกระบวนการ

หากต้องการกลับมาทำงานจากตำแหน่งให้ใช้

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

โดยที่ 123456 คืออ็อฟเซ็ตเป็นไบต์


0

การโคลนดิสก์:

การขยายคำตอบนี้จากเธรดนี้จะทำให้เกิดการโคลนดิสก์ทั้งหมดและดำเนินการต่อ:

ตัวอย่างนี้เหมาะสำหรับการคัดลอกจากไดรฟ์โรตารี 5400 รอบต่อนาทีไปยัง SSD บนระบบเฉพาะ 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จำนวนสำเนาขนาดบล็อกที่ถูกคัดลอกทั้งหมดก่อนถูกขัดจังหวะ (บันทึกไว้)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.