如何修改Linux镜像Grub文件中的文件磁盘标识符为UUID

概述

本文主要介绍如何修改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的操作如下:

  1. 远程连接ECS实例,关于如何远程连接ECS实例,请参见通过密码或密钥认证登录Linux实例
  2. 执行以下命令,查看当前Linux实例中存在的块设备信息。
    blkid
    系统显示类似如下。
    /dev/vda1: UUID="989ac477-64f2-449f-8415-25b1a5f7d47f" TYPE="xfs"
  3. 执行以下命令,编辑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
    ......
  4. 执行以下命令,检查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