我有一个旧的文件系统备份,我制作并压缩到一个 squashfs 中。它存储在 ext4 文件系统上,我怀疑它遭受了一些位腐烂。我没有该文件的备份。有什么办法可以拯救这个squashfs档案吗?
$ unsquashfs olddrive.sfs
Can't find a SQUASHFS superblock on olddrive.sfs
编辑:添加信息
$ file olddrive.sfs
olddrive.sfs: data
$ sudo mount -t squashfs -o ro olddrive.sfs /tmp/sq
mount: /tmp/sq: wrong fs type, bad option, bad superblock on /dev/loop10, missing codepage or helper program, or other error.
编辑:有趣的是,在文件上运行 hexdump 显示它完全以零开头。也许从磁盘读取文件有一些坏扇区,它们被零替换了?
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0000060 8008 0000 0010 0008 0000 37fd 587a 005a
0000070 0100 2269 36de c003 ffa5 8003 4080 0121
0000080 0010 e48c b888 59ef efe8 5dfe 7500 0d80
0000090 8c81 25e2 b847 a0cc 766a b649 c919 3768
结论:
我尝试将另一个好的squashfs 头部的几个字节复制(覆盖)到损坏的squashfs 中,但没有成功。看来我损坏的 squashfs 的头部有 96 个零字节。超级块似乎没有冗余数据,因此如果它被破坏,那么存档就会丢失。如果只有几个字节损坏,那么用户 K-att- 的解决方案可能已经解决了问题。
对于任何希望防止此类损坏/丢失的人,我建议使用par2
(Parchive)。我以前不知道par2
,但它可以创建一个小文件,能够从最小损坏的文件中恢复(当驱动器扇区损坏时)
答案1
尝试使用任何十六进制编辑器检查该文件。 (例如hexedit)您可以尝试将前四个字节更改为0x73717368(68 73 71 73 -> hsqs)。 (当然要备份文件。) https://dr-emann.github.io/squashfs/ 您使用哪个版本的squashfs?