如果我“粉碎”(这是一个 Linux 实用程序 / 命令)一个 SSD,数据还能恢复吗?
答案1
答案是“也许”,但最好假设“是”。
当您覆盖固态硬盘上的现有文件时,处理磨损均衡的特殊驱动程序通常不会真正覆盖旧数据所在的确切位置。这是因为固态硬盘只能在保存该位置的单元磨损之前有限次数地写入同一位置。因此,磨损均衡驱动程序不会覆盖旧位置,而是会查看驱动器上哪些位置磨损较少,并将其映射到您要覆盖的位置。旧的、被覆盖的数据本身会被重新映射到未使用的位置。
这有点过于简单了。这种重新映射并不总是会发生,不同的 SSD 设备处理这个问题的方式也不同,这取决于操作系统是否知道它是固态硬盘。但你永远不能假设覆盖任何单个文件会导致该文件的数据在任何 SSD 上被破坏,这包括 MicroSD 卡、USB 棒和其他便携式固态设备。
删除最旧的“已删除”数据的最佳方法是用随机数据填充驱动器的所有未使用空间。如果填充驱动器上所有未使用空间,则最有可能覆盖之前删除的所有内容。但这有两个注意事项。首先,这会对驱动器造成很大的磨损。您将驱动器上每个单元的写入次数减少一次。另一个注意事项是,您不一定会通过这种方式删除所有旧数据。这是因为许多固态驱动器(包括大多数更好的固态驱动器)都有一些未显示给用户的额外空间。保留这些额外空间以重新映射到几乎磨损的单元的位置。然后,当重新映射时,旧单元将被永久映射,但它仍然保留着之前的内容。获取这些数据很困难,但通常并非不可能。许多制造商都有专有的方法来查看重新映射的内容,并且可以获取这些旧数据。现在,一个单元在存储敏感数据后立即停止服务的可能性可能很低。这完全取决于驱动器上有多少敏感数据。但可能性并非为零。
有两种常规方法可以覆盖驱动器上已删除的旧数据。您可以通过简单地创建一个文件(该文件会逐渐增大,填满文件系统上的所有空白空间)来非破坏性地覆盖驱动器上的旧数据(对文件系统和驱动器上的当前文件)。您可以通过从头到尾用随机数据填充该驱动器的块设备来破坏性地覆盖驱动器上的旧数据。
非破坏性: 在 Linux 中,您可以像这样执行非破坏性方法:
$ dd if=/dev/urandom of=random.bin
您可能需要以 root 身份执行此操作,以便覆盖文件系统的保留部分。这会耗尽文件系统上的所有可用空间,因此当您在根文件系统上执行此操作时,可能会产生后果,例如 syslog 无法再写入日志。不过,这通常不会造成灾难性的后果,如果您在重新启动后快速删除 random.bin 文件,通常就可以了。更谨慎的方法是先从实时 CD/DVD/USB 启动,然后安装您的 SSD 文件系统并在其中执行上述操作。如果 SSD 上有多个文件系统,则需要先对所有文件系统执行此操作,然后再删除其中任何一个文件系统上的 random.bin。
破坏性: 这种方法比较简单,而且好处是,它是您在驱动器遭受物理损坏的情况下可以使用的最完整方法。从实时 CD/DVD/USB 启动,然后一旦确定 SSD 的物理设备是什么,就可以使用:
$ dd if=/dev/urandom of=/dev/sda bs=1M
/dev/sda 被替换为您的 SSD 设备。不过,执行此操作后,您必须重新创建所有分区。在 SSD 上创建分区时,有时会出现问题,以确保它们与设备的内部存储单元和块大小正确对齐,因此请仔细研究这一点。
有人提议就地加密驱动器然后销毁密钥作为擦除驱动器的替代解决方案。这种方法充其量也并不比上述破坏性方法好,最坏的情况下可以恢复驱动器的几乎全部内容。可能的问题是,某些加密产品默认不会用随机数据覆盖可用空间,或者无法关闭此功能,它们不一定会覆盖现有分区之间或驱动器末尾的空闲空间。
简而言之,没有 100% 可靠的方法可以确保任何 SSD 上的敏感数据被覆盖。确保不会从固态硬盘中提取敏感数据的唯一方法是物理销毁它。我的意思是确保每个内存芯片中间的实际硅片都被破坏。有专门为此设计的驱动器粉碎机。高温燃烧也是有效的。
必须指出的是,几乎所有这些麻烦都可以通过预防来避免(或至少减轻)。从一开始就使用全盘加密系统,这样就不会将任何未加密的数据写入驱动器,这是迄今为止确保数据最安全的最佳方法。即便如此,在驱动器的 EoL 时,我仍然建议对驱动器进行物理销毁或使用上述破坏性方法。
答案2
所有较新的 SSD 磁盘都包含低级“修剪”功能。基本上,低级命令中指定的块会导致 SSD 对这些块进行“垃圾收集”,从而使已删除的内容无法访问且无法恢复。
安装的 SSD 磁盘将在 Windows 系统(可能是 7 及更高版本)中对已删除文件空间执行修剪功能。我相信可以使用注册表项禁用此功能。
与 Windows 不同,在 Linux 中,您必须使用名为 的特殊挂载选项discard
来在 SSD 驱动器上执行“修剪”功能。但是,这可以通过命令fstrim
结合定期完成cron
。
如果问题是如何使已删除的空间无法恢复,那么使用 SSD 上的“修剪”功能似乎是一个开始。