背景

(这一段是废话,可以略过。)

今天不小心把服务器上的译作“版本二之光”的所有用户的 UUID 删掉了,也没备份。忽然想起来搬瓦工好像有自动备份来着,去看了看真有。就把备份下载下来,准备恢复。但在解压备份的文件的时候,出现了问题,找遍全网也没有解决方案。后来机智的我尝试到了解决办法,记录在这里。

说这么多废话,其实我无非就是希望同样是搬瓦工的备份镜像解压不了的人可以找到这里来……

通常的处理办法

首先,确认包的哈希是否匹配。一般都是压缩包损坏的原因。

除了这个,网上还提到了几个原因:

  • 文件名中有奇怪的字符,改文件名后再解包。
  • 文件太大,先 gzip -d xxx.tar.gz,再 tar -xf xxx.tar

然而,这些都没有解决我的问题。

我找到的办法

首先 gzip -d xxx.tar.gz,这一步不会出错。

然后把 xxx.tar 丢到 Windows 下用 bandizip 解压。得到两个奇怪的文件夹:GNUSparseFile.0 和一个叫“sparse map”之类的东西。顺着这两个文件名去找资料,就找到了。

资料在这里大意是,为了减少稀疏文件的体积,把原先文件中的大片的零去掉后丢到 GNUSparseFile.x 中,第二个目录的内容则是记录去掉的零原先在哪里、有多少等信息。只需要下载 xsparse.c,然后编译、恢复即可。

1
2
3
curl -o xsparse.c http://git.savannah.gnu.org/cgit/tar.git/plain/scripts/xsparse.c
gcc -oxsparse xsparse.c
./xsparse GNUSparseFile.0/vm-1330504.disk

然后将镜像挂载上,把需要的文件拿出来就好了。