博文

目前显示的是 一月, 2010的博文

挽救不能启动的 archlinux

自从 lyman 的老本在海运中壮烈碎屏之后,就装了个 mldonkey 担任下载机的任务。

趁着最近党国乱拳打非,下载任务萧条,2009 年末无所事事之际,lyman 也想把这台下载机更新一下。因为懒得再弄 mirrorlist(mirror.kernel.org 就是好啊就是好),就把主力本(当然也是 archlinux)上的 scp 了过去,pacman -Syu,重启。

问题来了。下载机启动不能。方才醒悟,主力本是 64 位系统。下载机上,连同 kernel26 在内的十余个包被升级成 64 位的了。

其实解这类问题的思路很简单。pacman wiki 的 FAQ 里说的很清楚。
想办法启动系统,无论 livecd、liveusb 还是其他什么。不过启动的这个环境里面要有 pacman。
mount 相应的分区。用 pacman 重新安装出问题的包,安装的时候用 -r 指定一下根分区的挂载位置就好。
具体到我这个下载机,折腾流水帐如下:
用 archlinux 2009.08 livecd 无法完成启动。原来是个已知 bug,貌似是外挂 usb 光驱独有待遇。隐约记得类似问题从 2009.02 就有了,看来俺的下载机已经被时代所抛弃了啊~找 2008.06 livecd,启动正常,挂载时发现,下载机根分区被我手痒搞成 ext4 了,2008.06 livecd 不支持…没招了,拆下载机硬盘,塞到 usb 硬盘盒里插到主力本上,顺利 mount。于 MOUNT_POINT/var/log/pacman.log 中得知需要回滚哪些包,翻了翻 MOUNT_POINT/var/cache/pacman/pkg,旧包都还在。pacman -r MOUNT_POINT -U xxx.pkg.tar.gz。装回硬盘,启动正常。sed -i 's/x86_64/i686/' /etc/pacman.d/mirrorlist,再次 pacman -Syu,齐活。
一个需要注意的地方:
如果要回滚的包涉及到 /boot(如 kernel26),且你的 /boot 是放在单独分区(archlinux 默认安装行为)的话,挂载根分区之后不要忘记挂载 /boot。