Apakah dd melakukan verifikasi?

16

Saya menggunakan dduntuk menyalin data dari hard drive lama ke yang baru. Saya ingin memastikan integritas data aman.

Pada jawaban ini , kata Gilles

Jika [dd] berhasil dihentikan, maka cadangannya benar, kecuali kesalahan perangkat keras ...

Apa artinya itu sebenarnya? Apakah ddada semacam verifikasi bawaan?

Jika saya menggunakan rsync sebagai gantinya, saya menjalankan pass kedua --checksumjuga untuk memverifikasi. Apakah paranoia semacam itu dibenarkan?

Sparhawk
sumber
Tentukan "integritas aman".
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen Maksud saya bahwa salinan itu identik dengan aslinya.
Sparhawk
Jika Anda hanya memiliki file datar, cara tradisional untuk menyalin file menggunakan tar atau cpio. GNU tar memiliki tanda verifikasi: gnu.org/software/tar/manual/html_section/tar_81.html . Hari-hari rsyncini mungkin akan menjadi yang paling sederhana.
Thorbjørn Ravn Andersen
1
"pembatasan kesalahan perangkat keras" menunjukkan bahwa itu tidak melakukan verifikasi. Jika ya, itu bisa mendeteksi kegagalan perangkat keras.
Barmar

Jawaban:

20

ddatau aplikasi lain apa pun tidak memiliki "semacam verifikasi bawaan" dalam arti yang mungkin Anda pikirkan: itu tidak membaca kembali data dari media penyimpanan untuk membandingkan dengan apa yang ditulis. Itu pekerjaan sistem operasi.

Sangat tidak mungkin untuk melakukan verifikasi-baca ke perangkat keras dari suatu aplikasi. Ini akan berfungsi dalam beberapa skenario, tetapi dalam kebanyakan kasus itu tidak akan mencapai apa-apa. Aplikasi dapat membaca kembali apa yang baru saja ditulisnya jika itu menulis langsung ke media penyimpanan , tetapi itu biasanya akan membaca kembali dari cache di-memori, yang tidak akan memberikan jaminan yang berguna. Dalam contoh yang Anda kutip , ddmenulis ke sebuah pipa, dan dalam kasus itu ia tidak memiliki kendali atas apa yang terjadi pada data lebih jauh di telepon. Dalam contoh rsync Anda, pass keduarsync --checksum tidak ada gunanya: secara teori itu bisa menangkap kesalahan, tetapi dalam praktiknya, jika kesalahan itu terjadi, maka pass kedua mungkin tidak akan melaporkan sesuatu yang salah, jadi Anda membuang-buang upaya untuk sesuatu yang tidak benar-benar memberikan jaminan yang bermanfaat.

Namun, aplikasi yang memverifikasi apa yang terjadi pada data, dalam arti bahwa mereka memastikan bahwa sistem operasi memiliki tanggung jawab yang diterima untuk data. Semua panggilan sistem mengembalikan status kesalahan. Jika panggilan sistem mengembalikan status kesalahan, aplikasi harus menyebarkan kesalahan itu kepada pengguna, umumnya dengan menampilkan pesan kesalahan dan mengembalikan status keluar yang bukan nol.

Hati-hati itu ddpengecualian: tergantung pada parameter baris perintah, ddmungkin mengabaikan beberapa kesalahan . Ini sangat tidak biasa: ddadalah satu-satunya perintah umum dengan properti ini. Gunakan catalih-alih dd, dengan cara itu Anda tidak berisiko korupsi dan mungkin lebih cepat .

Dalam rantai penyalinan data, dua jenis kesalahan dapat muncul.

  • Korupsi: sedikit terbalik selama transfer. Tidak ada cara untuk memverifikasi ini di tingkat aplikasi, karena jika itu terjadi, itu karena kesalahan pemrograman atau kesalahan perangkat keras yang sangat mungkin menyebabkan korupsi yang sama ketika membaca kembali. Satu-satunya cara yang berguna untuk memverifikasi bahwa tidak ada korupsi yang terjadi adalah dengan memutuskan media secara fisik dan mencoba lagi, lebih disukai pada komputer lain jika masalahnya ada pada RAM.
  • Pemotongan: semua data yang disalin disalin dengan benar, tetapi beberapa data tidak disalin sama sekali. Yang satu ini layak dicoba kadang-kadang, tergantung pada kompleksitas perintah. Anda tidak perlu membaca data untuk melakukannya: cukup periksa ukurannya.
Gilles 'SO- berhenti menjadi jahat'
sumber
Saya percaya sebagian besar media penyimpanan menggunakan FEC yang cukup untuk mendeteksi + memperbaiki satu bit flip.
Gardenhead
2
Tentu saja jika Anda menyalin seluruh hard disk dengan dd dan kemudian segera membandingkan hard disk yang Anda tahu itu berhasil karena cache tidak cukup besar.
Yosua
1
Terima kasih atas jawabannya (+1). Saya mungkin harus menyebutkan saya menggunakan yang cukup mendasar dd if=/dev/sdc of=/dev/sdb bs=4M, jadi pemahaman saya adalah bahwa masalah mengabaikan kesalahan dan kecepatan (lebih atau kurang, dibandingkan dengan cat) diperdebatkan. Apakah Anda mengatakan untuk hanya memeriksa ukuran dengan memasang itu df?
Sparhawk
4

Tidak, ddtidak melakukan verifikasi eksplisit. Jika Anda ingin / memerlukan salinan disk Anda yang diverifikasi secara forensik atau bagian apa pun darinya, gunakan dcflddversi yang dddikembangkan oleh Departemen Forensik Komputer Departemen Pertahanan AS.

fpmurphy
sumber
4

Satu-satunya cara untuk menjadi "yakin" adalah dengan melakukan pass baca-dan-bandingkan tambahan (setelah menjatuhkan cache).

Selain itu, ddmendeteksi kesalahan baca dan tulis dengan cara yang sama seperti yang dilakukan semua program lain ... berfungsi jika drive (dan komponen lain yang terlibat) melaporkan kesalahan; untuk drive yang menerima data secara diam-diam tanpa menulisnya, Anda tidak beruntung.

Apakah paranoia semacam itu dibenarkan?

Jika Anda tidak dapat mempercayai perangkat keras Anda untuk dapat diandalkan, segalanya menjadi rumit ...

frostschutz
sumber
Ini lebih rumit dari ini , baik tentang membaca dan membandingkan dan tentang ddmendeteksi kesalahan.
Gilles 'SO- stop being evil'
Nah, jika Anda akan sejauh itu, ddmemiliki masalah korupsi data serius tetapi kasus-kasus khusus seperti ini bukan bagian dari pertanyaan.
frostschutz
Masalah-masalah korupsi dapat membenarkan memverifikasi data yang dihasilkan menggunakan dd. Solusi sebenarnya adalah menggunakan apa saja tetapi ddkarena korupsi data diam-diam adalah spesialisasi dd.
Gilles 'SO- stop being evil'
2
@Gilles, atau hanya jangan bilang dduntuk mengabaikan kesalahan. Anda tidak bisa menyalahkan program untuk melakukan persis apa yang Anda minta.
Tandai
@ Markus Dan bagaimana, berdoa, agar Anda memberi tahu dduntuk tidak mengabaikan kesalahan? Dan tidak, conv=noerroritu bukan jawaban yang benar. Lihat jawaban frostschutz sebagai contoh. Saya lakukan menyalahkan desain dduntuk membuat mengabaikan kesalahan mode default, dan salah satu yang tidak dapat dimatikan tanpa mengetahui mekanisme internal sangat tepat.
Gilles 'SANGAT berhenti menjadi jahat'
2

Ya, perangkat keras yang rusak dapat memasukkan bit kesalahan acak ke dalam data pada tingkat tertentu sebagai satu bit per jumlah megabita, ini mungkin dan kadang-kadang terjadi dalam praktik.

Biasanya, saya menggunakan hash md5 atau sha1 untuk memverifikasi data utuh, dengan membaca kembali sumber dan tujuan, misalnya:

dd if=/dev/sdb of=~/hd_backup
dd if=/dev/sdb | md5sum
dd if=~/hd_backup | md5sum

Ini mengasumsikan bahwa data jauh lebih besar dari cache sistem file, jika tidak, Anda mungkin perlu memulai kembali sistem untuk memverifikasi data aktual pada media dan bukan konten cache, atau menggunakan sistem lain untuk itu.

Yaroslav Voytovych
sumber
Cukup dengan meng-unmount / me-mount sistem file untuk memaksa OS untuk menulis cache sistem file ke perangkat.
miracle173
miracle173, tetapi bahkan setelah sinkronisasi, bukankah OS tetap menyimpan dalam cache apa yang ditulisnya? jadi saya tidak yakin unmount akan menghapus semua cache dari RAM.
Matt
1

Dari man dd:

Setelah selesai, dd menampilkan jumlah blok input dan output lengkap dan parsial, catatan input terpotong dan blok swapping byte-panjang aneh ke output kesalahan standar.

Blok input parsial adalah blok di mana kurang dari ukuran blok input dibaca. Blok output parsial adalah blok di mana kurang dari ukuran blok output ditulis. Blok keluaran sebagian ke perangkat kaset dianggap sebagai kesalahan fatal. Kalau tidak, sisa blok akan ditulis. Blok keluaran sebagian ke perangkat karakter akan menghasilkan pesan peringatan.

ddmemverifikasi ukuran blok input / ouput yang cocok setiap kali menyalin blok. Jika tidak, ia menangani kesalahan dengan peringatan atau kesalahan fatal (ditanggulangi noerror). Itu sebabnya ddbekerja hampir setiap saat.

Namun, itu tidak menggantikan secara manual memverifikasi integritas disk Anda. Jika informasi itu berharga bagi Anda, maka ya, paranoia Anda dibenarkan . Jalankan verifikasi manual setelah ddselesai.

ioldolden
sumber
ddhampir tidak berfungsi sepanjang waktu: dengan bsparameter, parameter ini mengabaikan beberapa kesalahan .
Gilles 'SANGAT berhenti menjadi jahat'