场景
同一台电脑上安装了多个操作系统:Windows 11
、Ubuntu 23.04
和CentOS 7
。
当前使用的启动引导程序是Ubuntu 23上的grub 2,开机发现其中有许多未知的启动项,如Memory Test xxx
、UEFI xxx
等。
现在想要去掉多余的启动项,仅保留几个操作系统。于是我便进入了Ubuntu 23
文件系统中的/etc/grub.d/
目录下,将其中的10_linux
、20_memtest86+
、30_os-prober
、30_UEFI-xxx
等文件给修改权限,移除了它们的x
权限,再更新grub
,重启电脑。
# 移除文件的可执行权限
sudo chmod -x 30_os-prober
# 更新grub配置
sudo update-grub
# 重启电脑
sudo reboot
结果很不幸,开机发现grub 2依然可惜使用,但其中的启动项只剩下了Window xxx
,其它的都不见了,包括Ubuntu
自身!
尝试用修改BIOS
,直接启动Ubuntu
系统,也不起作用。
解决方法
在开机引导的grub 2
界面,选中可用的Window xxx
启动项,按快捷键e
编辑它的grub配置,使其变成启动Ubuntu 23
的配置(该配置仅临时生效,下次重启后会自动复原,不用担心)。
修改后内容如下:
# 添加启动项,菜单中显示为`Ubuntu 23`
menuentry 'Ubuntu 23' {
# 加载模块prt_gpt和ext2
# part_gpt表示分区表格式为gpt(GUID Partition Table)
insmod part_gpt
# ext2表示文件系统为ext2(即使是ext4亦可这般书写)
insmod ext2
# 设置根目录为第(0+1)块磁盘中的第(4)个分区
# 它们是grub标识符,表示方式较为奇怪,磁盘编号从0开始,分区编号却是从1开始
# 这些信息可通过linux命令`sudo fdisk -l`来查看
set root='hd0,gpt4'
# 设置`vmlinuz-xxx-generic`的路径
# ro表示在引导初期将根文件系统以只读的方式挂载,splash表示在引导过程中显示启动画面
linux /boot/vmlinuz-6.2.0-39-generic root=/dev/sda4 ro splash
# 设置`initrd.img-xxx-generic`的路径
initrd /boot/initrd.img-6.2.0-39-generic
}
修改完成后,按快捷键F10
重新加载grub配置并启动系统,成功!
注意:不要太得意,别忘了成功启动ubuntu后,赶紧将之前所做的错误修改给复原,并再次更新grub配置!
sudo update-grub
sudo reboot
技巧:
- 在启动界面修改grub配置时,可通过
Tab
键来查看提示内容,以判断自己的输入是否合法,比如该文件是否存在;- 在修改grub配置时,若重新设置了
root
,则需要按F10
重新加载后,才能正确地进行Tab
提示,否则它还是会用修改前的root
信息;vmlinuz-xxx-generic
若存在多个,则选择版本号最大的那个。
备注:这些天钻研多系统安装,还遇到过不少坑,有相关兴趣的小伙伴可以与我聊天互换心得。
关于我
我是一位喜欢创新、乐观向上的少年
爱好是看书、踢足球、玩LOL等
喜欢我的文章的朋友,可以添加个人微信:CS-huo
有问题可以相互探讨,共同学习!