Katakanlah Anda ingin menghapus hard disk yang gagal. Anda ingin menimpa sebanyak mungkin dengan nol. Yang tidak Anda inginkan adalah: proses batal pada kesalahan tulis pertama. Bagaimana cara melakukannya?
AFAICS, polos dd
hanya menyediakan opsi untuk mengabaikan kesalahan baca. Jadi, kira-kira seperti itu
dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k
tidak cukup.
ddrescue
tampaknya lebih baik dalam mengabaikan kesalahan - tetapi apa yang akan menjadi baris perintah optimal dengannya?
Percobaan saya dengan GNU ddrescue:
ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123
dd conv=noerror
mungkin ekstensi GNU, saya tidak yakin. Bagaimanapun, itu harus melakukan trik. Namun, jawaban SATA tell-the-drive-to-erase itu sendiri layak untuk dihapus seluruh drive.dd
dokumen GNUnoerror
sebagai 'lanjutkan setelah membaca kesalahan' ...dd conv=noerror
POSIX standar tetapi mungkin benar-benar lambatdd conv=noerror
harus untuk kesalahan membaca (menurut halaman manual), bukan kesalahan penulisan. Tidak ada yang buruk dalam menggabungkannyaconv=notrunc
, yang melakukan trik dengan mengabaikan kesalahan tulis untuk saya. unix.stackexchange.com/a/229379/4319dd if=/dev/zero of=/dev/sdX
, tidak akan melakukan pembacaan disk. Menurut Anda mengapa perintah dd "tidak cukup" ? "Kesalahan" apa yang Anda alami?Jawaban:
Saya lebih suka
badblocks
dalam mode penulisan destruktif untuk ini. Itu menulis, itu terus melakukannya ketika hits kesalahan, dan akhirnya memberitahu Anda di mana kesalahan itu, dan informasi ini dapat membantu Anda memutuskan apa yang harus dilakukan selanjutnya (Will It Blend?).Dan daftar blokir:
Dan apa yang tersisa di disk setelahnya:
Perhatikan itu bukan data yang benar-benar acak - polanya berulang-ulang, jadi jika Anda melewatkan
1MiB
Anda akan melihat output yang sama lagi.Ini juga akan mencoba memverifikasi dengan membaca kembali data, jadi jika Anda memiliki disk yang mengklaim berhasil menulis tetapi mengembalikan data yang salah pada readback, ia akan menemukan kesalahan itu juga. (Pastikan tidak ada proses lain menulis ke disk saat badblock berjalan untuk menghindari kesalahan positif.)
Tentu saja dengan disk yang rusak parah, ini mungkin memakan waktu terlalu lama: tidak ada kode yang akan melompati seluruh area yang rusak. Satu-satunya cara Anda dapat mencapainya adalah dengan
badblocks
menggunakan ukuran blok yang jauh lebih besar.Saya tidak yakin apakah
ddrescue
ini lebih baik; itu seharusnya melakukan itu ke arah lain (pulihkan data secepat mungkin). Anda dapat melakukannya secara manual untuk dd / ddrescue / badblocks dengan menentukan blok pertama / terakhir ...sumber
-t random
atau-t 0
- tidak badblock maka hanya melakukan satu tulis pass? Melihat halaman manual - tampaknya tanpa-t
itu melewati 4 (untuk '0xaa, 0x55, 0xff, 0x00').-t
Anda berikan pada baris perintah. Standarnya adalah 4 berlalu seperti yang Anda katakan.Jika disk tidak terhubung oleh USB, maka pertimbangkan untuk menggunakan
hdparm
(versi> 9.31) untuk melakukan ATA Secure Erase pada disk. Perintah ini menyebabkan firmware drive untuk menghapus isi disk, termasuk blok yang buruk.Peringatan: Gunakan huruf drive yang benar - saya telah tunjukkan
/dev/sdX
sebagai contoh - jangan hanya menyalin / menempel.Pertama, periksa apakah ia memahami perintah ATA (sebagian besar drive yang diproduksi dekade terakhir ini atau lebih seharusnya):
Dua baris terakhir dari ekstrak menunjukkan bahwa itu didukung.
Oleh karena itu tambahkan kata sandi ke drive (tampaknya persyaratan):
dan hapus:
Info lebih lanjut tentang prosedur ini tersedia di sini .
sumber
/dev/sdX
adalah baik, karena jika seseorang melewatkan kejadian ketika menempel dan menyesuaikan, tidak akan ada masalah.Saya melihat empat jawaban yang bisa diterapkan di sini:
The
hdparm
Metode diposting oleh garethTheRed mungkin terbaik jika Anda terhubung langsung ke komputer Anda. Namun, tampaknya, jika Anda mencobanya terhubung melalui USB, Anda dapat merusak drive Anda. Jika Anda melakukan ini untuk drive yang akan Anda buang, maka itu mungkin hal yang baik. Namun, Anda mungkin ingin mengamankan penghapusan sebelum membuangnya.Teknik yang dilaporkan oleh imz - Ivan Zakharyaschev akan berhasil, tetapi mungkin sangat lambat. Saya sarankan jika Anda tidak ingin data dapat dipulihkan, gunakan
/dev/urandom
sebagai ganti/dev/zero
; misalnya,Saya akan menyarankan saran berikut. Untuk sesuatu yang lebih cepat yang melakukan hal yang sama, gunakan teknik yang dilaporkan oleh maxschlepzig (dalam pertanyaan):
Ini akan lebih cepat dari
dd
perintah, tetapi tidak secepathdparm
perintah. Lihat di bawah mengapa saya tidak merekomendasikan ini ...The
badblocks
perintah akan juga bekerja, tetapi Anda tidak dapat mengacak data seperti itu, dan lagi itu akan sangat lambat.Akhirnya, saya akan lalai jika saya tidak menunjukkan nomor satu alasan orang ingin menghapus disk adalah karena mereka akan membuangnya. Dalam hal ini, jika Anda belum melakukannya, Anda mungkin ingin mencoba dan memulihkan disk terlebih dahulu. Jika Anda membaca blok dan mengembalikan kesalahan I / O, maka lain kali Anda menulis ke blok yang sama, disk akan mencoba merealokasi blok yang berbeda dari daftar cadangan. Setelah daftar cadangan penuh maka Anda akan mendapatkan kesalahan I / O pada penulisan. Saat itulah Anda benar-benar harus membuang drive.
Jadi Anda dapat melakukan sesuatu yang sederhana seperti:
Dan, kemudian, untuk menulis ulang blok buruk, hanya sesuatu seperti:
Jika perintah ini berhasil, jika Anda berani, Anda dapat memformat ulang disk Anda dan menggunakannya lagi.
Atau, Anda dapat menjalankan
badblocks
perintah pada disk dua kali. Kedua kalinya harus melaporkan tidak ada blok buruk ...Ini akan memakan waktu lebih lama, tetapi lebih dapat diandalkan.
Perlu juga dicatat bahwa tidak ada teknik yang benar-benar melakukan penghapusan aman, kecuali
hdparm
perintah. Ingat semua blok buruk itu? Sebagian besar data asli Anda masih utuh. Pakar pemulihan data dapat mengaksesnya untuk melihat sedikit dari apa yang sebelumnya ada di hard drive Anda.Sehubungan dengan ddrescue dan mengapa saya menasihatinya, saya memiliki penangkal berikut:
Masalahnya adalah ddrescure akan TERLALU baik dalam mengabaikan kesalahan. Saya memiliki hard drive yang secara konsisten dengan kecepatan tulis turun sekitar 102 GB dan mulai menghasilkan kesalahan tulis pada angka 238 GB. Saya cukup terkesan bahwa ddrescue terus berputar melalui disk dengan kecepatan konstan, bahkan melaporkan tidak ada kesalahan. 17 jam kemudian, ketika berada di 1300 GB ketika saya melihat lampu drive itu sendiri berhenti berkedip. Pemeriksaan cepat mengungkapkan seluruh penutup USB menjadi offline. Saya menarik drive keluar dari dudukan. Saya perhatikan ddrescue dengan senang hati melaporkannya masih menyalin tanpa kesalahan, bahkan dengan disk di tangan saya. Saya menancapkan disk ke komputer lain dan ternyata itu adalah batu bata.
Saya tidak menyalahkan ddrescue karena membuat drive menjadi batu bata. Drive itu gagal dan akan menjadi batu bata. Saya hanya menemukan ddrescue yang mengganggu bahkan tidak memberikan jumlah kesalahan berapa banyak kesalahan tulis yang diabaikannya. Dalam penggunaan ini, ddrescue membuat Anda berpikir itu telah sepenuhnya berhasil, terlepas dari semua kegagalan penulisan. Faktanya adalah ia seharusnya tidak dapat melanjutkan dengan kecepatan penuh di bagian dengan memperlambat. Alasan mengapa bagian itu lambat, adalah banyak blok telah dipindahkan oleh drive, menyebabkan banyak pencarian ketika mengakses bagian itu. Jadi itu mungkin titik ketika output ddrescue menjadi fiksi.
sumber
mungkin melakukan trik untuk saya.
Yang disebutkan
harus untuk kesalahan membaca (sesuai dengan halaman manual). Tidak ada yang buruk dalam menggabungkan keduanya.
Perintah lengkap saya untuk memusatkan disk mirip dengan:
Menambahkan kustom
bs=
juga mungkin diinginkan untuk beberapa kasus.sumber
Metode yang cepat dan matang adalah menggunakan
sdd
.Jika Anda hanya ingin menghancurkan semua konten, hubungi:
sdd -inull bs=1m of=/dev/rdsk/cXdXtXp0 -noerror
Selalu gunakan antarmuka driver disk "mentah".
Jika Anda ingin memperbaiki disk dan menyimpan sebanyak mungkin konten lama, hubungi:
sdd if=/dev/rdsk/cXdXtXp0 of=/dev/rdsk/cXdXtXp0 bs=1m -noerror
Ini akan mengganti semua blok yang tidak dapat dibaca dengan nol pada level 512 byte. Anda mungkin ingin memodifikasi jumlah coba lagi melalui
try=#
, standarnya adalah 2.Perhatikan bahwa
sdd
ini lebih cepat daripadadd
seandainya terjadi kesalahan saat pertama kali mencoba membaca dengan blocksize yang disediakan dan jika terjadi kesalahan, ia membaca dengan 512 byte. Jika ada kesalahan baca, sdd membuat pencarian acak dan membaca dummy untuk menenangkan firmware drive.Fitur-fitur pemulihan kesalahan yang ditingkatkan telah dikembangkan pada 1980-an ketika saya bekerja untuk OEM Sun-Microsystems terbesar kedua.
Sumber kode SDD termasuk dalam alat schily:
http://sourceforge.net/projects/schilytools/files/
sumber