Bagaimana cara menghapus hard drive dengan sektor yang tidak dapat ditulis?


21

Jadi saya punya hard drive yang gagal. Saya ingin menghapus data di dalamnya sebelum mengirimnya untuk penggantian. Saya mencoba menggunakan dd if=/dev/zero of=/dev/sdXX, tetapi berhenti pada kesalahan tulis pertama. Bagaimana saya bisa menimpa drive dengan nol, mengabaikan kesalahan tulis? conv=noerrortampaknya hanya mempengaruhi file input.


Ada laporan bug di database Debian tentang perilaku ini, tetapi sepertinya belum diterapkan.
Bobby

Apakah badblocksjuga berhenti pada kesalahan? Mungkin Anda bisa menulis yang destruktif dengan itu?
oKtosiTe

Saya sekarang juga menjalankan destruktif badblocksuntuk memastikan berapa banyak blok buruk yang ada sebelum saya mengembalikan disk pada hari Senin. Itu juga berhasil menghapus disk, tetapi butuh hampir 50 jam.
TestUser16418

Jawaban:


18

coba ddrescue daripada dd - itu mencoba lebih keras dengan kesalahan


1
ddrescue berhasil menghapus seluruh disk, mengabaikan kesalahan tulis. Terima kasih banyak.
TestUser16418

15

Parameter yang saya gunakan dengan ddrescue untuk menghapus drive /dev/sdb(diisi dengan nol dari /dev/zero) dan mencatat keluaran ke file log.txt:

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

Untuk menghapus dengan menggunakan data acak: ddrescue --force / dev / urandom / dev / sdX tmp.log
Bastion

Bagaimana Anda tahu kapan itu dilakukan? Saya melakukannya dan membiarkannya berjalan sekitar 20 menit dan tetap pada 0,00% diselamatkan. Ini adalah NVMe SSD dengan blok buruk yang saya coba hapus ... utilitas Samsung Secure Erase tidak berfungsi untuk saya.
user1960364

3

Jika Anda hanya ingin menghapus drive, coba dban

Dari situs:

Boot dan Nuke Darik ("DBAN") adalah disk boot mandiri yang dengan aman menyeka hard disk dari sebagian besar komputer. DBAN akan secara otomatis dan sepenuhnya menghapus isi hard disk apa pun yang dapat dideteksinya, yang menjadikannya utilitas yang tepat untuk penghancuran data massal atau darurat.


Saya akan menyarankan ini.
qroberts

3

Sebagai catatan, dd juga memiliki opsi conv=noerroruntuk melewati kesalahan. Jika Anda memiliki kesalahan pada file input, dan ketika tidak menggunakan /dev/zero, Anda ingin menggunakan conv=noerror,notruncatau conv=noerror,syncuntuk mencegah dd memotong file output di mana kesalahan ada pada file input.

Untuk permintaan Anda, Anda dapat mencoba perintah ini sebagai gantinya:

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

Untuk mempercepat proses, dan berpotensi menghindari drive sekarat di tengah jalan, Anda juga dapat mencoba meningkatkan ukuran byte dari default 512 (yang membuat dd membaca sektor per sektor, yang lambat) menjadi sesuatu yang lebih besar seperti 4K ( yang delapan kali lebih besar):

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

Catatan: Dengan ukuran byte yang lebih besar, kesalahan yang dilompati dapat meninggalkan bagian data yang dapat dibaca sedikit kurang dari ukuran byte yang Anda pilih, tetapi masih tidak mungkin ada orang yang bisa mendapatkan apa pun dari bagian tersebut setelah seluruh disk dijalankan melalui proses.

Selain itu, saya yakin produsen hard drive dengan benar membuang hard drive yang dikembalikan untuk penggantian garansi, jika drive gagal sebelum Anda dapat sepenuhnya menyelesaikan proses menimpa.


man ddmenunjukkan "noerror" berarti "lanjutkan setelah membaca kesalahan"
Kevin Smyth

1

Jelas bukan solusi pengguna daya, tetapi jika kesalahan penulisan jarang terjadi, Anda mungkin hanya ingin melanjutkan secara manual setelah kemunculannya.

Secara teoritis Anda dapat membuat skrip untuk melakukan sesuatu secara otomatis, tetapi itu tidak sepele, dan saya lebih suka menulis alat untuk melakukan trik daripada repot dengan skrip dd ..

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

1
... atau gunakan dd-rescue ...
Antti Haapala

... akankah dd-rescue menangani kesalahan penulisan dengan benar?
qdot
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.