我想问一下由于 USB 记忆棒/SSD 磁盘的加密分区上的磨损均衡而导致数据丢失的可能性。
让我们考虑一下这种情况:我在闪存驱动器(棒/磁盘)上创建一个 truecrypt 分区并将敏感数据放在那里。同一磁盘的另一个非加密 ntfs/ext4 分区用于定期交换文件。
当我查看磁盘分区(例如使用 parted、fdisk 等)时,加密分区看起来就像未使用的,没有文件系统。文件系统仅在解密后弹出。未安装时,加密分区看起来一定像是曾经写入的空闲扇区的随机杂乱。
那么问题是 - 磁盘本身(其磨损均衡机制)如何区分空闲扇区和已使用扇区?如果我正确理解了磨损均衡,它会根据写入次数将物理扇区重新映射到逻辑扇区。如果我再次在普通分区上复制一个大文件,那么加密分区中的空闲物理扇区将由于写入次数少而被重新映射到属于普通分区的逻辑扇区,并用于保存新文件。
我对这个话题进行了一些研究,但没有发现大量抱怨此问题的帖子。
我的假设哪里错了?
答案1
磁盘本身不知道文件系统是什么。磁盘通过一些永远不会离开磁盘的元数据知道哪些内部块被使用,哪些没有被使用,而操作系统完全不知道它们。
您混淆了两种不同的“空闲扇区”概念,它们出现在不同的机器的不同级别上。磁盘本身通过许多内部“块”工作;使用这些块,磁盘可以维护逻辑将磁盘空间视为一长串字节(通常分成连续的部门)磁盘会在内部将磁盘空间划分到各个块上,并通过一些冗余、重新排序、动态副本等智能算法来分散磨损,从而减少故障发生的频率,这就是“磨损均衡”。
操作系统只能看到扇区,扇区的大小不一定与块的大小相同(实际上,闪存块的大小往往在 16 到 64 kB 之间,而扇区通常为 512 字节),并且磨损均衡对操作系统是隐藏的。操作系统使用一些扇区来编码文件系统结构,这些结构将其他扇区标记为“空闲”或“正在使用”。从操作系统的角度来看,如果扇区不再包含任何有用的内容(例如,它是文件的一部分,但该文件已被删除),则扇区是“空闲”的;而从磁盘的角度来看,如果块从未被写入,或者磨损均衡算法已将其内容复制到其他块,并且该块可以在内部重复使用,则该块是“空闲”的。
如果某个扇区已被写入,则数据会进入 SSD 块;如果相应的文件被删除,则从操作系统的角度来看,该扇区是“空闲的”(操作系统将允许自己将另一个文件的内容写入该扇区),但对于 SSD 来说,这仍然是必须保留的数据 - 并且它确实会保留它。
需要考虑的一个有启发性(或没有启发性)的特征是TRIM 命令。这是一个 SATA 命令,操作系统可以通过该命令通知磁盘,给定范围的扇区被视为“空闲”(由操作系统决定),从而允许磁盘不是以保留其内容,直到下次写入。当操作系统对某些扇区进行 TRIM 处理后,直接读取扇区(从设备,绕过文件系统层)理论上可能会返回不同的数据字节,具体取决于磁盘内部管理的方式。“TRIM”是文件系统中的“空闲扇区”和物理介质中的“未使用块”实际上可以相互关联的唯一方式。否则,它们是完全独立的概念。