记一次ArchLinux升级后开机Warning: xxx/modules.devname not found导致卡在挂载磁盘 进入emergency shell无法开机的问题

好吧,我看了很多人是因为pacman -Syu的时候断电导致的问题。本人新年第一天升级系统的时候啥也没干(除了把几个开发依赖的软件包加入pacman ignore?),升级的过程中不知为何突然锁屏了一下(我猜就是这个导致的)。后面重启开机就是标题这个dio样子了。emergency shell模式下键盘也输入不了,只能强制关机,搞得我把开发环境搬到win下去了。

参考了tg群友的意见,貌似是initramfs损坏导致的。外界chroot介入的情况下mkinitcpio解决问题,还有一些博主比如@JoeNahm的文章

1 首先你得有个archiso的livecd U盘

因为我很久之前是参考这个教程安装的arch,因此我又翻出来参考了。u盘不是必须的,你只要能有另一个能启动的完整linux满足下面的条件:

  • 必须能独立启动,也就是说不依赖于已经无法启动的linux所在分区
  • 能够访问到已损坏的linux所在分区,不管是拆硬盘还是插u盘

这里提供一个制作archiso的u盘livecd的方法。如果没有archiso怎么办?参考制作winpe的方法两步搞定:

  • 先用ventoy(点此处前往下载)格式化u盘,可以参考网上有大把的教程如何使用ventoy,非常简单。(这样会导致u盘原有文件丢失,所以尽量使用空的/无用的u盘,4GB以上即可)
  • 再去arch官网把镜像下载下来扔到u盘的ventoy目录下就搞定。

2 进入archiso的live系统 挂载已损坏linux的分区

进入live

插上u盘,开机的时候,就像你要进入winpe一样,狂按某个键(我的笔记本是F7 F8 F11 F12当中的某一个,不知道是哪个就一起按哈哈哈)通过BIOS设置从u盘启动。
ventoy会给一个界面给你选,选择arch的镜像回车。arch也会给你几个选项,选第一个就可以了。
进入live系统之后,可以参考Archlinux简明教程-基础安装-联网当中的方式连接网络(因为指不定之后还要用网)。

挂载分区 并chroot

可以参考Archlinux简明教程-基础安装-挂载当中的方式挂载磁盘。注意,因为每个人安装arch的选项都不同,这里需要根据自己安装的情况调整命令参数。

# 挂载 / 分区,我的arch文件系统分区(/和/home)类型为btrfs,位于固态的/dev/nvme0n1p4处
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p4 /mnt 
# 挂载 /home 分区
mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p4 /mnt/home
# 挂载交换分区(可选)
swapon /dev/nvme0n1p3

如果忘记了磁盘上哪个分区是干啥用的,可以fdisk -l查看一下再运行mount进行挂载。

可以使用df -h查看是否已经挂载成功(新挂载的分区会显示在末尾)。

挂载完了就可以chroot进入已损坏的linux了:

arch-chroot /mnt

这时候可以看看是否成功chroot进去了,比如ls /home里面是不是之前自己设置的用户。

3!大刀阔斧修系统

直接再次生成initramfs配置文件.img

直接运行

mkinitcpio -p linux

看看有没有报错(ERROR)。

运气很好

如果没有报错(有Warning也行)并且最后显示成功生成了.img文件,那么可以进入下一步退出live系统重启试试能否打开原已损坏系统了。

中途报一堆的ERROR:xxx module not found

参考arch论坛的帖子。估计是升级系统的时候哪里崩了(大概率是linux包)导致很多module找不到。此时可以再次更新系统:pacman -Syu

命令运行过程中没有error的话会自动mkinitcpio -p linux(因为一般会更新linux包),为了以防万一,更新完再跑一次mkinitcpio -p linux

我这里遇到了一个问题:pacman -Syu的时候提示 fail to synchronize all databases (unable to lock database)。解决方法也是参考了知乎的专栏

rm -f /var/lib/pacman/db.lck

4 退出livecd重启进入系统

此时处于chroot环境。

  • 通过exit命令退出chroot环境
  • umount -R /mnt卸载分区
  • reboot重启系统

关机的同时别忘记把u盘拔了。有的设备启动时不是设置启动顺序,而是设置的指定从哪个盘启动,这种的不拔u盘也行。

如果上面这些还没解决问题,那就爱莫能助了。

  • 18
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值