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/
total72
-rwxr-xr-x.1root root8702Nov24201500_header
-rwxr-xr-x.1root root992May4201500_tuned
-rwxr-xr-x.1root root230Nov24201501_users
-rwxr-xr-x.1root root10232Nov24201510_linux
-rwxr-xr-x.1root root10275Nov24201520_linux_xen
-rwxr-xr-x.1root root2559Nov24201520_ppc_terminfo
-rwxr-xr-x.1root root11169Nov24201530_os-prober
-rwxr-xr-x.1root root214Nov24201540_custom
-rwxr-xr-x.1root root216Nov24201541_custom
-rw-r--r--.1root root483Nov242015README
[root@CT7~]#
修改完配置后,都需要通过grub2-mkconfig命令下发。
[root@CT7~]#grub2-mkconfig-o/boot/grub2/grub.cfg
Generatinggrub configuration file...
Foundlinux image:/boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
Foundinitrd image:/boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
Foundlinux image:/boot/vmlinuz-3.10.0-327.el7.x86_64
Foundinitrd image:/boot/initramfs-3.10.0-327.el7.x86_64.img
Foundlinux image:/boot/vmlinuz-0-rescue-98af9a09ce4e42a397fc1a169eff4005
Foundinitrd 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=CentOSLinux(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=CentOSLinux(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=CentOSLinux(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-default1
#@更新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<
if[-f \${prefix}/user.cfg];then
source \${prefix}/user.cfg
if[-n \${GRUB2_PASSWORD}];then
setsuperusers="root"
exportsuperusers
password_pbkdf2 root \${GRUB2_PASSWORD}
fi
fi
EOF
[root@CT7 grub.d]#
可以看出默认用户名是root,密码则需要通过grub2-setpassword命令来设定。
#@设置密码
[root@CT7 grub.d]#grub2-setpassword
Enterpassword:
Confirmpassword:
#@查看密码文件
[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
参考资料