如何在 Linux 中使用 shell 命令用随机数据覆盖超大硬盘(18TB)

如何在 Linux 中使用 shell 命令用随机数据覆盖超大硬盘(18TB)

我想用随机字节覆盖一个非常大的硬盘(18TB),然后检查智能数据是否存在重新分配的扇区或其他错误。

由于 badblocks 对一次运行中可处理的块数量有一些限制,我尝试了 archlinux wiki 上描述的“cryptsetup 方法”:

https://wiki.archlinux.org/title/Badblocks#Finding_bad_sectors

我在整个驱动器上设置了一个加密的逻辑设备域,然后使用命令“shred”将零写入打开的域设备:

cryptsetup open /dev/device eld --type plain --cipher aes-xts-plain64
shred -v -n 0 -z /dev/mapper/eld

它继续打印如下行:

shred: /dev/mapper/eld: pass 1/1 (000000)...870MiB/17TiB 0%
shred: /dev/mapper/eld: pass 1/1 (000000)...1.7GiB/17TiB 0%
...
shred: /dev/mapper/eld: pass 1/1 (000000)...4.1TiB/17TiB 24%

但随后它在写入 4.1TiB/17TiB 时停止了。我已使用 hexdump 验证了这一点,在字节地址 0x428249b0000(4570459340800 ~ 4.156 TiB)以外没有写入零:

hexdump -C  --skip 0x428249a0000 /dev/mapper/eld | head
428249a0000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
428249b0000  b3 cd d0 34 72 15 f2 2c  f6 32 90 fb 69 24 1f ec  |...4r..,.2..i$..|
428249b0010  a0 f4 88 a5 56 e7 13 82  94 e5 e0 f5 37 da c3 59  |....V.......7..Y|
428249b0020  9b 55 9f d8 39 a1 41 dc  52 ca 7b 3a 95 f5 59 e2  |.U..9.A.R.{:..Y.|

许多标准命令似乎在处理大容量磁盘时存在问题,因为所涉及的数字对于 32 位数据类型来说太大。Linux 上的哪些读/写工具能够可靠地读取/写入超出这些 2TiB、4TiB 假想边界的值?

答案1

编辑:根据评论更新

我只需使用

dd if=/dev/urandom of=/dev/sdX bs=1M status=progress iflag=fullblock oflag=fullblock

/dev/sdX是硬盘的设备。

答案2

我没有使用 cryptsetup + shred,而是使用了 cryptsetup + pv(cat 也可以代替 pv,但是它不会提供任何进度信息),并将 stdin 指向 /dev/zero:

cryptsetup open /dev/device eld --type plain --cipher aes-xts-plain64
</dev/zero pv >/dev/mapper/eld

这样做的好处是(与 dd 相比),不需要指定模糊的参数,并且 SATA 3.3 6Gb/s 链路上的性能良好(>200MiB/s)。

当到达终点时,pv 仍然失败,但我已经检查过,它确实用零覆盖了整个逻辑设备。这意味着 dm-crypt 用伪随机字节覆盖了整个硬盘。

现在至少可以通过两种方式检查硬盘错误:

1.在输出中查找降级的 SMART 数据(如重新分配的扇区)

smartctl -a /dev/device

2.从 /dev/mapper/eld 读取数据并检查所有读取的字节是否都为零。从 diffutils 运行 cmp 命令进行以下比较:

cmp -l -b /dev/zero /dev/mapper/eld

它要么打印第一个不匹配的字节地址并因错误退出,要么它找不到任何不匹配然后它将打印“cmp EOF on /dev/mapper/eld ...”(并且仍然因错误退出)。

不匹配意味着硬盘在该位置的记录存在永久性故障,或者可能是不会在同一位置精确重复的随机错误。

第一次运行 cmp 时,8 秒后我确实收到错误,这让我非常惊讶。SMART 数据未显示任何性能下降,系统日志未显示任何有关硬盘的错误消息。

然后我尝试再次运行 cmp 命令来检查记录错误是否真实,但该位置的不匹配没有再次发生。这是整个读取+评估过程中的一些随机错误。因此,不要依赖单次运行 cmp 命令;如果发现不匹配,请再次运行它。如果错误消失,则忽略第一个不匹配或再试一次。如果错误仍然存​​在,则将硬盘退还给卖家,因为它很可能有缺陷,并且与健康的硬盘相比,其性能随时间下降的速度可能更快。

相关内容