【疑难杂症爆破委员会】升级Linux时断电,导致开机显示 Warning: /lib/modules/4.10.8-1-ARCH/modules.devname not found - ignorin

【疑难杂症爆破委员会】

升级Linux时断电,导致开机显示 Warning: /lib/modules/4.10.8-1-ARCH/modules.devname not found - ignoring 无法进入系统


状况说明

首先说明一下,我用的Linux桌面系统是基于Archlinux的发行版Manjaro。由于是笔记本,然后我又是半夜手贱升级,所以就差一点点完成升级的时候,断电关机了。

第二天一开机,表现的症状为:

开机提示 Warning: /lib/modules/4.10.8-1-ARCH/modules.devname not found - ignoring 后边还有一长串,总之是找不到设备之类的。

然后进入了紧急shell,可是并不能正常工作,因为设备都找不到,键盘都用不了。

这时候我发现,哦,出事了。可是并不慌,用Linux这么久了,大风大浪的也都见过了,所以觉得还有救。

马上拿出手机来,搜索了一波,马上就发现了,在下面这个网址上,好像有解决的对策

https://www.soimort.org/notes/170407/ : Recovering from a Corrupted Arch Linux Upgrade
Or: When Pacman’s “Post-Transaction Hooks” Go Wrong

这篇文章后边还有出现此类问题的详细分析,我也没仔细看,主要是按照如下操作步骤走了一遍,就把系统给弄好了。


所需条件

这篇文章所基于的条件是,你有一个双系统Linux环境。注意,是两个Linux系统,一个Win一个Linux是不行的。然而大多数人正常的环境是,就是一个Win一个Linux,很少有人装俩Linux双系统的。

我也不例外,我也是一个Win一个Linux。不过我有一个archlinux的U盘live系统。我主要是通过这个live系统来修复我损坏的linux系统的。

所以,如果想完成下面要讲的这些操作,
1. 要么你的电脑装了俩Linux系统且另一个还能正常使用
2. 要么你有一个U盘Live Linux系统

这是已知确定能完成下面步骤的环境,其实还有其他的替代方法,比如:
3. 你能把你装有损坏Linux系统的硬盘拆下来,并连接到一个有正常Linux系统的电脑上
4. 你已损坏的Linux默认开机启动了SSH服务,并且现在你能通过SSH连接上它(此种情况直接跳至步骤5


操作步骤

以下操作步骤需要ROOT权限,所以确保你现在已获取ROOT权限

1.定义两个变量

DEV="/dev/sda2"
DIR="/mnt"

DEV变量是你要修复的Linux所在的分区,我的就是在/dev/sda2这,你把它换成你的
DIR变量是你要把这个分区挂载到的位置,可以是任意位置,这个我选择把它挂到/mnt这

2.挂载

mount $DEV $DIR
mount -t proc /proc $DIR/proc
mount --rbind /sys $DIR/sys
mount --rbind /dev $DIR/dev

3.准备必要文件及做相关配置

cp /etc/hosts $DIR/etc
cp /etc/resolv.conf $DIR/etc
chroot $DIR rm /etc/mtab 2> /dev/null
chroot $DIR ln -s /proc/mounts /etc/mtab

4.切换到目标ROOT环境

chroot $DIR

经过以上几个步骤,我们就以ROOT身份进入了已损坏的Linux系统了。(如果是以SSH连接到已损坏的Linux系统的,则不需要这些步骤)
接下来,我们就要修复了。

先不要着急 pacman -Syu ,最好先查看一下pacman的log,究竟是装哪个包时出的问题

5.查看pacman的log,找到出问题的包,然后重装它

less /var/log/pacman.log
用这条命令查看安装出问题的包

然后
pacman -S 包名
重装

其实那篇文章里也说了,导致这种损坏的,最常见的包,其实就是 linux 这个包…

6.重新生成initramfs内核文件(最关键的一步)

mkinitcpio -p linux

这一步也许会出错,提示你找不到文件之类的。
解决方法是,进到 /etc/mkinitcpio.d 这个目录,看里面有什么。
把上边命令的 linux 替换成这里的文件名就OK了,注意不带后缀。

至此,大功告成。重启,基本上就能正常进入系统了。


其他说明

使用pacman是需要联网的,我的电脑用的是wifi,所以不会自动连上。
启用wifi并联网,一般需要如下步骤。如果不行,直接百度“wpa_supplicant连wifi”。

1. 启用网卡
ifconfig wlo1 up

我的无线网卡就叫wlo1,你可用 iwconfig 命令查看网卡到底叫啥

2. 创建wpa_supplicant配置文件。名字随意,内容如下
ctrl_interface=/var/run/wpa_supplicant
update_config=1

我的就在当前目录下,叫wpa.conf

3. 启动wpa_supplicant
wpa_supplicant -i wlo1 -c wpa.conf -B

4. 添加并连接wifi
wpa_cli -i wlo1 add_network
wpa_cli -i wlo1 set_network 0 ssid "wifi名字"
wpa_cli -i wlo1 set_network 0 psk "密码"
wpa_cli -i wlo1 enable_network 0

5. 获取IP地址
dhclient wlo1

然后就能上网了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值