我有一个 6.3G 文件系统转储,我一直尝试使用 squashfs 进行压缩,但使用后unsquashfs
,生成的文件与原始转储不同。
我使用以下命令生成了原始文件与 squashfs 系统中的文件之间的差异:
cmp -l /media/daboross/extstorage/backup-2014-12-05/sda7_backup.img \
/media/daboross/disk/sda7_backup.img \
| gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}' \
> diff.txt
其中/media/daboross/extstorage/backup-2014-12-05/sda7_backup.img
是原始文件,/media/daboross/disk/
是 squashfs 文件的挂载。请参见https://superuser.com/a/125408此命令的来源。
这是生成的差异文件:http://sprunge.us/BFPS。这其中可能存在一些可以帮助诊断问题的模式,我不确定它会是什么,但以防万一还是包括这个。
如果有任何有用的信息,请随时询问。我目前没有生成该差异文件的 squashfs 文件系统,但mksquashfs
如果需要,我可以再次运行 - 它一直在创建一个不一样的文件。
mksquashfs/unsquashfs 的版本(来自 squashfs-tools):
mksquashfs version 4.2-git (2013/04/07)
unsquashfs version 4.2-git (2013/03/13)
非常感谢您对为什么会发生这种情况或我能做些什么来提供帮助的任何想法。
编辑/更新:
从 Ubuntu 随附的 squashfs-tools 版本升级到 squashfs v4.3 后,我仍然收到错误,但没有那么多。
运行上述二进制差异命令将产生使用 v4.3 压缩和解压缩的文件的结果:http://sprunge.us/DDAM。
如果你查看二进制 diff 文件,你会发现使用 v4.3 生成的 diff 文件与使用 4.2-git 生成的文件的最后一部分完全相同。我猜这可能意味着部分部分损坏问题已在 v4.3 中修复,但并非全部。
答案1
显而易见的观点——您抱怨 Unsquashfs 正在生成不同的文件,但随后通过安装 Squashfs 文件系统并进行比较来证明这一点......
如果错误出现在 Unsquashfs 中,您会期望挂载文件系统能够正常工作(给出正确的输出)。如果 Unsquashfs 和挂载都不起作用,那么错误(如果有的话)很可能出现在 Mksquashfs 中。
mksquashfs/unsquashfs 的版本(来自 squashfs-tools):
mksquashfs 版本 4.2-git(2013/04/07)
unsquashfs 版本 4.2-git(2013/03/13)
这些看起来像是我的 git 开发树的快照(它们在版本中有 -git)。
当开发代码处于不一致状态或存在临时错误时,它们可能已被快照。
您应该尝试 squashfs-tools 的发行版本。Squashfs-tools 4.3 于今年发布,您应该尝试一下。然而,它有一个已知错误,在某些情况下会导致错误的文件系统(于 2011 年 9 月推出),但这看起来不像您遇到的错误。
根据上述 Squashfs-tools 4.3 是否有效,您还应该尝试早期版本的 Squashfs-tools 4.2(从 2011 年开始)以及来自 git 的最新开发版本(其中已修复一个已知的文件系统损坏错误)。
可以从以下位置获取发布 tarball 和 git 开发树