我在 Linux 服务器上有两份 ntfs 分区副本(旧备份)。如果我将它们挂载为循环设备,并逐个文件比较内容,则它们之间没有区别。但是,将这些映像与 cmp 或 vbindiff 进行比较时,会发现许多差异。我如何找出这些差异?可能在制作两个副本期间,Windows 中使用了原始 fs(仅用于读取),但我不记得了,并且“find . -ls”在挂载的映像上给出了相同的结果,因此文件日期/时间看起来没有变化。我想删除其中一个,但我想确定它们是否包含相同的数据,并且差异是不必要的垃圾。
答案1
如果两幅图像尚未制作成另一幅图像的直接图像,则您不应直接比较另一幅图像。
如果将文件从只读映像复制到新映像,则映像在字节级别上将会有所不同,因为文件系统上的元数据是以不同的顺序生成的。
发生这种情况的原因是文件的创建顺序不同。卷上可能有一些已删除的文件。删除文件时,只有文件系统元数据会更新,因此文件的块会标记为空闲,但它们仍将包含文件的数据。
唯一有效的比较是通过文件级比较来比较文件系统内容。用于此目的的一个好工具是rsync
使用--dry-run
选项,它仅显示rsync
在发现差异时应采取的措施。
另一个查找差异的有用工具是diff
。
答案2
我认为我已经找到了一个可能的解决方案。ntfs-3g 软件包中有一些工具:ntfscmp、ntfsinfo、ntfscat 等。
使用 ntfscmp 我可以比较 ntfs 图像并且它可以显示不同的 inode。
使用 ntfsinfo -i image_name,我可以确定该 inode 的类型以及有关它们的许多其他信息。具有不同内容的 inode 被命名为“$LogFile”——据我所知,这是 ntfs 自己的日志。
解决方案:图像之间没有真正的区别,也许我将它们安装为 r/w 并且......我不知道它们还发生了什么,但两个图像上的内容是相同的。