Diedit: jangan jalankan ini untuk mengujinya kecuali Anda ingin menghancurkan data.
Bisakah seseorang membantu saya memahami apa yang saya dapatkan?
dd if=/dev/zero of=/dev/sda bs=4096 count=4096
T: Mengapa khusus 4096 untuk
count
?dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)
T: Apa sebenarnya yang dilakukan ini?
Jawaban:
Ini akan menghasilkan nol 16 MiB pertama dari drive. 16 MiB mungkin lebih dari cukup untuk mem-nuke setiap struktur "start of disk" sementara cukup kecil sehingga tidak akan memakan waktu lama.
blockdev --getsz
mendapatkan ukuran perangkat blok di "sektor 512 byte". Jadi perintah ini sepertinya ditujukan untuk menghilangkan 2 MiB terakhir dari drive.Sayangnya perintah ini rusak karena sintaks. Saya berharap perintah itu semula dimaksudkan
dan backtick tersesat di suatu tempat sepanjang garis orang menyalin / menempel di antara lingkungan yang berbeda.
Tabel partisi lama, metadata LVM, metadata raid dll dapat menyebabkan masalah saat menggunakan kembali drive. Bagian zeroing out di awal dan akhir drive umumnya akan menghindari masalah ini sementara menjadi jauh lebih cepat daripada memusatkan seluruh drive.
sumber
expr blockdev --getsz /dev/sda - 4096
akan menjadi kesalahan sintaksis dariexpr
. Saya pikir perintah yang dimaksudkan adalah...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)"
. Atau lebih baik:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Ini akan menghapus hard drive pertama
4096*4096=16MB
dan terakhir512*4096=2MB
Anda, yang berisi struktur penting yang berguna untuk pemulihan. Saya menganggap kode ini diposting dengan jahat.Saya tidak pernah menemukan situasi di mana secara eksplisit menentukan
count
selain1
itu bermanfaat. Saya telah menghapus blok pertama jika saya ingin memastikan saya tidak meninggalkan jejak MBR di belakang ...sumber
sda
. Lebih mungkinsdb
atausdc
. Tapi saya mungkin salah tentu saja ...Perintah-perintah itu akan menimpa perangkat sda Anda dengan nol - yang pertama akan melakukan 16MB pertama (ukuran blok 4096 dan jumlah 4096 blok) dan yang ke-2 akan menimpa 2MB terakhir (ukuran blok 512 dengan 4096 blok) dengan nol. (itu tidak secara teknis menghapus, dan itu berkaitan dengan poin pertama saya di bawah ini.)
(itu adalah bagian yang sudah disebutkan dalam jawaban lain, termasuk di sini untuk kelengkapan)
Hal lain yang layak disebutkan adalah bahwa ukuran blok memang memiliki efek, tetapi yang umumnya hanya terlihat pada operasi volume tinggi. Cara paling efisien (tercepat) untuk menjalankan perintah adalah jika ukuran blok perintah cocok dengan ukuran akses perangkat, jika tidak maka waktu akan terbuang sia-sia.
Jika Anda tertarik, Anda dapat mencoba membuat file dengan sejuta potongan 1 blok, dan file dengan 1 juta potongan blok dan melihat perbedaannya:
Seperti yang Anda lihat, blocksize memiliki dampak besar pada efisiensi. Itu mungkin sidebar untuk OP, tetapi saya merasa itu masih relevan.
TL; DR: Jangan jalankan kode arbitrer yang Anda temukan di internet, atau seseorang yang tidak Anda percayai memberi Anda. Itu akan merusak harimu.
sumber
Don't execute arbitrary code you find on the net
saluranYang lain telah menjelaskan apa yang mereka lakukan, jadi saya akan lewati itu.
Maksud dari
dd
pemisahanbs
dancount
argumen adalahbs
mengontrol berapa banyak yang ditulis pada satu waktu . Menentukan nilai yang sangat besar untukbs
akan membutuhkan buffer yang sangat besar dalam program ini, dan menentukan nilai yang kurang dari ukuran blok perangkat akan lambat karena kernel harus membangun seluruh blok untuk menulis ke perangkat (dalam kasus seperti ini ia dapat mungkin buffer menulis hingga ada blok lengkap, dalam kasus lain mungkin harus membaca apa yang sudah ada di disk). Karena kedua perintah menggunakan nilai yang berbeda untukbs
, itu membuat saya berpikir bahwa Anda mungkin menemukannya di dua situs yang berbeda. Hard disk dulu memiliki ukuran blok 512 byte, sesuai denganbs=512
dari perintah terakhir, tetapi beberapa (6-8 saya pikir) tahun yang lalu mereka mulai membuat cakram dengan ukuran blok 4096 byte, membuatbs=4096
pilihan yang lebih baik untuk cakram modern.sumber
bs
jauh lebih tinggi dari itu . Satu perintah SATA dapat membaca atau menulis banyak sektor, sehingga kernel menggabungkan I / Os sebelum mengirimkannya. Di mana saja daribs=64k
kebs=1024k
wajar (ukuran cache L3 sering 4-8MiB). Saya sering menggunakanbs=128k
, yang merupakan setengah dari ukuran cache L2 pada CPU Intel modern. (dd
termasuk dua operasi memcpy: dalamread(2)
dari sumber (bahkan jika / dev / nol), danwrite(2)
. IIRC,sdd
memiliki opsi untuk menulis nol, yang akan menghemat sedikit waktu CPU. Benar-benar hanya relevan jika tujuannya adalah sesuatu selain disk).iostat -x 4
atau sesuatu, dan catat rrqm / s (baca-permintaan digabung per detik) dan kolom wrqm / s.PERINGATAN:
dd if=/dev/zero of=/dev/
digunakan untuk membersihkan drive atau perangkat sebelum menyalin data secara forensik. Drive atau perangkat harus selalu disanitasi sebelum menyalin informasi dari sistem yang sedang diselidiki forensik untuk mengurangi kontaminasi silang. Oleh karena itu, ini bukan perintah yang buruk, pengguna akhir harus memahami untuk apa ia digunakan atau mereka akan menghancurkan data mereka. Jika ini yang Anda inginkan maka lakukan verifikasi operasi tulis noldd if=/dev/sda | hexdump -C | head
.Sumber: Panduan Praktis untuk Penyelidikan Forensik Komputer oleh Dr Darren Hayes
sumber
Saya gunakan
dd if=/dev/zero of=/dev/sdX oflag=sync
untuk menguji kualitas USB drive atau kartu MicroSD yang dimasukkan SEBELUM saya benar-benar menggunakannya dengan gparted, fdisk, atau dd dengan disk image. Saya pikir ini adalah ide yang bijaksana, terutama dengan media MicroSD yang memiliki sejarah kualitas yang buruk.Tentu saja, berhati-hatilah dengan = sdX karena tidak ada pengampunan dengan penghapusan disk yang tidak disengaja. Verifikasi bahwa X = huruf drive dari target yang dituju.
sumber