我正在制作一个主 SSD,它将被复制到其他驱动器,然后交付给客户。我需要确保客户无法恢复主驱动器上已删除的文件。
对于旋转磁性硬盘,我会用零覆盖所有可用空间。但是,对于 SSD,我听说这要么是不必要的(因为 TRIM 会释放未使用的块),要么是不够的(因为客户会拆焊闪存芯片并获取管理系统后面的原始块)。
我不关心我的专有文件是否保存在隐藏的、已换出的闪存块中;我只关心磁盘克隆工具会看到什么。我认为任何重复使用的块中的旧数据都将被删除。
仅供参考,我正在使用最新版本的 openSUSE。
(这个问题与以下任何一个问题都不重复:
- 永久删除 SSD 上的文件:答案集中在黑帽拆卸驱动器的危害上
- 如何安全删除存储在 SSD 上的文件?:同上
- 安全删除 SSD 上的文件的原理是什么?:同上
- 如何安全地擦除 SSD?:擦除整个驱动器;我只想清理空白空间
- 在不支持 trim 命令的情况下,清理 SSD 驱动器是否可以完全删除已删除的文件?:问题假定 TRIM 不可用)
这将是一个可启动的 openSUSE Leap 15.* 驱动器。我一直使用Clonezilla进行克隆,效果很好。
使用文件系统感知克隆。例如,
partclone
了解ntfsclone
某些文件系统使用的“可用空间映射”,并且可以简单地跳过克隆文件系统认为未使用的块。因此,如果您删除了一些文件,ntfsclone 甚至不会查看它们曾经所在的扇区。(尽管主要目标是性能 - 而不是隐私 - 因此这些工具可能不是 100% 准确;它们可能仍会复制“已使用”区域周围的一些“可用”扇区。)对于 Linux,您可以使用cp -a
或pax -io
或 rsync。如果可以的话,请使用文件级复制而不是块级克隆。例如,Windows 具有带有 .wim 映像的 DISM,这是在后台完成全新 Windows 安装的方式,也是正式用于创建自定义映像的工具。(也就是说……只要文件数量不超过“全新 Windows 安装加上几 GB”,因为超过这个点,速度就会变得非常慢。)
磁盘克隆工具看到的存储逻辑“视图”与操作系统看到的完全相同。
磁盘向计算机公开的唯一常规接口是通过 LBA(逻辑块或扇区地址)进行读取/写入。计算机无法直接指定要读取的物理闪存位置;它总是经过相同的重新映射过程(对于 HDD 也是如此,当它们将 LBA 从坏的物理扇区重新映射到备用扇区时)。
因此,如果您用零覆盖给定的逻辑扇区(例如,如果您在删除文件之前“粉碎”它),那么从该逻辑扇区进行的所有进一步读取尝试都将返回零,并且对于写入该扇区的任何其他数据也是如此。(这基本上是磁盘的一项工作:您将数据写入位置 X,然后从位置 X 返回相同的数据。)
即使旧的物理位置没有被覆盖(假设它是 SSD),计算机也无法访问它——指定相同 LBA 的每个命令总是会引用新的物理位置。
类似地,如果您发出 TRIM/DISCARD/UNMAP 命令并且磁盘的固件在从未映射区域读取时返回零,那么它也会向磁盘克隆工具返回完全相同的内容。
一些 SSD 可能有隐藏的命令(制造商特定的)来通过物理地址读取,但无论如何,了解这些命令并拥有使用它们的软件可能与拆卸闪存芯片处于同一水平。