概述
本文主要介绍如何修改Linux镜像Grub文件中的文件磁盘标识符为UUID。
背景信息
在Grub配置中,Linux系统启动项的内核参数中有一项是根文件系统参数。如果该参数不是指向系统盘的根文件系统所在的分区(如/dev/vda1
),或者其中指定的UUID与系统盘上的根文件系统实际的UUID不匹配,那么有可能使得系统启动时内核无法正确加载根文件系统,从而导致系统启动失败。错误配置的示例如下:
cat /boot/grub2/grub.cfg
......
linux16 /boot/vmlinuz-3.10.0-1160.11.1.el7.x86_64 root=/dev/xvda1
......
上面配置中root根分区配置的名称为/dev/xvda1
,该设备的名称可能会因为虚拟化环境的迁移发生变化,如/dev/xvda1
变化为/dev/vda1
等,因此配置设备名不是可靠的方法,建议配置为设备的UUID。
解决方案
修改Linux镜像Grub文件中的文件磁盘标识符为UUID的操作如下:
- 执行以下命令,查看当前Linux实例中存在的块设备信息。
blkid
系统显示类似如下。/dev/vda1: UUID="989ac477-64f2-449f-8415-25b1a5f7d47f" TYPE="xfs"
- 执行以下命令,编辑Grub配置文件,修改root设备为根分区的UUID,修改保存并退出。
vim /boot/grub2/grub.cfg
修改后系统显示类似如下。......
linux16 /boot/vmlinuz-3.10.0-1160.11.1.el7.x86_64 root=UUID=989ac477-64f2-449f-8415-25b1a5f7d47f
...... - 执行以下命令,检查Grub中所有root设备配置。
grep -n -E "(kernel|linux[16]*[efi]*)[[:space:]]+(/boot)?/vmlinuz-.*root=" /boot/grub2/grub.cfg /boot/grub2/grubenv
系统显示类似如下。/boot/grub2/grub.cfg:100: linux16 /boot/vmlinuz-3.10.0-1160.11.1.el7.x86_64 root=UUID=989ac477-64f2-449f-8415-25b1a5f7d47f ro console=tty0
/boot/grub2/grub.cfg:115: linux16 /boot/vmlinuz-3.10.0-1160.el7.x86_64 root=UUID=989ac477-64f2-449f-8415-25b1a5f7d47f ro console=tty0
/boot/grub2/grub.cfg:129: linux16 /boot/vmlinuz-0-rescue-20201221114405071604847697217993 root=UUID=989ac477-64f2-449f-8415-25b1a5f7d47f ro console=tty0
/boot/grub2/grub.cfg:143: linux16 /boot/vmlinuz-0-rescue-f607f552c07b43ff9c3a0fc5fe50ddf3 root=UUID=989ac477-64f2-449f-8415-25b1a5f7d47f ro console=tty0
更多信息
以下是各个Linux发行版的Grub版本和配置文件如下:
distro |
系统大版本 |
Grub配置文件 |
grub-default |
Grub版本 |
CentOS |
5 |
/boot/grub/grub.conf |
None |
grub-legacy |
CentOS |
6 |
/boot/grub/grub.conf |
None |
grub-legacy |
CentOS |
7 |
/boot/grub2/grub.cfg |
/etc/default/grub |
grub2 |
Debian |
6 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Debian |
7 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Debian |
8 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Debian |
9 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Ubuntu |
12 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Ubuntu |
14 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Ubuntu |
16 |
/boot/grub/grub.cfg |
/etc/default/grub |
grub2 |
Opensuse |
13 |
/boot/grub2/grub.cfg |
/etc/default/grub |
grub2 |
Opensuse |
42 |
/boot/grub2/grub.cfg |
/etc/default/grub |
grub2 |
Sles |
11 |
/boot/grub/menu.lst |
None |
grub-legacy |
Sles |
12 |
/boot/grub2/grub.cfg |
/etc/default/grub |
grub2 |
uefi启动的镜像Grub文件通常在EFI分区目录下。执行以下命令,如果该目录存在,则表示系统为uefi启动模式。
ls /sys/firmware/efi/
uefi启动模式下的Grub配置文件路径列表如下:
distrio | Grub配置文件 |
Centos | /boot/efi/EFI/centos/grub.cfg |
Redhat |
/boot/efi/EFI/redhat/grub.cfg
|
Alibaba Cloud Linux |
/boot/efi/EFI/alinux/grub.cfg
|
Fedora |
/boot/efi/EFI/fedora/grub.cfg
|
CentOS Stream | /boot/efi/EFI/centos/grub.cfg |
Anolis OS |
/boot/efi/EFI/anolis/grub.cfg
|
Rocky Linux |
/boot/efi/EFI/rocky/grub.cfg
|
AlmaLinux |
/boot/efi/EFI/almalinux/grub.cfg
|
Sles |
/boot/efi/EFI/sles/grub.cfg
|
Opensuse |
/boot/efi/EFI/opensuse/grub.cfg
|
Uebian |
/boot/efi/EFI/debian/grub.cfg
|
Ubuntu |
/boot/efi/EFI/ubuntu/grub.cfg
|
适用于
- 云服务器ECS