ハードドライブの最後の1MBをクリア

ハードドライブの最後の1MBをクリア

ハードドライブの最後の1MBを0にするために使用できる簡単なコマンドはありますか?

運転を始めるにはdd if=/dev/zero of=/dev/sdx bs=1M count=1。 ddのオプションはseek有望に見えますが、私がどのくらい遠くまで見なければならないかを簡単に決定する方法がある人はいますか?

ドライブの末尾にいくつかのRAID構成を格納するハードウェアRAIDデバイスがあります。ドライブを未構成として扱うにはRAIDデバイスが必要なので、ドライブを完全に消去するのに時間をかけずにRAID構成を削除したいと思います。 2TBドライブが12台あり、すべて消去するのに時間がかかります。

答え1

Linuxでディスクサイズを取得する最も簡単な方法は次のとおりですblockdev --getsz

sudo -s
dd bs=512 if=/dev/zero of=/dev/sdx count=2048 seek=$((`blockdev --getsz /dev/sdx` - 2048))

答え2

各パーティションのサイズは/proc/partitions。次のコマンドは、サイズをsdxkB単位で表示します。

awk '$4 == "sdx" {print $3}' </proc/partitions

したがって:

dd if=/dev/zero of=/dev/sdx bs=1k count=1024 \
   seek=$(($(awk '$4 == "sdx" {print $3}' </proc/partitions) - 1024))

答え3

ナビゲーションを使用してドライブの最後まで到達することは非常に効果的です。例:

ナビゲーション=$(( blockdev --getsz /dev/sda- 2048))

ただし、この機能を使用するときは、カウント値が正しいかどうかを知っているか、まったく使用しないことをお勧めします。私がこれを言うのは、ドライブが512バイトのセクタまたは4kのセクタを持つことができ、4kのセクタを持つドライブにこのソリューションを使用している場合、ドライブの最後まで到達するためにそのカウント値を使用せずに最後のセクタを見逃す可能性があるためです。 RAID情報(これが見つかりました)。

答え4

dd次の方法でデバイスサイズを使用してインポートできますfdisk

dd if=/dev/zero of=/dev/sda bs=1k \
   seek=$(( (`fdisk -l /dev/sda | grep 'Disk /' | cut -d' ' -f 5` -1024*1024)/1024  )) count=1024

丸め誤差を避けるために、1mのブロックサイズを使用しません。

または1mbの負のオフセットで関数を呼び出してlseekから 。SEEK_ENDwrite

関連情報