CentOS 7 用 UEFI Boot 导致的若干坑的介绍

CentOS 是一个不错的 Linux Distribution, 它是我最喜欢的公司之一 RedHat 发布的 RHEL 重编译的. 几个月前自己组装了一台台机, 在 FreeBSD 和 CentOS 之间徘徊了好久后, 终于决定还是用 CentOS 完事.

安装完毕若干天后重启, 发现有一些问题… 启动失败了! 经过若干小时的痛苦打 patch, 终于让系统变得正常一点了.

CentOS 7 的下载页面是 此处, 因为以后 CentOS 官方还可能有更新ISO, 所以在 fix 之前请注意它是否已经被更新过了.

grub 配置的问题

一般情况下我们使用 grub2-mkconfig 来重新配置 grub 的配置文件, 但是本 ISO 可能有问题, 导致最新的 boot image 没有找到, 因此根据此处提出的 fix 方法介绍, 此处提出的 patch, 修改如下.

首先备份文件/usr/share/grub/grub-mkconfig_lib, 编辑 & 增加一个 patch 文件. 命令如下:

# cp -a /usr/share/grub/grub-mkconfig_lib /usr/share/grub/grub-mkconfig_lib.orig
# vi /tmp/grub-mkconfig_lib.patch

patch 文件内容如下 :

--- a/util/grub-mkconfig_lib.in 2014-06-30 16:16:11.000000000 +0000
+++ a/util/grub-mkconfig_lib.in 2014-12-08 23:05:56.936903046 +0000
@@ -263,13 +263,14 @@

version_find_latest ()
{
- version_find_latest_a=""
- for i in "$@" ; do
- if version_test_gt "$i" "$version_find_latest_a" ; then
- version_find_latest_a="$i"
- fi
- done
- echo "$version_find_latest_a"
+ {
+ for i in "$@"; do
+ echo $i
+ done | grep -v rescue | sed 's/.x86_64$//g' | sort -V -r | sed 's/$/.x86_64/g'
+ for i in "$@"; do
+ echo $i
+ done | grep rescue | sort -V
+ } | head -n 1
}

apply 此 patch.

# patch -b /usr/share/grub/grub-mkconfig_lib /tmp/grub-mkconfig_lib.patch
patching file /usr/share/grub/grub-mkconfig_lib

当然, 如果条件有限, 也可以直接编辑文件, 备份后, 到 /usr/share/grub/grub-mkconfig_lib 目录, 修改version_find_latest 这个 function.

EFI 文件找不到的问题

CentOS 7 UEFI 在 /boot/efi/EFI 目录下有 BOOT, centos 和 redhat 三个子目录. 需要将 redhat/shim.efi 复制一份到 centos 目录下.

效果如下:

[root@yuik EFI]# tree
.
├── BOOT
│   ├── BOOTX64.EFI
│   └── fallback.efi
├── centos
│   ├── fonts
│   │   └── unicode.pf2
│   ├── gcdx64.efi
│   ├── grub.cfg
│   ├── grubenv
│   ├── grubx64.efi
│   └── shim.efi
└── redhat
├── BOOT.CSV
├── MokManager.efi
├── shim.efi
└── shim-redhat.efi

4 directories, 12 files

References:

0007651: grub2-mkconfig creates boot choices in wrong order – CentOS Bug Tracker https://bugs.centos.org/view.php?id=7651

CentOS 7 Install with UEFI Boot and Software RAID1 http://brainscraps.wikia.com/wiki/CentOS_7_Install_with_UEFI_Boot_and_Software_RAID1