概述
本文主要介紹如何修改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