我定期添加一个驱动器来擦除它们以进行 ZFS 重新同步,当读/写或校验和错误出现问题时,将驱动器重新投入使用。通常,一开始就删除分区表不足以让 ZFS不是识别驱动器。
我想删除开头的分区表(已经知道如何做到这一点,这已经有足够的记录)和 3TB 驱动器末尾的分区表,并测试这是否有效。如何仅删除最后一个分区表(gpt)?
现在回答我的主要问题。我已经运行了dd
然后在某个时候取消了它(见下文),以测试 ZFS 是否不再识别它;这还不够——ZFS 仍然可以识别它并再次将其置于降级模式。
$ dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7
^C726443929+0 records in
726443928+0 records out
371939291136 bytes (372 GB) copied, 7997.73 s, 46.5 MB/s
所以现在我只想寻找过去的 372GB 和之后的 dev/zero,这样就不会浪费时间和硬盘寿命再次执行第一个 372GB。
我也想过这样的事情,但是没有成功。
$ dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 seek=371G
dd: ‘/dev/disk/by-id/scsi-35000c50084818db7’: cannot seek: Invalid argument
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000238797 s, 0.0 kB/s
查看文档确实是一件苦差事。该页面看起来几乎很有帮助https://wiki.linuxquestions.org/wiki/Some_dd_examples,但我在那里没有看到我需要的东西。
我只是缺少块大小,还是缺少什么为什么不起作用?我尝试添加conv=notrunc
到上面的那一行,但这没有帮助。
答案1
seek
的参数是dd
要查找的输出块的数量
如果命令中没有bs=
或,则默认为 512 字节obs=
可以看到726443928
块被写入了
最简单的解决方案是在查找中使用该数字
dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 seek=726443928
顺便说一句,您链接到的文档非常清楚地说明了这一点
Seek 跳过了很多块写入前在输出介质上
擦除辅助 GPT
辅助 GPT 表位于从磁盘末尾算起的 33 个扇区(512 字节扇区)
那么,如果fdisk -l /dev/disk/by-id/scsi-35000c50084818db7
报告
Disk /dev/disk/by-id/scsi-35000c50084818db7: 2.73 TiB, 3000592982016 bytes, 5860533168 sectors
然后你从 5860533168 中减去 33 =5860533135
并做
dd if=/dev/zero of=/dev/disk/by-id/scsi-35000c50084818db7 skip=5860533135