วิธีการลบฮาร์ดไดรฟ์ที่มีเซ็กเตอร์ที่ไม่สามารถเขียนข้อมูลได้?


21

ดังนั้นฉันมีฮาร์ดไดรฟ์ที่ล้มเหลว ฉันต้องการลบข้อมูลก่อนที่จะส่งเพื่อแทนที่ ฉันพยายามจะใช้dd if=/dev/zero of=/dev/sdXXแต่มันหยุดที่ข้อผิดพลาดการเขียนครั้งแรก ฉันจะเขียนทับไดรฟ์ด้วยเลขศูนย์โดยไม่สนใจข้อผิดพลาดในการเขียนได้อย่างไร conv=noerrorดูเหมือนว่าจะส่งผลกระทบต่อไฟล์อินพุตเท่านั้น


มีรายงานข้อผิดพลาดในฐานข้อมูล Debianเกี่ยวกับพฤติกรรมนี้ แต่ดูเหมือนว่ายังไม่ได้ใช้งาน
Bobby

ไม่badblocksยังหยุดข้อผิดพลาด? บางทีคุณอาจจะเขียนด้วยการทำลายล้างที่?
oKtosiTe

ตอนนี้ฉันยังวิ่งไปทำลายล้างbadblocksเพื่อให้แน่ใจว่ามีบล็อกที่ไม่ดีเท่าไหร่ก่อนที่ฉันจะส่งคืนดิสก์ในวันจันทร์ มันสามารถลบดิสก์ได้สำเร็จ แต่ใช้เวลาเกือบ 50 ชั่วโมง
TestUser16418

คำตอบ:


18

ลอง ddrescue แทน dd - มันพยายามให้หนักขึ้นด้วยข้อผิดพลาด


1
ddrescue ประสบความสำเร็จในการลบดิสก์ทั้งหมดโดยไม่สนใจข้อผิดพลาดในการเขียน ขอบคุณมาก.
TestUser16418

15

พารามิเตอร์ที่ฉันใช้กับ ddrescue เพื่อลบไดรฟ์/dev/sdb(เต็มไปด้วยเลขศูนย์จาก/dev/zero) และออกบันทึกเป็นไฟล์log.txt:

ddrescue --force /dev/zero /dev/sdb log.txt

หากต้องการลบด้วยการใช้ข้อมูลแบบสุ่ม: ddrescue --force / dev / urandom / dev / sdX tmp.log
Bastion

คุณจะรู้ได้อย่างไรเมื่อเสร็จแล้ว? ฉันทำแล้วปล่อยให้มันทำงานประมาณ 20 นาทีและได้รับการช่วยเหลือ 0.00% มันเป็น NVMe SSD ที่มีบล็อคไม่ดีที่ฉันพยายามลบ ... ยูทิลิตี้ Samsung Secure Erase ไม่ได้ผลสำหรับฉัน
user1960364

3

หากคุณเพียงแค่ต้องการที่จะล้างไดรฟ์ลองdban

จากเว็บไซต์:

Boot และ Nuke ("DBAN") ของ Darik เป็นดิสก์สำหรับบูตที่มีในตัวซึ่งจะทำการล้างฮาร์ดดิสก์ของคอมพิวเตอร์ส่วนใหญ่อย่างปลอดภัย DBAN จะลบเนื้อหาของฮาร์ดดิสก์ใด ๆ ที่สามารถตรวจจับได้โดยอัตโนมัติและสมบูรณ์ซึ่งทำให้เป็นเครื่องมือที่เหมาะสมสำหรับการทำลายข้อมูลจำนวนมากหรือฉุกเฉิน


ฉันจะแนะนำสิ่งนี้
qroberts

3

สำหรับเร็กคอร์ด dd ยังมีตัวเลือกconv=noerrorในการข้ามข้อผิดพลาด หากคุณมีข้อผิดพลาดในไฟล์อินพุตและเมื่อไม่ได้ใช้/dev/zeroงานคุณต้องการใช้conv=noerror,notruncหรือconv=noerror,syncป้องกันไม่ให้ dd ตัดทอนไฟล์เอาต์พุตที่มีข้อผิดพลาดอยู่ในไฟล์อินพุต

สำหรับคำค้นหาของคุณคุณอาจลองใช้คำสั่งนี้แทน:

dd if=/dev/zero of=/dev/sdXX conv=noerror  

เพื่อเพิ่มความเร็วของกระบวนการและอาจหลีกเลี่ยงไดรฟ์ที่กำลังจะตายในช่วงกลางคันคุณอาจลองเพิ่มขนาดไบต์จากค่าเริ่มต้น 512 (ซึ่งทำให้ dd อ่านเซกเตอร์แยกตามเซกเตอร์ซึ่งช้า) เป็นสิ่งที่ใหญ่กว่าเช่น 4K ( ซึ่งมีขนาดใหญ่เป็นแปดเท่า):

dd if=/dev/zero of=/dev/sdXX bs=4K conv=noerror  

หมายเหตุ: ด้วยขนาดไบต์ที่ใหญ่กว่าข้อผิดพลาดที่ข้ามอาจทำให้ส่วนของข้อมูลที่อ่านได้น้อยกว่าขนาดไบต์ที่คุณเลือกเล็กน้อย แต่ก็ยังไม่น่าเป็นไปได้ที่ใครก็ตามจะสามารถได้รับอะไรจากส่วนเหล่านั้นหลังจากดิสก์ทั้งหมดผ่าน กระบวนการ.

นอกจากนั้นฉันแน่ใจว่าผู้ผลิตฮาร์ดไดรฟ์จำหน่ายฮาร์ดไดรฟ์ที่ส่งคืนเพื่อทดแทนการรับประกันอย่างถูกต้องในกรณีที่ไดรฟ์ล้มเหลวก่อนที่คุณจะสามารถดำเนินการเขียนทับให้เสร็จสมบูรณ์


man ddแสดงว่า "noerror" หมายถึง "ดำเนินการต่อหลังจากอ่านข้อผิดพลาด"
Kevin Smyth

1

ไม่ใช่โซลูชันสำหรับผู้ใช้ที่ใช้พลังงานอย่างแน่นอน แต่หากข้อผิดพลาดในการเขียนหายากคุณอาจต้องการดำเนินการด้วยตนเองหลังจากเกิดขึ้น

คุณสามารถเขียนสคริปต์ในทางทฤษฎีเพื่อทำสิ่งนั้นโดยอัตโนมัติ แต่มันไม่ใช่เรื่องเล็กน้อยและฉันควรเขียนเครื่องมือที่จะทำเคล็ดลับมากกว่ารำคาญกับสคริปต์ของวัน

   seek=BLOCKS
          skip BLOCKS obs-sized blocks at start of output

1
... หรือใช้ dd-rescue ...
Antti Haapala

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