如何安全地擦除 SSD 驱动器中的文件?

Byt*_*der 18 ssd hard-drive shredding secure-erase

在尝试安全擦除 SSD 时,我们遇到了几个问题:

  • SSD 在有限的擦除周期后会磨损
  • SSD 有一个控制器,可以将 LBA(系统用于访问磁盘的逻辑块地址)动态映射到 NVRAM 单元(实际的闪存单元)以平衡磨损,这意味着告诉磁盘覆盖以前存储特定数据的块文件可能会导致覆盖任何其他备用块。
  • SSD 具有显着百分比的备用容量,用于补偿垂死的存储单元并减少磨损。它们对系统不可见,并且可能保存旧数据片段。

现在我们有哪些选项可以从 Ubuntu 内部安全地擦除 SSD?

我听说一些较新的 SSD 应该能够安全地擦除自己,但是我如何确定我的 SSD 是否能够执行此操作以及如何触发它?
还应该有一个 ATA 安全擦除命令,我如何确定它是否受支持以及如何触发它?

是否还有安全擦除给定文件或仅未使用空间的方法?
我想备份所有分区,安全地擦除整个磁盘,然后恢复备份是可能的,但听起来太复杂了,而且需要很长时间才能实用。还有其他选择吗?如果没有,我可以使用哪些工具来备份分区而不备份已删除的文件?

当然,对于上述要点,这里的标准工具类似shredwipe不可用。它们只是覆盖一个文件(通过覆盖它的文件系统集群,这些集群绑定到 LBA,由于磨损均衡控制器,LBA 不会一直指向相同的闪存单元)。

Dav*_*ter 11

目前没有办法在不擦除整个驱动器的内容或访问 SSD 固件的情况下安全地擦除 SSD 上的文件。

  • 不可能知道 SSD 可能在哪里存储逻辑块的先前副本。

  • 更糟糕的是,由于文件系统的日志记录和写时复制机制,可能无法知道哪些逻辑块可能保存特定文件的先前副本。

防止已删除文件泄露给直接访问驱动器的人的唯一方法是首先对它们进行加密并确保加密密钥不会被窥探。

附录:

我做了一些研究,发现如果您设法了解文件系统的所有未占用扇区,您可以某种方式擦除所有以前删除的文件,这通常是可能的,并且由某些文件系统工具提供(例如对于 ext* 系列) ),然后丢弃它们(例如,blkdiscard(8)链接问题的答案中所述),这将返回用于垃圾收集的块,直到它们再次被使用并在过程中被覆盖。

这对于无法直接访问闪存单元的每个人都是安全的,因此每个

  • 没有合适的闪存单元读取设备并且
  • 不能让驱动器固件显示未分配块的内容(这在大多数情况下需要对固件和自定义 ATA 命令进行有意义的修改,因为没有标准化的方法)。


Eld*_*eek 9

警告:如果尚不清楚,安全擦除驱动器将消除驱动器上的所有数据,并且无法恢复。您应该备份所有关键信息。

确定您的驱动器是否支持安全擦除的最简单方法是询问它:我在下面的示例中使用了/dev/sdX 。您需要仔细更改它以匹配您正在使用的设备:

资料来源:

https://ata.wiki.kernel.org/index.php/ATA_Secure_Erase

https://superuser.com/questions/1161531/how-to-un-freeze-drive-in-linux

$ sudo hdparm -I /dev/sdX | grep -i erase
Run Code Online (Sandbox Code Playgroud)

在我的 SSD 上,这会导致:

supported: enhanced erase
2min for SECURITY ERASE UNIT. 2min for ENHANCED SECURITY ERASE UNIT.
Run Code Online (Sandbox Code Playgroud)

如果您的设备支持安全擦除,则触发过程需要 2 或 3 个步骤。

  1. 如果设备报告它已冻结,如sudo hdparm -I /dev/sdX类似于以下内容的输出所示:
not   enabled
not   locked
      frozen
not   expired: security count
supported: enhanced erase
Run Code Online (Sandbox Code Playgroud)

通过暂停和恢复系统来解冻它。我通过命令sudo systemctl suspend 移动指针直到系统恢复来完成此操作。

  1. 您必须设置一个密码才能使用安全擦除,在本例中我使用foobar作为密码,您可以使用您喜欢的任何非空白密码,因为它是临时的。

    sudo hdparm --user-master u --security-set-pass foobar /dev/sdX

  2. 设置密码后,您现在可以使用它来安全地擦除驱动器:

sudo hdparm --user-master u --security-erase foobar /dev/sdX

如果您的驱动器支持它并且您愿意,您可以选择使用增强的安全擦除:

sudo hdparm --user-master u --security-erase-enhanced foobar /dev/sdX