ArchLinux升级后报错Cannot find UUID
最近为了给ArchLinux安装Parallels Tools工具,尝试升级了一下系统。执行命令
1 | pacman -Syu |
没想到重启后报错
Error: device ‘UUID=b5a9a977-e9a7-4d3d-96a9-dcf9c3a9010d’ not found. Skipping fsck.
Error: can’t find UUID=b5a9a977-e9a7-4d3d-96a9-dcf9c3a9010d
You are now being dropped into a emergency shell.
Can’t access tty: job control turned off
不仅无法进入系统,就连键盘也无法工作了,吓得我一度想重装。网上找了一圈之后,找到了几个靠谱的方案。
步骤一:引导盘启动
既然键盘都无法输入了,只能用引导盘来修复问题了。我的fstab文件配置如下
1 | # /dev/sda1 <dir> <type> |
Paralles选择操作》配置》硬件》CD/DVD1》源,选择archlinux.iso镜像,启动。
步骤二:挂载启动目录和引导目录
执行命令
1 | mount /dev/sda1 /mnt |
需要注意的时,不能只挂在启动目录,引导目录也得同时挂载。
步骤三:更新系统
上一步,挂载了两个目录之后,接下来就要切换到启动目录了,执行
1 | arch-chroot /mnt |
然后更新系统
1 | pacman -Syu |
步骤四:重新生成initramfs
虽然我也不太懂什么是initramfs,但是这个命令必须执行,它是解决挂钩的关键
1 | mkinitcpio -p linux |
特别注意,如果步骤二时只挂载了启动目录,就更新系统的话,执行mkinitcpio命令会报错
‘/lib/modules/4.11.9-1ARCH’ is not a valid kernel module directory
解决办法是需要挂载引导目录后,再执行命令
1 | pacman -S linux |
重新安装一次linux包,哪怕版本已经最新了。最后执行mkinitcpio命令。
总结
我就是因为更新系统的时候,没有挂载引导目录,导致执行mkinitcpio报错一直找不到模块目录。