是否有一个简单的命令可以用来将硬盘驱动器的最后 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_END
write