Menyelamatkan hdd dengan bad sector: dd vs gddrescue

11

Di suatu tempat di internet saya membaca bahwa gddrescue lebih unggul daripada dd setidaknya dalam hal mampu membedakan antara jumlah disk yang dilakukan pada sektor bermasalah. Benarkah ini masalahnya?

waktu dd jika = / dev / sda lewati = 900343967 dari = jumlah a.bin = 4 iflag = konv langsung = noerror, sinkronkan

dd: membaca `/ dev / sda ': Kesalahan input / output
2 + 0 mencatat dalam
2 + 0 mencatat
1024 byte (1,0 kB) disalin, 18,6057 s, 0,1 kB / s
3 + 1 catatan dalam
4 + 0 catatan dari
2048 byte (2,0 kB) disalin, 18,6707 detik, 0,1 kB / detik

0m18.672s nyata
pengguna 0m0.000
sys 0m0.004s

Btw, flag langsung sangat membantu, tanpa itu saya hanya bisa membaca 1 sektor dari 4 (vs 3/4 dengan itu). Namun, itu jelas memperlambat kecepatan transfer - setidaknya 5 kali lebih lambat bagi saya: 5MB / s vs 25MB / s tanpa tanda ini. Bagaimanapun, sekarang untuk bagian gddrescue (ddrescue) ..

waktu ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin

Akan menyalin 2048 Bytes dari / dev / sda ke b.bin
Posisi awal: infile = 460976 MB, outfile = 0 B
Ukuran blok salin: 1 blok
keras Ukuran blok keras: 512 byte
Max_retries: 0
Direct: yes Sparse: no Split: tidak terpotong: tidak

Tekan Ctrl-C untuk menginterupsi yang
diselamatkan: 1536 B, hapus: 512 B, kurs saat ini: 53 B / s
ipos: 460976 MB, kesalahan: 1, laju rata-rata: 53 B / s
opos: 1536 B, waktu dari yang terakhir berhasil baca: 0 s
Selesai

0m18.736s nyata
pengguna 0m0.004s
sys 0m0.000s

Seperti yang ditunjukkan di atas, telah mengambil jumlah waktu yang sama persis untuk eksekusi. Seperti yang diharapkan - statistik yang sama: 3/4. Namun, sementara saya bisa mengisi sektor bermasalah dengan 0x00 untuk dd (conv = sync), gddrescue sepertinya tidak memiliki fungsi ini? Sebaliknya, ia hanya melompati sektor yang bermasalah tanpa menulis apa pun ke posisinya dan melanjutkan dengan sektor berikut berikutnya (jika saya sudah memiliki data yang ditulis di atas sektor itu dalam file output - itu tidak akan ditimpa: kadang-kadang itu mungkin tidak diinginkan ). Saya tidak yakin bagaimana opsi -t (truncate) berfungsi untuk perangkat blok dengan gddrescue(saya kira, itu akan sepenuhnya menimpa dengan 0x00), tetapi pada file biasa, seperti yang diperkirakan, memotong seluruh file tanpa melakukan hanya dalam dimensi offset (yaitu -o1). Jadi, itu agak mirip dengan sinkronisasi dd , tetapi jauh dari sama karena hanya akan meniru fungsionalitas identicle JIKA Anda siap untuk menimpa seluruh perangkat / file keluaran.

Meskipun, berkat adanya opsi verbose dan kemampuan untuk mencatat sektor / blok buruk - gddrescue sepertinya pilihan yang lebih baik. Penting untuk dicatat, bahwa kedua aplikasi diluncurkan dengan (hampir) param identik.

Output dari

diff? .bin

kosong (keluar 0), artinya file-nya persis sama.

Sekarang ini adalah bagian yang saya TIDAK mengerti:

dd lambat bahkan pada hal-hal yang bebas dari kesalahan karena melakukan sedikit membaca dan menulis. Ini menghabiskan banyak waktu untuk mengunyah bagian-bagian yang salah dari drive, daripada membaca sebanyak mungkin hal-hal yang bebas kesalahan, kemudian kembali mengerjakan hal-hal yang sulit.

Tentang apa itu semua? Terutama bagian " itu menghabiskan banyak waktu mengunyah bagian-bagian yang salah dari drive, daripada membaca hal-hal bebas kesalahan sebanyak mungkin, MAKA kembali untuk melakukan hal-hal yang sulit "? Butuh jumlah waktu yang sama seperti yang ditunjukkan di atas (walaupun saya telah memeriksa sebagian kecil dari data, tetapi apakah itu penting?).

gddrescue menawarkan -r switch, yang harus mengontrol jumlah membaca ulang pada "bad sector", namun, dd tampaknya berjalan dengan -r0 selama ini (karena butuh waktu yang sama). Jadi, apakah opsi ini hanya untuk "pasca pemrosesan"? Apa yang saya maksudkan , adalah bahwa awalnya dd dan gddrescue tampaknya berjalan dengan -r0 dan dd tampaknya tidak mengunyah bagian yang salah lebih dari gddrescue (mereka berdua tampaknya berhenti di blok yang buruk untuk 15-18 detik memberi atau menerima, jadi apa masalahnya, bagaimana gddrescue lebih cepat ???)

Juga, untuk apa opsi -D (gunakan penulisan sinkron untuk file keluaran)? Saya belum melihat adanya perbedaan dari beberapa pengujian yang dilakukan.

Adakah yang bisa mengomentari semuanya? Terima kasih.

XXL
sumber

Jawaban:

6

Saya tidak yakin bagaimana penulis yang dikutip sampai pada kesimpulannya. Saya tidak berdebat apakah dia benar, atau tidak, saya hanya tidak memiliki pengalaman itu.

Di sisi lain, sehubungan dengan pernyataan ini ...

gddrescue lebih unggul daripada dd setidaknya dalam hal mampu membedakan antara jumlah disk yang dilakukan pada sektor bermasalah.

"Setidaknya" alasan sebenarnya untuk menggunakan gddrescue, adalah karena gddrescue tidak memotong output pada upaya baca / tulis berulang. gddrescue juga sepenuhnya otomatis, sehubungan dengan kesalahan baca tertentu yang akan menghentikan dd.

Jadi penulis yang dikutip mungkin benar, dia mungkin tidak ... tetapi seluruh pernyataan melewatkan titik penyelamatan.

UPDATE: Perbedaan terperinci antara dd dan gddrescue.

dd conv = noerror, akan terus terjadi setelah kesalahan, tetapi hanya akan melewatkan blok buruk. bahkan menambahkan opsi sinkronisasi hanya akan menempatkan angka nol daripada melewatkan. Jika Anda menggunakan dd untuk membaca lagi menggunakan output yang sama, Anda hanya akan menimpa / kehilangan apa pun yang Anda pulihkan sebelumnya.

gddrescue, juga akan terus terjadi setelah kesalahan. Ini dapat memulihkan sebagian hasil dari blok yang buruk, dan akan kembali dan mencoba sektor blok demi sektor. gddrescue akan menyimpan log kesalahan terperinci, dengan blok yang baik, blok yang buruk, dan sektor per sektor dari blok yang buruk. Jika Anda mencoba melakukan pembacaan lagi, gddrescue akan memotong (memotong) dan menambahkan data yang dipulihkan.

Perlu diingat, bahkan dengan kedua alat jika seluruh blok dalam 100% tidak dapat dibaca. Anda masih akan mendapatkan data dari itu. gddrescue berpotensi mendapatkan lebih banyak data, jika beberapa sektor di blok tetap dapat dibaca.

JM Becker
sumber
Begitu ya ... Mengenai gddrescue sepenuhnya otomatis, bukankah juga sepenuhnya otomatis dengan conv = noerror ? Bisakah Anda menguraikan pada bagian "truncate output pada upaya baca / tulis berulang"? Maksud Anda hal-hal "pasca-pemrosesan", ketika gddrescue diperintahkan untuk memeriksa kembali sektor-sektor yang gagal dibaca pada awalnya?
XXL
Saya memperbarui jawaban saya, untuk mencerminkan pertanyaan Anda.
JM Becker
Saya telah menggunakan gddrescue beberapa kali pada hard drive dan media optik. Keuntungannya adalah upaya untuk memulihkan area yang tidak dapat dibaca. Anda juga dapat menghentikannya dan menjalankannya kembali nanti dan akan mengambilnya tepat di tempat yang tersisa.
Chris Thompson
1
@TechZilla - gddrescue hanya melompat blok buruk juga, seperti dd tidak. Seperti yang saya tulis di atas, padding dengan nol (conv = sync) adalah opsi tepat yang hilang gddrescue dan yang kadang-kadang berguna (dengan usaha ekstra Anda bisa melakukannya secara manual dengan / dev / nol, karena Anda akan memiliki log dari bad sector seperti yang diproduksi per gddrescue output). Tidak ada perbedaan antara gddrescue dan dd dalam hal pemulihan, gddrescue tidak melakukan sesuatu yang berbeda dalam hal itu. Mengapa? Karena, dengan ukuran blok yang sama mereka akan memulihkan jumlah data yang sama.
XXL
@ TechZilla - satu-satunya perbedaan sebenarnya adalah ketika jumlah sektor untuk diproses dipilih lebih tinggi dari ukuran blok . Ini akan memberi Anda kemampuan untuk secara nyata mempercepat dibandingkan dengan dd , karena dd hanya dapat bekerja dengan ukuran sektor non-variabel statis. gddrescue , di sisi lain, pertama-tama akan membaca sebanyak sektor yang telah Anda perintahkan, tetapi juga akan mendeklarasikan bongkahan itu buruk jika satu blok di dalamnya meragukan dan setelah selesai - beralih ke mode pasca memeriksa area yang membingungkan secara bertahap mengurangi ukuran sektor hingga mencapai ukuran blok minimum
XXL
2

Bergantung pada kapan hdd Anda diproduksi dan juga pabrikan, dan versi firmware apa yang dijalankannya, dengan hdds modern, ketika bad sector terdeteksi, mereka dikeluarkan dari penggunaan oleh firmware dan drive tahu untuk melewati bad sector. Jadi, gagasan "menyelamatkan" hdd dari bad sector mungkin bisa diperdebatkan dalam hal itu. Pertanyaan apakah sektor buruk yang dulu pernah memiliki data yang valid tampaknya menjadi solusi kasus yang Anda cari - tidak ada permainan kata pun!

Ada beberapa perangkat lunak di grc.com yang disebut spinrite 6 yang mengklaim dapat memperbaiki hdds dengan bad sector. Ini adalah perangkat lunak berbayar, dan saya belum pernah mencobanya. Perlu dibaca, terutama jika seseorang mencoba untuk "menghidupkan kembali" sebuah hdd dan itu benar-benar berfungsi seperti yang dijelaskan. FAQ di grc.com mengenai spinrite 6 menunjukkan bahwa ada jaminan uang kembali 30 hari (dan tidak ada versi uji coba atau gratis). Catatan: Saya tidak berafiliasi dengan grc.com, saya juga tidak merekomendasikannya untuk situasi Anda. Saya hanya tahu itu ada dan mungkin berfungsi seperti yang diiklankan, hanya saja, jangan mengambil kata-kata saya untuk itu - emptor peringatan.

Berkenaan dengan menilai apakah gddrescue "lebih unggul" daripada dd setidaknya dalam hal mampu membedakan antara jumlah pembacaan disk yang dilakukan pada sektor bermasalah, sejumlah bacaan pada sektor yang buruk (karena ditandai sebagai non- sektor fungsional dalam daftar sektor buruk yang disimpan dalam daftar firmware) bagi saya tampaknya tidak akan berguna dalam penggunaan kualitatif gddrescue atau dd.

Anda mungkin bermanfaat membaca halaman web, dd (Unix) di: https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-oriented_variants_of_dd

Anda mungkin juga perlu melihat: Cara Membuat Gambar dari Hard Drive yang Rusak menggunakan UBCD, dd-rescue dan P2 eXplorer di: http://www.myfixlog.com/fix.php?fid= 21

Tom
sumber