最新消息:网站迁移至香港,数据恢复中。

Grub2相对Grub的一些改进和注意事项(CentOS7)

Linux ipcpu 1176浏览

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 。

  1. [root@CT7 ~]# cat /etc/default/grub
  2. GRUB_TIMEOUT=5
  3. GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
  4. GRUB_DEFAULT=saved
  5. GRUB_DISABLE_SUBMENU=true
  6. GRUB_TERMINAL_OUTPUT="console"
  7. GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0"
  8. GRUB_DISABLE_RECOVERY="true"
  9. [root@CT7 ~]# ll /etc/grub.d/
  10. total 72
  11. -rwxr-xr-x. 1 root root 8702 Nov 24 2015 00_header
  12. -rwxr-xr-x. 1 root root 992 May 4 2015 00_tuned
  13. -rwxr-xr-x. 1 root root 230 Nov 24 2015 01_users
  14. -rwxr-xr-x. 1 root root 10232 Nov 24 2015 10_linux
  15. -rwxr-xr-x. 1 root root 10275 Nov 24 2015 20_linux_xen
  16. -rwxr-xr-x. 1 root root 2559 Nov 24 2015 20_ppc_terminfo
  17. -rwxr-xr-x. 1 root root 11169 Nov 24 2015 30_os-prober
  18. -rwxr-xr-x. 1 root root 214 Nov 24 2015 40_custom
  19. -rwxr-xr-x. 1 root root 216 Nov 24 2015 41_custom
  20. -rw-r--r--. 1 root root 483 Nov 24 2015 README
  21. [root@CT7 ~]#

修改完配置后,都需要通过grub2-mkconfig命令下发。

  1. [root@CT7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
  2. Generating grub configuration file ...
  3. Found linux image: /boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
  4. Found initrd image: /boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
  5. Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
  6. Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
  7. Found linux image: /boot/vmlinuz-0-rescue-98af9a09ce4e42a397fc1a169eff4005
  8. Found initrd image: /boot/initramfs-0-rescue-98af9a09ce4e42a397fc1a169eff4005.img
  9. done
  10. [root@CT7 ~]#

Grub2修改内核启动顺序

在CentOS7中,提供了一个软件grubby,可以用来查看grub策略,如下:

  1. #@列出所有内核,这个命令比较常用
  2. [root@CT7 ~]# grubby --info=ALL
  3. index=0
  4. kernel=/boot/vmlinuz-3.10.0-514.2.2.el7.x86_64
  5. args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
  6. root=/dev/mapper/rootvg01-lv01
  7. initrd=/boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
  8. title=CentOS Linux (3.10.0-514.2.2.el7.x86_64) 7 (Core)
  9. index=1
  10. kernel=/boot/vmlinuz-3.10.0-327.el7.x86_64
  11. args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
  12. root=/dev/mapper/rootvg01-lv01
  13. initrd=/boot/initramfs-3.10.0-327.el7.x86_64.img
  14. title=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
  15. index=2
  16. kernel=/boot/vmlinuz-0-rescue-98af9a09ce4e42a397fc1a169eff4005
  17. args="ro crashkernel=auto rd.lvm.lv=rootvg01/lv01 rhgb quiet net.ifnames=0 biosdevname=0 "
  18. root=/dev/mapper/rootvg01-lv01
  19. initrd=/boot/initramfs-0-rescue-98af9a09ce4e42a397fc1a169eff4005.img
  20. title=CentOS Linux (0-rescue-98af9a09ce4e42a397fc1a169eff4005) 7 (Core)
  21. index=3
  22. non linux entry
  23. #@列出默认内核
  24. [root@CT7 ~]# grubby --default-kernel
  25. /boot/vmlinuz-3.10.0-327.el7.x86_64
  26. [root@CT7 ~]# grubby --default-index
  27. 1
  28. #@设置默认内核
  29. [root@CT7 ~]# grubby --set-default /boot/initramfs-3.10.0-514.2.2.el7.x86_64.img
  30. #@设置启动顺序,编号从0开始
  31. [root@CT7 ~]# grub2-set-default 1
  32. #@更新GRUB
  33. [root@CT7 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg

注意:尝试了grubby修改grub,发现不生效,还是用grub2-set-default吧。

grub2设置密码

grub2中密码设置,在/etc/grub.d/01_users里有相关定义(CentOS7)

  1. [root@CT7 grub.d]# cat /etc/grub.d/01_users
  2. #!/bin/sh -e
  3. cat << EOF
  4. if [ -f \${prefix}/user.cfg ]; then
  5. source \${prefix}/user.cfg
  6. if [ -n \${GRUB2_PASSWORD} ]; then
  7. set superusers="root"
  8. export superusers
  9. password_pbkdf2 root \${GRUB2_PASSWORD}
  10. fi
  11. fi
  12. EOF
  13. [root@CT7 grub.d]#

可以看出默认用户名是root,密码则需要通过grub2-setpassword命令来设定。

  1. #@设置密码
  2. [root@CT7 grub.d]# grub2-setpassword
  3. Enter password:
  4. Confirm password:
  5. #@查看密码文件
  6. [root@CT7 grub.d]# cat /boot/grub2/user.cfg
  7. GRUB2_PASSWORD=grub.pbkdf2.sha512.10000.FAFA0A09BD3F228BA786EB2C1BD41255E2F79972E406E8C2EB2FBB79227ABEC2696F466916FD35625C56BA1BE51B3BE46F41539501CC8305DFA8434EA5FD74D4.54E2C5C81CF5C65569EFD4F8BDD6AA16103FA12F22C4BC075ED47B46C0C77F7426AFB476A7DD97A840FCE2AB546E1B5CBD353A0F7B5D9A27D8F4D41332533AF1
  8. [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后可以重置密码了。

  1. mount -o remount,rw /sysroot
  2. chroot /sysroot
  3. 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

转载请注明:IPCPU--网络之路 » Grub2相对Grub的一些改进和注意事项(CentOS7)