Jadi apa masalahnya ketika menambahkan conv=sync,noerror
membuat perbedaan ketika membuat cadangan seluruh hard disk ke file gambar? Apakah conv=sync,noerror
persyaratan ketika melakukan hal-hal forensik? Jika demikian, mengapa demikian halnya dengan referensi ke linux fedora?
Edit:
OK, jadi jika saya melakukan dd tanpa conv=sync,noerror
, dan dd
menemukan kesalahan baca ketika membaca blok (mari ukuran 100M), apakah dd hanya melewatkan blok 100M dan membaca blok berikutnya tanpa menulis sesuatu ( dd conv=sync,noerror
menulis nol hingga 100M output - jadi bagaimana dengan kasus ini ?)
Dan jika hash hard disk asli dan file output berbeda jika dilakukan tanpa conv=sync,noerror
? Atau ini hanya ketika kesalahan baca terjadi?
Jawaban:
conv=sync
memberitahudd
agar setiap blok ke kiri dengan nol, sehingga jika, karena kesalahan, blok penuh tidak dapat dibaca, panjang penuh dari data asli dipertahankan, meskipun tidak semua data itu sendiri dapat dimasukkan dalam gambar . dengan begitu Anda setidaknya tahu seberapa rusaknya data tersebut, yang mungkin memberi Anda petunjuk forensik, dan jika Anda tidak dapat mengambil gambar sama sekali karena blok buruk atau apa pun, Anda tidak dapat menganalisis data apa pun. beberapa lebih baik daripada tidak sama sekali.conv=sync,noerror
diperlukan untuk mencegahdd
dari menghentikan kesalahan dan melakukan dump.conv=sync
sebagian besar tidak ada artinya tanpa noorror.http://linuxcommand.org/man_pages/dd1.html
http://vlinux-freak.blogspot.com/2011/01/how-to-use-dd-command.html
sumber
dd conv=sync,noerror
(atauconv=noerror,sync
) merusak data Anda.Bergantung pada kesalahan I / O yang dihadapi, dan pemblokiran yang digunakan (lebih besar dari ukuran sektor fisik?), Alamat input dan output tidak benar-benar tetap sinkron tetapi berakhir pada offset yang salah, yang membuat salinan tidak berguna untuk gambar sistem file dan lainnya hal-hal di mana offset penting.
Banyak tempat merekomendasikan penggunaan
conv=noerror,sync
ketika berhadapan dengan disk yang buruk. Saya dulu membuat rekomendasi yang sama, sendiri. Itu berhasil bagi saya, ketika saya harus memulihkan disk buruk beberapa waktu lalu.Namun, pengujian menunjukkan bahwa ini sebenarnya tidak dapat diandalkan sama sekali.
Gunakan
losetup
dandmsetup
untuk membuatA error B
perangkat:Perangkat loop A, B terlihat seperti ini:
Jadi A, B dengan angka yang bertambah yang akan membantu kami memverifikasi offset nanti.
Sekarang untuk menempatkan kesalahan baca di antara keduanya, milik perangkat Linux mapper:
Contoh ini dibuat
AerrorB
seperti di2000
sektorA
, diikuti oleh2*48
sektor kesalahan, diikuti oleh2000
sektorB
.Hanya untuk memverifikasi:
Jadi terbaca sampai
A127999\n
, karena setiap baris memiliki 8 byte yang totalnya 1024000 byte yang merupakan 2000 sektor kami dari 512 byte. Segalanya tampak teratur ...Apakah akan berbaur?
Hasil:
Dari ukuran file saja Anda dapat mengatakan ada yang salah untuk beberapa pemblokiran.
Checksum:
dd
setuju denganddrescue
hanya untuk ukuran blok yang kebetulan disejajarkan dengan zona kesalahan kami (512
,4K
).Mari kita periksa data mentah.
Walaupun data itu sendiri tampaknya ada, jelas tidak sinkron; offset benar-benar rusak untuk bs = 16K, 1M, 42,64K ... hanya yang dengan offset
2088576
yang benar, seperti yang dapat diverifikasi terhadap perangkat asli.Apakah ini perilaku yang diharapkan
dd conv=noerror,sync
? Saya tidak tahu dan dua implementasi yangdd
saya miliki bahkan tidak setuju satu sama lain. Hasilnya sangat tidak berguna jika Anda digunakandd
dengan pilihan blocksize pemain.Di atas itu diproduksi menggunakan
dd (coreutils) 8.25
,BusyBox v1.24.2
,GNU ddrescue 1.21
.sumber
ddrescue
daripada menggunakandd
ketika bekerja dengan drive dengan bad sector?sync
argumen mengatakan itu untuk menjaga output panjang yang benar. Tidak berfungsi jika Anda menggunakan ukuran blok yang salah, jadi jangan lakukan itu.iflag=fullblock
sepertinya menyimpannya. Meskipunmd5sum
s gambar yang dibuat denganiflag=fullblock
masih berbeda (tentu saja! Karena jumlah byte yang dilewati karena kesalahan baca berbeda - yaitu jumlah\0
s dalam gambar berbeda), tetapi penyelarasan disimpan denganiflag=fullblock
:grep -a -b --only-matching B130000
mengembalikan2088576
untuk semua gambar.