我有一个带有 NTFS 文件系统的外部 USB 磁盘。
如果我从 Windows 中删除文件并运行几个“取消删除”实用程序之一(例如 TestDisk),我可以轻松恢复该文件(因为“它仍然存在,但已标记为已删除”)。
如果我从 Linux 中删除该文件,则任何实用程序(除非我使用基于深度搜索签名的实用程序)都无法恢复该文件。为什么? Linux的NTFS文件系统代码中unlink是如何实现的?看起来它不仅“将其标记为已删除”,而且还擦除了一些磁盘上的结构,是这种情况吗?
答案1
出于好奇,我查看了 ntfs3g 源代码。
ntfs_delete(...)
中似乎定义了一个函数dir.c
,它可以执行删除操作。
它肯定会从文件系统结构中删除所有已删除文件/目录的元数据。
由于微软自己的版本的源代码不可用,我只能尝试做出有根据的猜测它是如何执行删除的。
看来,微软只是将 MFT 条目标记为未使用,因为取消删除实用程序能够恢复已删除文件的位置和名称。
答案2
我不知道 Windows 和 NTFS 的特殊性,但在 Unix/Linux 文件管理器 GUI 和 Mac OS X Finder 上执行此操作的常见方法是不实际删除文件,而是将其移动到名为 Trash 的特殊隐藏文件夹(或相似的)。取消删除命令从该“垃圾箱”文件夹中检索该文件。
rm
根据用户的要求,只需删除文件而无需理会垃圾文件夹。