擦除硬盘的最后 1MB

擦除硬盘的最后 1MB

是否有一个简单的命令可以用来将硬盘驱动器的最后 1MB 清零?

对于驾驶的开始,我会dd if=/dev/zero of=/dev/sdx bs=1M count=1。 dd 的选项seek看起来很有希望,但是有人有一种简单的方法来确定我应该寻求多远?

我有一个硬件 RAID 设备,它将一些 RAID 配置存储在驱动器的末尾。我需要 RAID 设备将驱动器视为未配置,因此我想删除 RAID 配置,而不必花时间完全擦除驱动器。我有十几个 2TB 驱动器,完全擦除所有这些驱动器需要很长时间。

答案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。以下命令显示大小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))

答案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 的块大小来避免舍入错误。

或者,您可以编写一个小型 C 程序(或脚本),它使用1mb 的负偏移量调用该lseek函数,然后调用.SEEK_ENDwrite

相关内容