我在我的 USB 外置驱动器上发现了坏扇区,因此我想执行完全擦除并用零覆盖磁盘。我找到了这个命令:
sudo dd if=/dev/zero of=/dev/sd<disk-letter> bs=8M
我有一些问题:
- 块大小值是否正确,或者我应该根据磁盘是内部还是外部来设置不同的值?
- 对于笔式驱动器或 SSD 驱动器,还有其他命令吗?
- 在我删除所有分区并通过 Gparted 创建了一个新分区表后,在输入上述命令之前我是否还应该创建一个新分区(例如 ext4)?
谢谢你! :)
答案1
使用时,块大小实际上并不重要
dd
,它只会影响操作的速度。基本上,您应该使用4M
或 的倍数作为块大小。较小的块会使进程变慢,但较大的块大小通常不会真正加快速度。闪存驱动器不会像旋转磁盘的 HDD 那样产生坏块。它们由内存单元组成,每次擦除/覆盖后内存单元都会磨损。
因此,此类设备内置有控制器芯片,可充当磨损均衡器,尝试将写入均匀分布到所有单元,以使其尽可能长时间持续。通常,好的闪存驱动器和 SSD 也包含比其声明容量多得多的单元,因此即使某些单元坏了,设备仍可正常工作,因为控制器仍有足够的工作单元可供分配。
如果闪存驱动器/SSD 开始导致 I/O 错误,那么它真的快要报废了。用零覆盖所有内容并不能解决问题,额外的擦除/写入周期只会使单元磨损得更厉害。而且由于控制器的原因,你甚至不能确定(或者说,不能确定)所有单元都会被覆盖一次。它还可能多次覆盖同一个单元,而其他单元则不会,并且它可能会使用一些备用单元。
简而言之,不要将闪存驱动器或 SSD 清零。这样做没有任何帮助(甚至对于安全数据擦除也没有帮助),只会使驱动器磨损得更厉害。如果这样的驱动器开始出现 I/O 错误,请更换它。
dd if=/dev/zero of=/dev/sdX bs=4M
(作为/dev/sdX
像 这样的设备/dev/sdb
,而不是像 这样的分区/dev/sdb1
)直接在原始磁盘上操作,不考虑任何分区。使用此命令将驱动器清零会有效地清除引导扇区、分区表和所有分区。也就是说,在将驱动器清零之前做什么并不重要。您可以对其进行分区、格式化、用随机数据填充它或任何您喜欢的操作 - 最终它将全部被清除。所以只需将其保留并直接将其清零即可。