在 Linux 中重新分区时,清除 SSD 的所有分区的最快方法是什么?

在 Linux 中重新分区时,清除 SSD 的所有分区的最快方法是什么?

我想清除 SSD 的所有分区和数据,以便我可以重新对其进行分区(这不是出于安全目的)。

我已经看过了,sudo dd if=/dev/zero of=/dev/sdb bs=1M但如果这只是用零填充每个分区,我不确定这是我想要做的。

我计划经常运行此命令,并且不想耗尽我的 SSD 写入能力。有人能给我一些建议来解决这个问题吗?

答案1

在 SSD 上:您可以使用 TRIM 整个磁盘或分区blkdiscard。它不是很安全,但实际上是即时的(磁盘只是将所有单元标记为未使用)。

对于 SATA SSD,ATA“安全擦除”命令(可通过 获得hdparm)也非常快。还有“增强型安全擦除”,它(至少在我使用过的 SSD 上)需要多花几秒钟,并且似乎可以物理擦除所有单元。

为了安全:使用全盘加密。如果磁盘已加密,则无需擦除整个磁盘 - 只需擦除包含密钥的区域(例如,每个加密分区的前 1-2 MiB)。

对于重新分区:再次强调,不要费心擦除所有数据。您只需使用 销毁文件系统wipefs,然后清理磁盘的前 1 MiB 以清除剩余的引导加载程序。使用 格式化分区后mkfs,操作系统将简单地假定它是完全空的。

(事实上​​,在 Linux 上,mkfs.ext4 会在格式化之前自动对整个分区进行 TRIM。)

答案2

卡米尔·马乔罗夫斯基提及删除全部的磁盘,方法是使用 ATA“安全擦除”命令。这将指示硬件执行一次完全擦除,而不是像使用 等工具那样反复覆盖单元shred。这只能针对整个磁盘执行,如果您需要有选择地擦除分区,请参阅gravity 的回答blkdiscard

该命令的具体实现取决于硬件。

  • 大多数固态硬盘将使用大量电信号以“全有或全无”的方式擦除整个芯片。这确实会导致(正常)写入磨损,但程度可能最小(~ 单个写入周期)。

  • 自加密 SSD 通常只会擦除控制器芯片内的加密密钥(真的是瞬间完成)。自加密驱动器总是加密,即使是开箱即用(使用出厂默认密钥)。因此,即使未设置用户密钥,擦除密钥也只会在闪存芯片上留下无法解密的混乱信息。

  • 旋转锈蚀硬盘将对所有扇区进行基于硬件的零写入,这与执行 等效(并且同样耗时)dd if=/dev/zero

该过程在此处有很好的记录:https://www.thomas-krenn.com/en/wiki/SSD_Secure_Erase (我在自己的 SSD 上重新安装操作系统时曾多次使用过此过程)

编辑:如果你对安全隐患感兴趣:请查看 Security.SE 的问题

答案3

请记住,您已经要求提供如何快速擦除磁盘的解决方案,将 /dev/sdx 替换为您的磁盘,最有可能是 /dev/sda

这将擦除分区表。

dd if=/dev/zero of=/dev/sdx bs=1024 count=50

这将擦除整个磁盘,并需要一段时间。

cat /dev/zero > /dev/sdx

相关内容