您尚未登录。

#1 2017-01-12 12:09:08

lostyear
会员
注册时间: 2015-04-09
帖子: 11

自动更新失败,systemd元数据损坏

pacman -Syu 升级系统的时候不知道为什么升级一半出现:

[1]    4864 killed     sudo pacman -Syu            [##--------------------]  13%

pacman进程被kill的时候正在升级的是system。。。
当时脑子秀逗了,直接把锁删了重新执行升级,然后现在system是坏的了。

尝试systemd重新安装会提示:

 % sudo pacman -S systemd
warning: systemd-232-7 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...
error: could not open file /var/lib/pacman/local/systemd-232-7/desc: No such file or directory
warning: could not fully load metadata for package systemd-232-7
error: failed to prepare transaction (invalid or corrupted package)

试了用cache里面的软件包重新安装也是这个错误。
查了下这个东西/var/lib/pacman/local/systemd-232-7/desc是软件包安装后的元数据,在wiki上找到了重建本地数据库的条目,好像可以重建这个数据。https://wiki.archlinux.org/index.php/Pacman/Restore_local_database_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
但是那个看起来好像是软件全部正确安装只有元数据损坏的恢复方法,这种软件安装到一半的情况我不太敢就这么操作。
求助现在系统该怎么恢复?

顺路问一下,为什么pacman进程会被kill啊!系统cpu和内存占用都不高(原谅我只见过内存超限被系统直接kill的进程)。

最近编辑记录 lostyear (2017-01-12 12:10:37)

离线

#2 2017-01-12 13:27:33

zsrkmyn
lazy...
注册时间: 2013-05-05
帖子: 331

Re: 自动更新失败,systemd元数据损坏

pacman 被 kill 还是第一次见……
如果是我的话,我可能会选择用

rm -rf /var/lib/pacman/local/systemd-232-{6,7}
pacman -Sdd --dbonly --noscript --force systemd

来重建 systemd 的数据库,然后再 Syu。
然而以上代码我都没执行过,可能出现的问题不敢保证哦 0.0

离线

#3 2017-01-12 15:00:22

lostyear
会员
注册时间: 2015-04-09
帖子: 11

Re: 自动更新失败,systemd元数据损坏

zsrkmyn 说:

pacman 被 kill 还是第一次见……
如果是我的话,我可能会选择用

rm -rf /var/lib/pacman/local/systemd-232-{6,7}
pacman -Sdd --dbonly --noscript --force systemd

来重建 systemd 的数据库,然后再 Syu。
然而以上代码我都没执行过,可能出现的问题不敢保证哦 0.0


现在systemd应该是坏的,/var/lib/pacman/local/里面只有system-232-7,而且里面只有install和mtree两个文件。
很多操作都执行不了,会提示bus error。现在一直挂着,感觉如果关机了肯定系统时无法启动的。


不过这么说的话,如果我用安装盘启动,删除system的相关文件,然后pacstrap -i /mnt systemd不知道能不能解决问题。
但是如果不能修复系统也不能启动,那就必须重新安装一个系统了。

离线

#4 2017-01-12 16:03:15

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,384
个人网站

Re: 自动更新失败,systemd元数据损坏

进程被杀内核日志里应该有信息。
bus error 就可能比较麻烦了。那个命令坏掉了。
实在不行你可以用 live 系统去重新相关包。

离线

#5 2017-01-12 19:24:30

lostyear
会员
注册时间: 2015-04-09
帖子: 11

Re: 自动更新失败,systemd元数据损坏

依云 说:

进程被杀内核日志里应该有信息。
bus error 就可能比较麻烦了。那个命令坏掉了。
实在不行你可以用 live 系统去重新相关包。

看了日志,竟然是out of memory,实在是不懂,系统内存是够用的。
先去live系统重新安装system吧,先把系统恢复出来。

相关的日志我先贴出来:

Out of memory: Kill process 5061 (pacman) score 55 or sacrifice child
Killed process 5061 (pacman) total-vm:235724kB, anon-rss:31560kB, file-rss:7768kB, shmem-rss:0kB

离线

#6 2017-01-12 21:04:04

lostyear
会员
注册时间: 2015-04-09
帖子: 11

Re: 自动更新失败,systemd元数据损坏

更新进展:系统已经恢复出来了。

先拿光盘引导进live系统,尝试

 pacstrap -i /mnt system

报错跟刚开始在原来的系统中一样唯一的区别是路径前面多了/mnt(废话):

warning: systemd-232-7 is up to date -- reinstalling
resolving dependencies...
looking for conflicting packages...
error: could not open file /mnt/var/lib/pacman/local/systemd-232-7/desc: No such file or directory
warning: could not fully load metadata for package systemd-232-7
error: failed to prepare transaction (invalid or corrupted package)

反正已经进live系统了,尝试重建system的元数据吧,于是arch-chroot进系统,按zsrkmyn说的,执行了:

rm -rf /var/lib/pacman/local/systemd-232-7
pacman -Sdd --dbonly --noscript --force systemd

但是报了一大堆错误,没管错误,元数据已经有了。
从chroot环境中退出来,还是执行:

pacstrap -i /mnt system

然后还是有错误,但是最后提示了安装完成。
瞄了一眼大部分是文件存在什么的,继续不管错误,再次chroot进入系统:

pacman -S systemd

这次安装完成并且没有报错,退出live系统,重新引导。系统恢复正常了。
只是不知道是不是还有什么坑没踩到。

还是不明白为什么pacman就内存不足被kill了,当时虚拟机内存占用并不高,并且有设置动态内存。
感觉唯一的可能是pacman更新软件的时候内存需求增长过快,虚拟机还没来得及把内存分配过去,决定把虚拟机的动态内存缓冲加大点先。

再,Thanks zsrkmyn,thanks 依云

离线

页脚