Linux引导程序-grub
2017年05月26日

概述

grub是系统引导程序,及由这个工具可以引导硬盘上的多个系统,并且支持多种操作.同时可以设置密码验证,引导菜单美化

安装

emerge grub

现在gentoo已经默认使用grub2了

配置

更新grub配置

mount /dev/sdxx /boot
grub2-mkconfig -o /boot/grub/grub.cfg

安装grub到MBR

grub2-install /dev/sdx

为了个性化设置grub配置,可以修改grub的配置参数.再利用grub2-mkconfig更新配置

vim /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="rootfstype=btrfs rootflags=subvol=rootfs"

密码设置

定义一个超级用户名

set superusers="supermaster,supermaster2"

设置密码

password supermaster 123

其他用户直接设置就可以了,不需要创建用户

password user1 abc

加密配置文件的密码

grub2-mkpasswd-pbkdf2

输入密码

PBKDF2 hash of your password is grub.pbdf2.sha512.10000.xxxx....xxxx

更新密码设置

password_pbkdf2 supermaster grub.pbdf2.sha512.10000.xxxx....xxxx
password_pbkdf2 user1 grub.pbdf2.sha512.10000.xxxx....xxxx

如果要使用密码验证的功能,必须要设置superusers.对于任何引导菜单,如果不进行设置,只有superusers才能引导

menuentry "A"{
    # 只允许superuser验证登录
}
menuentry "B" --unrestricted {
    # 不需要身份验证,任何用户都可以登录
}
menuentry "C" --users=user1,user2 {
    # 只允许superuser,user1,user2登录 
    # 注意多个用户用逗号分隔,不用包含超级用户
}

可以把密码用户设置写到/etc/grub.d/00_header里,这样grub2-mkconfig生成配置文件时会自动载入

对于菜单项的配置可以修改/etc/grub.d/10_linux和40_custom等文件

典型菜单写法

重启写法

menuentry "重启"{
    reboot
}

关机写法

menuentry "关机"{
    halt
}

从主引导启动

最后一句或者chainloader (hd0)+1

menuentry "启动主引导记录 " {
    set root=(hd0)
    chainloader +1
}

从某个分区启动

从第一磁盘的第一分区启动
最后一句或者chainloader (hd0,1)+1

menuentry "启动分区引导记录 1" {
    set root=(hd0,1)
    chainloader +1
}

从存在bootmgr文件的那个分区启动

menuentry "启动分区引导记录 2" {
    search --file /bootmgr --set=root
    chainloader +1
}

最后一句或者 chainloader (hd0,1)+1

启动某个引导文件

menuentry "启动 G4D"{
    search --file /grldr --set=root
    insmod ntldr
    ntldr /grldr
}

启动efi件

menuentry "启动EFI SHELL" {
    echo "正在启动EFI SHELL,请等待...."
    search --file /rdtobot/efi_file/boot/bootx64.efi --set=root
    chainloader ($root)/rdtobot/efi_file/boot/bootx64.efi
}

启动IMG文件

menuentry "启动 MHDD" {
    search --file /neyan/grub/memdisk --set=root
    linux16  /neyan/grub/memdisk
    initrd16 /rdtobot/MHDD.img
}

启动ISO文件

menuentry "列出操作系统" {
    search --file /neyan/grub/memdisk --set=root
    linux16  /neyan/grub/memdisk  iso
    initrd16 /rdtobot/LSTSYS.iso
}

子菜单写法

submenu "我是一级菜单" {
    menuentry "我是二级菜单1" {
        echo "我是运行结果1"
    }
    menuentry "我是二级菜单2" {
        echo "我是运行结果2"
    }
}