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