ディスクの終わりにddコマンドのbsオプション


10

dd次のようにコマンドを使用するとします。

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

16Mの正確な倍数でない場合、ディスクの最後で何が起こりますか?それは、ディスクの最後の残りの部分がゼロにならないことを意味しますか?

私はhttps://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd/で気づきました、彼は米国政府が使用していると書いています

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

conv=notrunc最後のバイトがすべて確実にワイプされるようにする方法はありますか?

dd 

回答:


12

出力デバイス全体のサイズは、渡したブロックサイズの倍数であるかどうかに関係ddなく消去されます。

notruncフラグは、デバイスファイルを切り捨てることは影響を及ぼさないので、出力は、デバイスファイルでは効果がありません。出力が通常のファイルである場合、出力ファイルが書き込まれる前に切り捨てられないという影響があります。これは、一部のファイルシステムでは、古いデータが上書きされることを意味します(新しいデータブロックを書き込んで残りを未接続のままにするのではなく)。ただし、このプロパティはすべてのファイルシステムで保証されているわけではなく、さらにコマンドはファイルを上書きするだけでなく、出力ディスクがいっぱいになるまで(またはその他のエラーが発生するまで)書き込みを続けるため、これは役に立ちません。

ddそれを正しく使用しているかどうかを使用して心配する代わりに(実際には、この特定のケースでは機能しますが、複雑機能しない場合もありますcat)、を使用してください

cat /dev/zero >/dev/sdX

Webでの一般的な信念にもかかわらずdd、ディスクへの書き込みにより適したものにする魔法はまったくありません。魔法は/devファイルにあります。最新のcatまたはのようなバイナリデータを処理できるツールheadは、またはのddようなフラグを渡さない限り、同じ仕事をすることができます。seekskip

問題がで共有することを注意ddしてcat成功した操作上のものであるが、彼らは、「デバイス上の左スペースがありません」(ENOSPC)を用いてエラーます。これをスクリプトに含める場合は、エラーがENOSPCであることを確認するか、別の方法を使用する必要があります。より信頼性の高い方法は、最初にデバイスのサイズを決定し(たとえば/proc/partitions、Linuxで使用)、次にのようなツールで正確なバイト数を正確に書き込むことですhead

size=$(</proc/partitions awk '$4 == "sdX" {print $3}')
head -c "${size}k" /dev/zero >/dev/sdX

8

問題ありません— 入力がなくなるか、によって制限されるか、または別のエラーが発生する(不良セクター、ケーブルの不良など)かぎり、dd最後まで書き込みます()。No space left on devicecount=x

ブロックデバイス全体を上書きすることが目的の場合、shredより簡単に使用できます。

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

またはcryptsetup、検証ステップのあるランダムデータの場合(ゼロはランダムデータに暗号化され、ランダムデータはゼロに復号化されます)。

またはblkdiscardSSDの場合。

またはwipefs、最初からやり直すだけの場合は、ドライブに保存したすべてを強制的に削除しないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.