perintah dd opsi bs di akhir disk

10

Jika saya menggunakan ddperintah sebagai berikut:

dd if=/dev/zero of=/dev/sdX bs=16M

Apa yang terjadi di akhir disk jika bukan kelipatan 16 juta? Apakah itu berarti bagian terakhir dari disk tidak di-zeroed?

Saya perhatikan di https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/ , ia menulis bahwa Pemerintah AS menggunakan

dd if=/dev/urandom of=/dev/sda bs=8b conv=notrunc

Apakah conv=notruncopsi cara untuk memastikan setiap byte terakhir dihapus?


sumber

Jawaban:

12

Seluruh perangkat keluaran dihapus apakah ukurannya merupakan kelipatan dari ukuran blok yang Anda lewati ddatau tidak.

The notruncbendera tidak berpengaruh ketika output adalah file device, karena truncating file perangkat tidak berpengaruh. Jika output adalah file biasa, itu akan memiliki efek bahwa file output tidak terpotong sebelum menulis, yang pada beberapa sistem file berarti bahwa data lama ditimpa (bukan menulis blok data baru dan membiarkan sisanya tidak terpasang), namun ini tidak akan berguna karena properti ini tidak dijamin oleh semua sistem file dan lebih jauh lagi perintahnya tidak hanya akan menimpa file, tetapi juga terus menulis hingga memenuhi disk keluaran (atau beberapa kesalahan lain terjadi).

Alih-alih menggunakan dddan mengkhawatirkan apakah Anda menggunakannya dengan benar (seperti yang terjadi, ia berfungsi dalam kasus khusus ini, tetapi rumit dan terkadang tidak berfungsi ), gunakan sajacat .

cat /dev/zero >/dev/sdX

Meskipun kepercayaan populer di web, sama sekali tidak ada keajaiban di dddalamnya yang membuatnya entah bagaimana lebih cocok untuk menulis ke disk. Keajaiban ada di /devfile. Alat apa pun yang dapat mengatasi data biner, seperti yang modern catatau head, dapat melakukan pekerjaan yang sama seperti ddkecuali Anda melewati bendera seperti seekatau skip.

Perhatikan bahwa masalah dibagikan oleh dddan catadalah bahwa pada operasi yang berhasil, mereka akan melakukan kesalahan dengan “Tidak ada ruang tersisa di perangkat” (ENOSPC). Jika Anda memasukkan ini ke dalam skrip, Anda harus memeriksa apakah kesalahannya adalah ENOSPC atau menggunakan metode lain. Metode yang lebih andal adalah pertama-tama menentukan ukuran perangkat (misalnya menggunakan /proc/partitionsdi Linux), kemudian menulis jumlah byte yang tepat dengan alat seperti head.

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX
Gilles 'SANGAT berhenti menjadi jahat'
sumber
8

Tidak ada masalah - ddmenulis sampai akhir ( No space left on device), kecuali kehabisan input, dibatasi oleh count=x, atau kesalahan lain terjadi (misalnya bad sector, kabel jelek dll).

Jika menimpa seluruh perangkat blok adalah tujuan Anda, shredlebih mudah digunakan.

shred -v -n 1 /dev/deleteme     # pseudorandom data
shred -v -n 0 -z /dev/deleteme  # zeroes

Atau cryptsetupuntuk data acak dengan langkah verifikasi (nol dienkripsi ke data acak; data acak didekripsi kembali ke nol).

Atau blkdiscarduntuk SSD.

Atau wipefsjika ini hanya tentang memulai dari awal, tidak secara paksa menyingkirkan semua yang pernah Anda simpan di drive.

frostschutz
sumber