如何确定当前使用的GRUB实例并安全清理旧系统所在NVMe磁盘
首先别担心,你的问题其实很常见,核心是搞清楚当前系统到底依赖哪个磁盘的引导文件,然后就可以放心清理旧盘了。下面一步步来:
第一步:确认当前系统正在使用的EFI引导分区
你两个NVMe盘都有EFI分区,但只有一个是当前23.10系统实际在用的。我们可以通过两个命令快速确认:
查看挂载的EFI分区
运行以下命令:df -h /boot/efi输出会类似这样:
Filesystem Size Used Avail Use% Mounted on /dev/nvme1n1p1 511M 6.1M 505M 2% /boot/efi这里的
/dev/nvme1n1p1就是当前系统正在使用的EFI分区(对应装23.10的第二个NVMe盘),记好这个设备名。用efibootmgr验证引导条目
再运行这个命令确认引导顺序:sudo efibootmgr -v输出里的
BootCurrent会显示当前在用的引导条目编号(比如BootCurrent: 0001),对应条目中会有类似HD(1,GPT,abcdef-1234-...,0x800,0x100000)/File(\EFI\UBUNTU\GRUBX64.EFI)的内容。结合lsblk -o NAME,SIZE,TYPE,PARTTYPE的输出对比,就能确认这个HD(1)对应的就是刚才df命令里的EFI分区设备。
第二步:搞清楚GRUB的依赖关系(你的核心疑问)
你担心旧系统的/etc/grub.d会影响当前引导,其实完全没必要:
- 机器启动时,首先是UEFI加载当前EFI分区里的GRUB引导程序(就是刚才确认的那个nvme1n1p1里的文件);
- 随后GRUB会加载当前运行的23.10系统根分区里的GRUB配置(也就是
/etc/grub.d、/boot/grub/grub.cfg这些,都在23.10的根分区里); - 旧系统22.04的
/etc/grub.d和GRUB配置根本没被用到——当前引导流程完全不涉及旧盘的任何文件。哪怕你把旧盘整个格式化,只要当前的EFI分区和23.10的根分区完好,引导就不会出问题。
第三步:安全清理旧NVMe磁盘的步骤
1. (可选但推荐)备份当前EFI分区
以防万一,先把正在用的EFI分区备份到23.10的系统里:
sudo dd if=/dev/nvme1n1p1 of=~/efi_current_backup.img
备份文件存在你的主目录里,万一后续引导出问题,可以用Live USB启动后把这个镜像写回EFI分区恢复。
2. 删除旧盘的无效引导条目
用efibootmgr -v的输出,找到对应旧22.04系统的引导条目(比如编号是0000),然后删除它:
sudo efibootmgr -b 0000 -B
这样UEFI的启动菜单里就不会再出现旧系统的选项了。
3. 清理旧盘的所有分区
现在你可以放心处理旧NVMe盘(比如/dev/nvme0n1)的所有分区:
- 图形化方式推荐用GParted(没装的话先
sudo apt install gparted):- 打开GParted,顶部下拉菜单选择旧NVMe盘(确认是/dev/nvme0n1,别选成23.10所在的盘);
- 选中旧盘上的所有分区(包括它的EFI分区、22.04根分区、swap分区等),右键选“Delete”;
- 点击工具栏“Apply All Operations”执行删除;
- 之后在旧盘的未分配空间上创建新分区(比如格式化成ext4用作存储)。
- 命令行可以用
parted或fdisk,操作逻辑和GParted一致,注意选对磁盘就行。
4. 更新GRUB配置
清理完旧盘后,运行以下命令让GRUB重新扫描磁盘,自动移除菜单里的旧系统选项:
sudo update-grub
下次启动时,GRUB菜单就只会显示23.10的选项了。
关键注意事项
- 全程要确认清楚磁盘设备名,绝对不要操作当前23.10系统所在NVMe盘的任何分区;
- 对设备名有疑问时,用
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,PARTLABEL查看,每个EFI分区的PARTLABEL会显示“EFI System Partition”,结合之前df -h /boot/efi的结果就能准确区分; - 操作分区前,确保没有程序在使用旧盘的文件(比如先卸载旧盘分区:
sudo umount /dev/nvme0n1p*)。
这样处理后,旧盘就可以完全当作存储盘使用,不会影响23.10的正常引导。
备注:内容来源于stack exchange,提问作者wadeh

