问题
alpine 3.18 更新 linux-lts 后,启动失败,进入救援系统,报错日志
mount: mounting /dev/sda3 on /newroot failed: Invalid argument
过程
-
首先想到的是文件系统出错了。
进入到 liveos ,btrfs check /dev/sda3
无异常 -
这大概是内核加载的时候出了什么问题。
首先重新做一遍initramfs
,方法是在 liveos 里把分区都挂上,chroot 进去修export chroot_dir=/mnt mount /dev/sda3 ${chroot_dir} mount /dev/sda1 ${chroot_dir}/boot mount -o bind /dev ${chroot_dir}/dev mount -t proc none ${chroot_dir}/proc mount -o bind /sys ${chroot_dir}/sys chroot ${chroot_dir} /bin/ash -l
检查
/etc/mkinitfs/mkinitfs.conf
配置,对比其他机器,发现缺了btrfs
的 features 。加上之后
apk fix linux-lts
发现在syslinux-6.04_pre1-r13.trigger
报了一个警告:WARNING: Root device is not specified in /etc/update-extlinux.conf.
暂时先没管,重启,失败
-
修 bootloader
前面提到的/etc/update-extlinux.conf
文件就是 syslinux 的配置文件,首先把 root 设备的配置加上root=UUID=xxxxxxxxxxxxxxxxxx
然后看到这样一行配置
# modules # modules which should be loaded before pivot_root modules=sd-mod,usb-storage,ext4
把
ext4
改成btrfs
,重新运行apk fix linux-lts
,警告消失,重启正常进入系统
后日谈
为什么配置文件会变成这个样子,完全没有头绪。这台机器之前也更新过内核重启,没什么问题。
另一台安装时间只相差十几天的机器,完全正常,修复配置参考的也是这台正常的机器。