Grub2相对Grub的一些改进和注意事项(CentOS7).md
Grub2概述
大约2002年左右,Yoshinori K. Okuji在PUPA重写了GRUB,使他更清晰,安全,健壮,更强大,PUPA最后把他重命名为GRUB2,把原来版本的grub命名为GRUB Legacy。
Grub2支持更多的特性和功能,包括自动搜索可用的内核和硬盘中的可用系统、支持更多分区格式、模块化设计等。
CentOS从7系列版本开始使用grub2,ubuntu从9.10开始使用grub2。本文以CentOS7为例。
Grub2配置的修改
grub2 包含一个完全修改过的配置文件及目录,menu.list(grub.conf)不再使用 。
grub2采用模块化的设计,主要配置文件是/boot/grub2/grub.cfg,默认情况下允许修改此文件,而是修改其他配置,最后通过grub-mkconfig名重新生成。
grub2可以修改的配置文件主要是/etc/default/grub 和 /etc/grub.d 。
[root@CT7 ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0"
GRUB_DISABLE_RECOVERY="true"
[root@CT7 ~]# ll /etc/grub.d/
total 72
-rwxr-xr-x. 1 root root 8702 Nov 24 2015 00_header
-rwxr-xr-x. 1 root root 992 May 4 2015 00_tuned
-rwxr-xr-x. 1 root root 230 Nov 24 2015 01_users
-rwxr-xr-x. 1 root root 10232 Nov 24 2015 10_linux
-rwxr-xr-x. 1 root root 10275 Nov 24 2015 20_linux_xen
-rwxr-xr-x. 1 root root 2559 Nov 24 2015 20_ppc_terminfo
-rwxr-xr-x. 1 root root 11169 Nov 24 2015 30_os-prober
-rwxr-xr-x. 1 root root 214 Nov 24 2015 40_custom
-rwxr-xr-x. 1 root root 216 Nov 24 2015 41_custom
-rw-r--r--. 1 root root 483 Nov 24 2015 README
[root@CT7 ~]#
修改完配置后,都需要通过grub2-mkconfig命令下发。
[root@CT7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-98af9a09ce4e42a397fc1a169eff4005
Found initrd image: /boot/initramfs-0-rescue-98af9a09ce4e42a397fc1a169eff4005.img
done
[root@CT7 ~]#
Grub2修改内核启动顺序
在CentOS7中,提供了一个软件grubby,可以用来查看grub策略,如下:
#@列出所有内核,这个命令比较常用
[root@CT7 ~]# grubby --info=ALL
index=0
kernel=/boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
root=/dev/mapper/rootvg01-lv01
initrd=/boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
title=CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)
index=1
kernel=/boot/vmlinuz-3.10.0-327.el7.x86_64
args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
root=/dev/mapper/rootvg01-lv01
initrd=/boot/initramfs-3.10.0-327.el7.x86_64.img
title=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
index=2
kernel=/boot/vmlinuz-0-rescue-98af9a09ce4e42a397fc1a169eff4005
args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
root=/dev/mapper/rootvg01-lv01
initrd=/boot/initramfs-0-rescue-98af9a09ce4e42a397fc1a169eff4005.img
title=CentOS Linux (0-rescue-98af9a09ce4e42a397fc1a169eff4005) 7 (Core)
index=3
non linux entry
#@列出默认内核
[root@CT7 ~]# grubby --default-kernel
/boot/vmlinuz-3.10.0-327.el7.x86_64
[root@CT7 ~]# grubby --default-index
1
#@设置默认内核
[root@CT7 ~]# grubby --set-default /boot/initramfs-3.10.0-514.2.2.el7.x86
_64.img #@设置启动顺序,编号从0开始
[root@CT7 ~]# grub2-set-default 1
#@更新GRUB
[root@CT7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
注意:尝试了grubby修改grub,发现不生效,还是用grub2-set-default吧。
grub2设置密码
grub2中密码设置,在/etc/grub.d/01_users里有相关定义(CentOS7)
[root@CT7 grub.d]# cat /etc/grub.d/01_users
#!/bin/sh -e
cat << EOF
if [ -f \${prefix}/user.cfg ]; then
source \${prefix}/user.cfg
if [ -n \${GRUB2_PASSWORD} ]; then
set superusers="root"
export superusers
password_pbkdf2 root \${GRUB2_PASSWORD}
fi
fi
EOF
[root@CT7 grub.d]#
可以看出默认用户名是root,密码则需要通过grub2-setpassword命令来设定。
#@设置密码
[root@CT7 grub.d]# grub2-setpassword
Enter password:
Confirm password:
#@查看密码文件
[root@CT7 grub.d]# cat /boot/grub2/user.cfg
GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.FAFA0A09BD3F228BA786EB2C1BD41255E2F79972E406E8C2EB2FBB79227ABEC2696F466916FD35625C56BA1BE51B3BE46F41539501CC8305DFA8434EA5FD74D4.54E2C5C81CF5C65569EFD4F8BDD6AA16103FA12F22C4BC075ED47B46C0C77F7426AFB476A7DD97A840FCE2AB546E1B5CBD353A0F7B5D9A27D8F4D41332533AF1
[root@CT7 grub.d]#
此处不需要使用grub2-mkconfig了,密码存在user.cfg里的。
Grub2磁盘编号的变更
旧版的 grub 不论磁盘还是分区的起始号码都是 0 号,而 grub2 在分区的部分是以 1 开始编号。
如下:
(hd0,msdos1)第一块磁盘,第一个分区
(hd1,gpt2) 第二块磁盘,第二个分区(GPT格式)
重置root密码
在新版的systemd管理机制中,默认的rescue模式是无法直接取得root权限的。
需要在 linux16 的那行最后加上“rd.break”参数来处理。
之后会进入到RAMFS,root分区会挂载到/sysroot。
重新mount和chroot后可以重置密码了。
mount -o remount,rw /sysroot
chroot /sysroot
echo "your_root_new_pw" | passwd --stdin root
参考资料
https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/168.html
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/sec-Making_Persistent_Changes_to_a_GRUB_2_Menu_Using_the_grubby_Tool.html