我怎样才能仅添加尚未被开发/清零的驱动器的最后一部分

我怎样才能仅添加尚未被开发/清零的驱动器的最后一部分

我定期添加一个驱动器来擦除它们以进行 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

相关内容