由于错误的消息来源,我在arch下都是使用sudo pacman -Syuf升级,
于是今天悲剧发生了。
像往常一样,我运行了sudo pacman -Syuf(导致我udev损坏,这点是后来regenerate kernel的时候才发现的)
reboot后,就被drop到了recovery shell里
显示的是
Unable to find root device /dev/sda7
you are being dropped to the recovery shell
(rootfs)#
在arch的wiki和论坛上查询后,有了下面的解决方法。
使用引导光盘/USB,把引导系统的root换成自己的root,
步骤如下
fdisk -l (查看自己的arch运行在哪个分区,这里以/dev/sda7为例)
mkdir /mnt/arch
mount /dev/sda7 /mnt/arch
cd /mnt/arch
mount -t proc proc proc/
mount -t sysfs sys sys/
mount -o bind /dev dev/
如果你有在别的分区上安装别的文件系统,也一起挂载到这里来
例如有个/boot在/dev/sda8 上
mount /dev/sda8 boot/
接下来
chroot . /bin/bash
如果这里出现错误,说明你光盘拿错了。
现在已经进入了自己的root中,要做的就是恢复系统
pacman -Qk
检查哪些软件包出了问题
pacman -U /var/cache/pacman/pkg/软件包名字-olderpkgver.pkg.tar.gz
把软件包降级,就能恢复了。
如果你不幸像我一样,刚刚犯了洁癖,pacman -Scc清空了旧版缓存
这里还有另一种方法。
按照上面的步骤一直到pacman -Qk
配置网络,重新安装那些软件包
mkinitcpio -p linux
重构内核 (我是在这里发现udev损坏的)
最后,reboot即可