Alpine BTRFS 修复记录

2023-06-19 19:49 +0800

问题

alpine 3.18 更新 linux-lts 后,启动失败,进入救援系统,报错日志

mount: mounting /dev/sda3 on /newroot failed: Invalid argument

过程

  1. 首先想到的是文件系统出错了。
    进入到 liveos ,btrfs check /dev/sda3 无异常

  2. 这大概是内核加载的时候出了什么问题。
    首先重新做一遍 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.
    

    暂时先没管,重启,失败

  3. 修 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,警告消失,重启正常进入系统

后日谈

为什么配置文件会变成这个样子,完全没有头绪。这台机器之前也更新过内核重启,没什么问题。

另一台安装时间只相差十几天的机器,完全正常,修复配置参考的也是这台正常的机器。