误删除/boot分区文件导致系统启动失败,可从光盘进行恢复引导,针对其他误删除系统文件导致无法启动也可按对应步骤执行,方法仅供测试验证
重启后界面报错
方式一: 通过下载源系统内核版本重新安装(推荐方式)
原系统内核版本列表请查看下方切换chroot 文件系统后查询出的版本
ubuntu 阿里云镜像站软件包下载地址(内核包搜索linux-image
):https://developer.aliyun.com/packageSearch?word=linux-image
方式二:通过光盘中内核进行安装
实在没外网,也找不到可下载的内核,使用光盘中内核版本进行安装
插入 Ubuntu 22.04 安装光盘并重新启动计算机。
当前虚拟机演示
选择已有的ISO镜像文件
重启操作系统进入光盘引导启动
在启动过程中,按下键盘上的特定按键(通常是 F12、F10、Esc 或 Del 键)以进入启动选项菜单。具体的按键可能因计算机品牌或型号而异,请在启动时查看屏幕上的提示信息。
从启动选项菜单中选择光盘驱动器作为启动设备,并按下 Enter 键。
接下来,你会看到 Ubuntu 安装菜单。选择 “Install Ubuntu”(或者类似的选项)并按下 Enter 键。
进入救援模式
等待系统加载相关文件,直到出现 "Welcome " 等类似的界面
在该界面上,不要继续安装过程。而是按下 Ctrl + Alt + F2 组合键,切换到另一个虚拟终端
在新的虚拟终端中,输入以下命令进入救援模式:
sudo systemctl rescue
按下 Enter 键执行该命令。
系统将进入救援模式,
输入操作系统root密码
进入系统后查看挂载状态,可以看到没有原操作系统的挂载分区
df -h
恢复grub引导
可以通过lsblk -f
、blkid
、 fdisk -l
命令确认分区信息
lsblk -f
查看后确认:当前环境只有一块/dev/sda盘,/dev/sda3并做了lvm卷,分区为:ubuntu--vg-ubuntu--lv
挂载分区,选择/mnt作为挂载点,也可以新建挂载目录进行挂载
挂载后查看数据,可以确认当前分区就是根分区/
mount /dev/mapper/ubuntu--vg-ubuntu--lv /mnt
挂载必要的文件系统
mount --bind /sys/ /mnt/sys/
mount --bind /proc/ /mnt/proc/
mount --bind /dev/ /mnt/dev/
切换到原系统
chroot /mnt/
查看只有根分区挂载信息:
mount -a
根据原系统的/fstab内容
可以看到/boot分区已挂载上,并查看到/boot分区内容为空
mount -a
df -h
ls /boot/
创建grub
grub-install /dev/sda
查看原系统安装的kernel版本image有3个:
dpkg -l |grep kernel|grep image
linux-image-generic
linux-image-5.15.0.72-generic
linux-image-5.15.0-117-generic/font>
uname -r
查看到的是光盘中的使用的内核版本:5.15.0-25-generic,有可能原系统包含这个版本(当前上方三个版本中不包含)
通过方式一: 下载对应版本内核重新安装
下载任一原系统内核版本,本次使用查询出来的最高版本
怎么上传内核到需要修复的主机上,我这想到2个方法:
方法1:
使用其他正常系统下载后通过共享进行下载(不能使用域名地址,光盘引导域名无法解析)
方法2:
将已下载好的内核文件放在到硬盘或者u盘等存储介质方式,挂载进恢复系统中读取
我这儿使用方法1
需共享的主机下载
wget https://mirrors.aliyun.com/ubuntu/pool/main/l/linux-signed/linux-image-5.15.0-117-generic_5.15.0-117.127_amd64.deb
光盘引导待恢复的主机下载上面共享的内核文件
待恢复主机网络中若没有启用dhcp,可以使用 ip addr临时设置:
sudo ip addr add <ip地址>/<掩码> dev <接口名称>
sudo ip route add default via <网关地址>)
示例设置:
sudo ip addr add 192.168.0.220/24 dev eth0
sudo ip route add default via 192.168.0.1
安装下载的内核
linux-image-5.15.0-117-generic_5.15.0-117.127_amd64.deb
更新grub引导
update-grub
退出chroot环境,重启系统
exit
reboot
重启后应该已能正常引导系统启动
到处,方式一恢复引导结束,系统已安装的其他内核版本可选修复!
通过方式二: 光盘中内核进行安装
挂载光盘,复制启动文件
选择/opt目录为光盘挂载点(也可以挂载/mnt及别的目录,为了混淆,上面切入系统进来前也是/mnt,),也可以创建新目录挂载
#挂载光盘
mount /dev/cdrom /opt/
#查找内核文件
find /opt -name 'linux-image*'
查看文件大小,确定内核文件
find /opt -name 'linux-image*'|xargs du -sh
可以看到匹配到两个文件,既然是内核文件,第一个
3.0k
肯定不是,怎么确认可以使用dpkg -c
命令查看文件内容,可以看到第二个匹配文件中包含vmlinuz
带版本号的文件
安装内核提示需要安装依赖linux-modules
查找linux-modules文件位置
查找后可以看到也匹配到2个文件,linux-modules-extra文件是附件模块文件可选安装
更新grub引导
update-grub
ll /boot
退出chroot环境,重启系统
exit
reboot
重启后应该已能正常引导系统启动!其他缺失的内核引导可选进行重装
重新安装原系统已有内核
对于某些驱动或应用依赖原系统对应内核版本,可以重新安装原系统中已有的指定内核版本
更新apt 源
apt update
若apt update
加载慢,可以使用阿里云镜像源及内外自建源
#ubunt22.04-jammy
cat > /etc/apt/sources.list <<EOF
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
若系统无内核版本要求,也可以把查询出来的内核版本和内核对应模块都安装,或者安装镜像源中指定或最新版本都可以
dpkg -l |grep kernel
本次安装原系统显示最新的版本
从上面光盘安装内核可知:安装linux-image版本,需安装对应依赖modules包
apt update
apt reinstall linux-image-5.15.0-117-generic linux-modules-5.15.0-117-generic
若安装的内核比grub中版本高,会提示是否使用新内核
安装完毕后,重启系统!
查看当前引导内核版本:5.15.0-117-generic
/boot分区也多了一些引导文件(可选:根据需要删除不必要的内核版本)
uname -r
ll /boot/