标签 ArchLinux 下的文章

记一次神奇的Manjaro文件丢失修复


事件起因

上次关闭了虚拟机之后, 手贱在Vmware里使用了"压缩磁盘以回收未使用的空间", 然后下次再启动的时候, 启动就报错了...
QQ图片20180808090659.jpg

故障现象

/sbin/init提示找不到libz.so.1文件找不到.
QQ图片20180808090624.png

故障分析

libz.so.1是zlib的库文件, 在系统中肯定是安装了的.

  • 联想到上次关机前, 我滚了一次系统, 首先想到是不是Arch又日常滚挂了, 于是打开了Arch官网...可是没有任何关于此的通知, 相比应该不是滚系统的原因.
  • 联想到我关机之后压缩了一下磁盘, 第二反应是不是文件系统挂了, 于是启动了livecd, 跑起了brtfsck, 然而它告诉我其实什么问题也没有.

恢复过程

于是这就很尴尬了...
既然文件系统本身没问题, 那就只好先恢复系统再说, 于是在livecd里把磁盘挂载, 然后find -name "libz.so.1"...
QQ图片20180808090634.png
诶...怎么只在/usr/lib32/下有libz.so.1, 看来应该是/usr/lib/下的文件丢失了导致的.
嗯 复制livecd的libz.so.1到/usr/lib/, 成功启动.

然后我需要重装一下zlib, 于是pacman -S zlib启动!
QQ图片20180808090641.png
emmmm 我的pacman发生了什么!
看来不仅仅是丢了一个libz.so.1的问题...好像zlib的软件包元数据也丢了Orz
更神奇的是, 我安装其他软件都没问题, 唯独zlib...emmmmm

群里有大佬建议说, 你不如用pacstrap安装一下试试看, 于是...
QQ图片20180808090648.png
emmmmm 还是不行啊Orz

思考了一下, 你不是说desc文件找不到么, 于是我去那个目录看了一下
emmmm 好像只剩下一个mtree文件了, desc和files都丢掉了...
于是我想要不干脆把这个文件夹删掉, 是不是就当作我从来没装过zlib了.
立刻mv /var/lib/pacman/local/zlib-1:1.2.11-3 ~/ && pacman -S zlib
QQ截图20180808093307.png
emmmm 好像是真的 虽然提示文件系统中已存在 这当然是因为我们已经安装过的原因

不过可以这样 pacman -S --dbonly zlib~
QQ截图20180808093429.png
成功! 这个时候再去pacman -S zlib已经一点问题也没有了yeah

总结与后记

  • pacman的软件包数据库真简单啊, 除了mtree是未知格式以外, desc和files都是纯文本文件
  • pacman的单个软件包数据库挂了完全一点都不影响到整个软件包仓库
  • 恢复完之后, 我发现上次关机前我滚过的包, 它又提醒我再滚一遍, 仿佛是一段时间内的磁盘写入完全丢失, 甚至还丢了别的文件
  • 如果真的丢了别的文件, 其实我也看不出来Orz
  • 所以既然用了brtfs, 那么就要常做snapshot啊_(:3」∠)_
  • 所以下次再也不手贱压缩磁盘了!!!

以上