每当我出售驱动器时,我都会使用来自现场环境的碎片将其归零一次:
sudo shred -vzn 0 /dev/sdX
Run Code Online (Sandbox Code Playgroud)
在我仔细检查之前,它没有安装。这是我所知道的安全擦除驱动器的最快方法。现在我听说这对 SSD 不利。有没有办法安全地擦除同样快或更快的 SSD?
从理论的角度来看,我理解您需要覆盖整个卷才能使恢复变得不可能。所以我不知道有什么方法可以减轻 SSD 的压力。有人告诉我一次通过根本不会减少 SSD 的使用寿命。
会cat /dev/zero > /dev/sdX一样快吗?
我不是在这里处理敏感数据,也不需要保护驱动器免受知识渊博的人不遗余力地恢复数据的影响。快速是我所需要的,同时又不会减少 SSD 的使用寿命。
编辑:这是否适用于 SSD 就像适用于 HDD 一样?
dd if=/dev/urandom of=/dev/sdc bs=1M count=2
Run Code Online (Sandbox Code Playgroud)
dir*_*rkt 31
将块写入 SSD不会覆盖旧块。那是因为所有最近的 SSD 都使用称为“磨损均衡”的东西。
要将块写入SSD,需要先将其擦除,然后才能写入新数据。但擦除是一种只能执行有限次数的操作;每次进行擦除时,都会“削弱”硬件,直到无法再正确擦除该块。
因此,磨损均衡不是擦除和覆盖同一个块,而是让 SSD 选择一个不同的、未使用的块,并将写入该块,将旧块上的数据留在原地。
如果旧块上的数据就位,这意味着它仍然可以读取。
因此,您可以用来“覆盖”文件(、、、等等)的任何命令都有这个弱点:它实际上根本不会覆盖文件,而是将零、随机数据或其他任何内容写入新块。cpddcatshred
因此,与 HD 不同的是,这不是确保您的数据消失且其他人无法读取的好方法。
所有这些命令对 SSD 来说都是“不好的”,因为任何写入都会耗尽 SSD 的有限写入次数,从而缩短 SSD 的使用寿命。并且shred特别糟糕,因为它会反复覆盖文件。在 HD 上,这有一个目的:读写头永远不会完全居中,因此多次覆盖它可以确保(或试图确保)在轨道边界处没有剩余的磁数据可以使用由知识渊博的人重建数据。
至于blkdiscard,它调用fstrim,它使用 ATAPI 修剪位告诉驱动器不再需要该块。您可以在ACS-4 规范中找到更多详细信息。
但同样,这并不安全:它只告诉 SSD 将此块放在空块列表中并且可以重复使用。SSD 可以选择立即擦除这个块,或者在它空闲的某个时间,甚至在下一次写入这个块之前。因此,这也不是确保您的数据消失的安全方法。
引入 TRIM 的原因是 SSD 无法确定文件系统是否仍在使用带有数据的块。这意味着即使文件系统已停止使用它,也无法将其添加到用于磨损均衡的池中。TRIM 从来都不是擦除块的安全方式。
正如评论中提到的,有一种方法可以安全地擦除整个SSD。但是,如果您只想安全地擦除单个文件,那可能不是您想要的。
那么您的用例的解决方案是什么?如果真的
我不是在这里处理敏感数据,也不需要保护驱动器免受知识渊博的人不遗余力地恢复数据的影响
那么你就可以使用rm. 恢复ext4文件系统上已删除的文件实际上需要相当多的知识和努力,尤其是在此期间该文件系统发生了更多写入的情况下。这是可行的,但不是任何人。它当然是最快的变体。
下一个最好的是blkdiscard(它只适用于支持 TRIM 的 SSD,但对于现代 SSD 来说应该是这样)。虽然这不会使它安全,如上所述,但现在标准已经提高到可以直接访问 SSD 的人。没有必要的特殊硬件,没有人可以做到这一点。
以任何方式覆盖文件仍然是最糟糕的:重建的门槛与上述相同,但这样做会缩短 SSD 的使用寿命,而且无论使用哪种命令,它都会花费更长的时间。
Art*_*nov 29
这是我所知道的安全擦除驱动器的最快方法。
对于 SSD,不,不是。
blkdiscard /dev/device 速度快了数十倍,并且对于您的用例应该同样安全。
cat /dev/zero > /dev/sdX 会一样快吗?
从它的外观来看,这两个命令应该同样快。
快速是我所需要的,同时又不会减少 SSD 的使用寿命。
您甚至可以通过向其写入零来缩短 SSD 的使用寿命。零仍然是数据。
小智 10
如果完全支持,我建议使用带有 hdparm 的安全擦除:
https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase
这有关于擦除 SSD 的分步说明
不仅是shred擦除 SSD 的糟糕工具,而且无法按预期工作。正如其他人指出的那样,覆盖 SSD 上的特定数据块通常是不可能的,因为磨损均衡意味着“覆盖”的块不一定会实际写入相同的物理硬件存储单元。因此,没有必要为文件系统或逻辑设备级别的“覆盖”而烦恼。
如果您只想清除驱动器的文件分配状态,最快的选择是简单地清除分区表并完成它。该设备似乎是空的。当然,使用恢复软件恢复整个内容是微不足道的。
假设你想稍微更彻底,blkdiscard是更有效地重新分配所有块SSD上的一个选项。并且在最近的迭代中,它获得了一些操作模式,可以解决绕过自动重定向逻辑的需要,这些逻辑通常会使 SSD 数据块难以明确定位/追踪。
有选择地引用blkdiscard(8)util-linux 2.35.2的手册页(包含在 Fedora 32 中):
OPTIONS
-s, --secure
Perform a secure discard. A secure discard is the same as a
regular discard except that all copies of the discarded blocks
that were possibly created by garbage collection must also be
erased. This requires support from the device.
-z, --zeroout
Zero-fill rather than discard.
Run Code Online (Sandbox Code Playgroud)
因此,blkdiscard -z /dev/sd#应该首选dd if=/dev/zero …util-linux 的最新版本。(该--zeroout选项已在 util-linux 2.28 中添加。)但对于所有 SSD 的存储单元,它仍将计为一个写入周期。
如果硬件支持,这blkdiscard -s /dev/sd#将是确保丢弃操作扩展到设备上所有可能数据位置的最佳方法,包括任何可能保存可寻址数据块的垃圾收集副本的位置。
(我不知道是否blkdiscard -s -z /dev/sd#是合理/有用的标志组合;手册页在这一点上不清楚,我当然不会在我正在使用的 SSD 上尝试它。)