每当我出售驱动器时,我都会用现场环境中的碎片将其归零一次:
sudo shred -vzn 0 /dev/sdX
在我仔细检查之前,它尚未安装。这是我所知道的安全擦除驱动器的最快方法。现在我听说这对 SSD 不利。有没有一种方法可以安全地擦除同样快或更快的 SSD?
从理论角度来看,我知道您需要覆盖整个卷才能使恢复变得不可能。所以我不知道有什么方法可以减轻 SSD 的压力。有人告诉我,单次通过根本不会缩短 SSD 的使用寿命。
会cat /dev/zero > /dev/sdX
那么快吗?
我在这里不处理敏感数据,也不需要保护驱动器免受知识渊博的人竭尽全力恢复数据的影响。我需要的是快速,同时又不降低 SSD 的使用寿命。
编辑:会这SSD 的工作原理与 HDD 的工作原理一样吗?
dd if=/dev/urandom of=/dev/sdc bs=1M count=2
答案1
将块写入 SSD才不是覆盖旧块。这是因为所有最近的 SSD 都使用了一种称为“磨损均衡”的技术。
要将块写入SSD,您需要先擦除它,然后才能写入新数据。但擦除是一个只能执行有限次数的操作;每次执行擦除时,都会“削弱”硬件,直到无法再正确擦除该块。
因此,磨损均衡不会擦除和覆盖同一个块,而是会让 SSD 选择一个不同的、未使用的块,并写入该块,将旧块上的数据保留在原处。
如果旧块上的数据就位,则意味着它仍然可以读取。
所以任何您可以用来“覆盖”文件的命令(cp
、dd
、cat
、shred
等等)都有这个弱点:它实际上根本不覆盖文件,而是将零、随机数据或其他内容写入到文件中。新的块。
因此,与硬盘不同的是,这不是确保数据消失且无法被其他人读取的好方法。
所有这些命令对于 SSD 来说都是“坏”的,因为任何写入都会耗尽 SSD 的有限写入次数,从而缩短 SSD 的使用寿命。而且shred
特别糟糕,因为它会重复覆盖文件。在硬盘上,这有一个目的:读写头永远不会完全居中,因此多次覆盖它可以确保(或试图确保)磁道边缘没有残留的磁性数据可以使用由有知识的人来重建数据。
至于块丢弃,这称为弗斯特里姆,它使用 ATAPI 修剪位来告诉驱动器不再需要该块。您可以在以下位置找到更多详细信息ACS-4规范。
但同样,这并不安全:它只是告诉 SSD 将此块放入空且可重复使用的块列表中。 SSD 可以选择立即实际擦除该块,或者在空闲时的某个时间,甚至在下次写入该块之前。因此,这也不是确保数据消失的安全方法。
引入 TRIM 的原因是 SSD 无法确定文件系统是否仍在使用包含数据的块。这意味着即使文件系统已停止使用它,也无法将其添加到用于磨损均衡的池中。TRIM 从来都不是擦除块的安全方法。
正如评论中提到的,有一种方法可以安全地删除完全的固态硬盘。但是,如果您只想安全地删除单个文件,那可能不是您想要的。
那么适合您的用例的解决方案是什么?如果真的是的话
我在这里不处理敏感数据,也不需要保护驱动器免受知识渊博的人竭尽全力恢复数据的影响
那么你就可以使用rm
.实际上,恢复文件系统上已删除的文件需要大量的知识和精力ext4
,特别是同时该文件系统发生了更多写入的情况。这是可行的,但不是任何人都可以做到的。这当然是最快的变体。
下一个最好的方法是blkdiscard
(它仅适用于支持 TRIM 的 SSD,但对于现代 SSD 来说应该如此)。如上所述,虽然这并不安全,但现在门槛已提高到可以直接访问 SSD 的人。如果没有特殊硬件,任何人都无法做到这一点。
无论以何种方式覆盖文件仍然是最糟糕的:重建的标准与上面相同,但是这样做会缩短 SSD 的使用寿命,而且无论您使用哪个命令,都将花费更长的时间。
答案2
这是我所知道的安全擦除驱动器的最快方法。
对于 SSD,不,不是。
blkdiscard /dev/device
速度快了几十倍,并且对于您的用例来说同样安全。
cat /dev/zero > /dev/sdX 会一样快吗?
从表面上看,这两个命令应该同样快。
我需要的是快速,同时又不降低 SSD 的使用寿命。
即使向 SSD 写入零,也会缩短 SSD 的使用寿命。零仍然是数据。
答案3
如果完全支持的话,我建议使用带有 hdparm 的安全擦除:
https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
这里有关于擦除 SSD 的分步说明
答案4
编辑:这对 SSD 是否有效,就像对 HDD 一样?
dd if=/dev/urandom of=/dev/sdc bs=1M count=2
当然,这是通过写入驱动器的前 2 MB 来实现的,其中可能包括分区表和第一个分区的开头(通常从 1 MB 开始)。
您的大多数文件和任何其他分区的完整文件系统仍然存在,可以被普通计算机和普通操作系统读取,这只是有一个软件来查找它们的问题。
再加上 GPT 在驱动器末尾存储分区表的备份副本(此处不会被覆盖),并且第一个文件系统也可能可用,因为某些文件系统具有主数据结构的备份副本。
正如评论中所讨论的,这对于任何驱动器来说都是一个同样糟糕的解决方案回答你链接到。
(当然,它对于 SSD 来说就没那么有用了,SSD 甚至可能不会真正覆盖或删除这些块的旧数据,因此可以使用适当的工具/软件来恢复它们。但这与拥有大多数有趣的数据相比并不是什么大问题仍然可以通过正常方式读取。)
如果您对仅擦除分区表和文件系统感到满意,那么最好使用常规分区工具创建一个新的空分区表,并确保擦除所有分区中的所有文件系统,也许也可以通过创建新的分区表来擦除所有文件系统。那些在上面。 (SSD 的警告仍然适用,但至少恢复需要对驱动器进行调试式访问的专业知识。)