问题描述
服务器长时间使用后关机,再次开机无法进入系统,报错 Unable to mount root fs on unknown-block。
解决方法
问题核心是 Linux 内核丢失了 initramfs 文件,这个文件可以把临时根文件加载到内存中
步骤 1
重启电脑,在重启的时候进入 Advanced options for Ubuntu > 看到一些内核选项 > 选择最老的内核选项进入 recovery mode(如果进不去,逐级尝试别的内核的恢复模式)。进入特定界面,依次执行下面的选项
clean dpkg grub fsck # fsck 可能会报不成功,但是不受影响。resume
每执行完一个需要按一下回车才能跳转,全程就 y 和 enter 两个键,执行上述过程需要一定时间。执行完 resume 后应该就可以进入 Ubuntu 系统界面了。需要注意的是,此时处于修复模式下,不要直接在当前系统进行任务。
步骤 2
- 先看看自己的
/boot是否满
df -h
- 查看挂载
sudo fdisk -l
会输出很多磁盘扇区信息,主要看下面的部分。
此时我们要搞清楚自己的 root 挂载到哪个分区了(不是 boot,root 其实就是我们的根分区 /)。通常建议 root 挂载分区较小,大的分区留着存文件,因此大概率是 p3 为挂载 root 分区。
- 设置挂载,把当前系统的关键内核接口'映射'到 /mnt 下,然后切换根目录(chroot)进入一个'伪系统环境'。
sudo mount /dev/nvme0n1p3 /mnt # 注意将/dev/nvme0n1p3 更换为自己系统的实际挂载分区
sudo mount --bind /dev /mnt/dev # 把当前系统的 /dev 绑定到 /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts # 绑定伪终端
sudo mount --bind /proc /mnt/proc # 绑定进程信息系统
sudo mount --bind /sys /mnt/sys # 内核设备树,让 chroot 环境具备完整的硬件和内核视图
sudo chroot /mnt # 进入 root 状态,把 /mnt 当作新的根目录 /,并在其中启动一个 shell,在新系统进行修复
- 更新 initramfs
查看系统拥有的系统内核
dpkg --list | grep linux-image


