web-dev-qa-db-ja.com

ハードドライブの最後の1MBをワイプ

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

ドライブの開始のために私はdd if=/dev/zero of=/dev/sdx bs=1M count=1。 ddのseekオプションは有望そうに見えますが、誰かが私がどこまで探すべきかを正確に判断する簡単な方法はありますか?

ドライブの最後にRAID構成の一部を保存するハードウェアRAIDアプライアンスがあります。ドライブを未構成として表示するにはRAIDアプライアンスが必要なので、ドライブを完全に消去する時間を費やすことなくRAID構成を削除します。私には12 TBのドライブが12台あり、それらすべてのドライブを完全に消去するには長い時間がかかります。

25
Zoredache

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

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

すべてのパーティションのサイズは/proc/partitions。次のコマンドは、sdxのサイズ(KB単位)を表示します。

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))

ドライブの最後に到達するためにシークを使用すると、非常にうまく機能します。

seek = $((blockdev --getsz /dev/sda-2048))

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

3
J Akers

hdparm -v /dev/sdxを使用して、ディスク上のセクター数を取得できます。 number_of_sectors-2048(512バイトのセクターを想定)にシークしてみてください。

2
user591

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のブロックサイズを使用していません。

あるいは、lseek関数をSEEK_ENDおよび1MBの負のオフセットで呼び出す小さなCプログラム(またはスクリプト)を記述してから、writeを呼び出すこともできます。

1
maxschlepzig