文章目錄
- 一.問題背景
- 二.解決步驟
- 2.1確認系統分區
- 2.2手動引導
- 2.3 重建grub引導
- 2.4 還原軟件包
一.問題背景
閑來無事,把ubuntu25.04通過sudo do-release-upgrade
命令升級到了ubuntu25.10.在升級的過程會出現以下問題
- 1.自動替換flatpak程序為snap
- 2.請求是否清除舊依賴
如上,第二步輸入y,會清除基于舊內核的引導,且不會重建新引導。
自動化更新完成,要求重啟。此時系統重啟進入grub緊急救援模式。
二.解決步驟
2.1確認系統分區
1.輸入ls
指令查看所有識別到的磁盤和分區。例如:(hd0)(hd0,gpt1)(hd0,gpt2)。
其中hd0表示第一塊磁盤,gpt是分區號。
- 對每個分區執行 ls (hd0,gptX)/ (將 X 換成實際分區號),找到包含系統文件的分區(需看到 boot root home 等目錄,通常是根分區 / 或 /boot 分區)。
2.2手動引導
假設找到根分區為 (hd0,gpt2) ,按以下步驟執行(需替換為你的實際分區):
需要指名的是MBR分區以msdosX命名,GPT分區以gptX命名。以下命令不受分區類型影響,demo以gpt分區為例講解:
# 1.指定根分區
set root=(hd0,gpt2)
# 2.指定內核文件 (進入 boot 目錄查看內核名,格式通常為 vmlinuz-xxx ):
# sda1 對應 (hd0,msdos1) , xxx 替換為實際內核版本
# nvme0n1p1,nvme0n1p2 一般表示基于pcie接口和nvme協議的固態硬盤分區
# sda1,sda2一般表示基于sata和scsi接口的機械硬盤分區
linux /boot/vmlinuz-xxx root=/dev/nvme0n1p2# 3. 指定初始化鏡像(格式通常為 initrd.img-xxx ):initrd /boot/initrd.img-xxx ( xxx 與內核版本一致)
# 4.啟動
boot# 5.若進入ui界面,則不需要看第五步!
# 若此時進入 initramfs命令行 可能會存在報錯說明。最大可能是第2步,你并不知曉你的分區名,此時可通過如下命令查詢
blkid #可能不同分區,命令不同,還可以如下圖嘗試 fdisk lsblk等 此時獲取到磁盤命名及編號。重啟系統進入grub命令行,輸入和分區編號對應的磁盤命名即可。
2.3 重建grub引導
#系統啟動成功后,執行以下命令修復GRUB:#1. 安裝GRUB到硬盤( /dev/sda 是第一塊硬盤,根據實際情況替換):sudo grub-install /dev/sda
?
#2. 生成新的GRUB配置文件:sudo update-grub (Ubuntu/Debian)或 sudo grub2-mkconfig -o /boot/grub2/grub.cfg (CentOS/RHEL)
?
#3. 重啟驗證:
sudo reboot
2.4 還原軟件包
# 1.有需要重新使用 unsnap恢復flatpak文件# 2.清理舊依賴
sudo apt-get autoremove
# 3.清理舊內核
#查看當前內核版本,避免誤刪
uname -r
# 列出內核包
# debian系
dpkg --list 'linux-image*'
# fedora系
rpm -qa | grep kernel#4.卸載舊內核
# debian系
sudo apt-get remove linux-image-<舊內核版本> # 替換為要卸載的版本,如 linux-image-5.15.0-75-generic# fedora系
sudo rpm -e --nodeps kernel-<舊內核版本># 5.清除殘留
sudo apt-get autoremove # 自動刪除不再需要的依賴(包括舊內核的模塊和頭文件)sudo update-grub # 更新啟動菜單,移除舊內核選項