在将硬盘赠予他人之前,我需要先将其擦除,但我希望能够分段擦除,以便可以在中间的不同时间点停止并继续。例如,如果擦除磁盘需要 24 小时,但我每晚只有 6-8 小时的空闲时间,那么我希望将 USB 硬盘插入笔记本电脑进行夜间擦除,第二天早上拔下电源并带走笔记本电脑,然后在第二天晚上继续擦除,直到完全完成。
dd
我在 Linux 终端上使用例如
$ nohup dd if=/dev/zero of=/dev/sdX bs=1M &
我最初的想法是简单地用 来监控其进度kill -USR1 ${ddpid}
,跟踪它,然后在中断后从上次中断的地方继续。但我很快就不喜欢这种方式,因为第一次尝试时我就搞砸了数学,还浪费了时间重新擦拭已经擦拭过的区域。
我现在正在考虑预先对驱动器进行分区,然后一次擦除一个分区或一次擦除几个分区。由于它是 4 TB 的磁盘,我无法使用 超过 2 TB 的边界fdisk
,因此我过去常常gdisk
创建新的分区:
Device Start End Sectors Size Type
/dev/sdb1 2048 589826047 589824000 281.3G Linux filesystem
/dev/sdb2 589826048 1179650047 589824000 281.3G Linux filesystem
/dev/sdb3 1179650048 1769474047 589824000 281.3G Linux filesystem
/dev/sdb4 1769474048 2359298047 589824000 281.3G Linux filesystem
/dev/sdb5 2359298048 2949122047 589824000 281.3G Linux filesystem
/dev/sdb6 2949122048 3538946047 589824000 281.3G Linux filesystem
/dev/sdb7 3538946048 4128770047 589824000 281.3G Linux filesystem
/dev/sdb8 4128770048 4718594047 589824000 281.3G Linux filesystem
/dev/sdb9 4718594048 5308418047 589824000 281.3G Linux filesystem
/dev/sdb10 5308418048 5898242047 589824000 281.3G Linux filesystem
/dev/sdb11 5898242048 6488066047 589824000 281.3G Linux filesystem
/dev/sdb12 6488066048 7077890047 589824000 281.3G Linux filesystem
/dev/sdb13 7077890048 7667714047 589824000 281.3G Linux filesystem
/dev/sdb14 7667714048 7814037134 146323087 69.8G Linux filesystem
我正在dd
从 sdb14 向后运行到 sdb1,这样我就能保持一切顺利。
当我完成每个分区时,我考虑返回 fdisk/gdisk 并删除该分区,即使整个磁盘没有被擦除。
完成所有分区后,我计划擦除磁盘的开头部分:
$ dd if=/dev/zero of=/dev/sdX bs=1M count=512
(我知道 512 有点太多;请在评论中提供一个更好的数字。)
这是否可以实现我的目标,即一次擦除整个磁盘,而不在任何地方留下任何遗漏的间隙?
答案1
关于磁盘的开头。第一个分区从扇区开始2048
。扇区从开始编号0
。提供的gdisk
输出没有明确说明,但我可以计算出您的磁盘使用大小为的扇区512B
。因此,在第一个分区之前有字节2048
的扇区512
。此命令将用零填充它们:
dd if=/dev/zero of=/dev/sdX bs=512 count=2048
这是否可以实现我的目标,即一次擦除整个磁盘,而不在任何地方留下任何遗漏的间隙?
我已经分析了这些数字——分区之间没有间隙。但是!GPT 方案将备份分区表放在磁盘的最末端,它占用33
扇区。此外,分区工具可能会以某种方式对齐最后一个分区的末尾(尽管奇数146323087
表明这里不是这种情况)。因此,您还应该覆盖最后一个分区之外的这个空间:
dd if=/dev/zero of=/dev/sdX bs=512 seek=7814037135
预计该命令将几乎立即到达磁盘末尾。
磁盘操作使用缓存,因此您应该sync
在完成所有这些操作后再运行。通常,当您正常关机时,所有缓存都会被刷新。但是,如果您较早断开磁盘(拔下 USB),某些更改可能会丢失。希望您在擦除特定分区后从未以这种方式断开连接。
此后,您的整个磁盘将被清零。这应该足够了(阅读这和这)。如果磁盘是 SSD,可能会因为磨损均衡而出现一些问题;但我猜这里的 4 TB 是 HDD,所以没有问题。
答案2
@KamilMaiorowski 解决方案的另一种替代方案是在 /dev/sdX 上创建一个文件系统,然后在其中写入空文件。这样,您可以中途停止,然后随意继续,方法是附加到文件或写入新文件。一旦磁盘空间不足以容纳更多文件,您就完成了。完成后,您还可以从磁盘中删除文件。
要执行此操作(从可启动磁盘)
mkfs.ext4 /dev/sdX
mkdir /tmp/tempdisk
mount /dev/sdX /tmp/tempdisk
dd if=/dev/zero of=/tmp/tempdisk/file0.zero