目录
GRUB(Boot Loader):GRand Unified Bootloader
grub 0.x:grub legacy
grub 1.x:grub2
一、grub legacy
stage1:MBR
stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub/)
配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
stage2及内核等通常放置于一个基本磁盘分区
1.功用
①提供菜单、并提供交互式接口
e:编辑模式,用于编辑菜单;
c:命令模式,交互式接口;
②加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
③为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
如何识别设备:
(hd#,#)
hd#:磁盘编号,用数字表示;从0开始编号
#:分区编号,用数字表示; 从0开始编号
e.g. (hd0,0)
2.grub的命令行接口
help:获取帮助列表
help KEYWORD:详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#) 把某个磁盘分区设定为根设备
kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk
boot:引导启动选定的内核
3.手动在grub命令行接口启动系统
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
4.配置文件:/boot/grub/grub.conf
配置项:
default=#:设定默认启动的菜单项;落单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径
hiddenmenu:隐藏菜单
password [--md5] STRING:菜单编辑认证;
title TITLE:定义菜单项“标题”, 可出现多次
root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件
password [--md5] STRING:启动选定的内核或操作系统时进行认证
grub-md5-crypt命令
5.进入单用户模式
编辑grub菜单(选定要编辑的title,而后使用e命令)
在选定的kernel后附加
1, s, S或single都可以
在kernel所在行,键入“b”命令
6.安装grub
①grub-install
grub-install --root-directory=ROOT /dev/DISK
②grub
grub> root (hd#,#)
grub> setup (hd#)
练习
(1)新加硬盘,提供直接单独运行bash系统
①对新加的硬盘进行分区操作
fdisk /dev/sdb
Command (m for help): n
p
Partition number (1-4): 1
First cylinder (1-2610, default 1):
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +100M
Command (m for help): n
Partition number (1-4): 2
First cylinder (15-2610, default 15):
Last cylinder, +cylinders or +size{K,M,G} (15-2610, default 2610): +1G
Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
Command (m for help): n
Partition number (1-4): 3
First cylinder (147-2610, default 147):
Last cylinder, +cylinders or +size{K,M,G} (147-2610, default 2610): +5G
Command (m for help): w
②通知内核重新读取硬盘分区表
命令:partx -a /dev/sdb
命令:cat /proc/partitions 查看内核是否已经识别新的分区
③对分区格式化
命令:mke2fs -t ext4 /dev/sdb3
命令:mkswap /dev/sdb2
④挂载新磁盘
命令:mkdir -p /test/boot
命令:mount /dev/sdb1 /test/boot
⑤安装grub并明确告诉根在何处
命令:grub-install --root-directory=/test /dev/sdb
⑥为boot目录提供内核文件、initramfs
命令:cp /boot/vmlinuz-2.6.32-754.el6.x86_64 /test/boot/vmlinuz-test-1.0
命令:cp /boot/initramfs-2.6.32-754.el6.x86_64.img /test/boot/initramfs-test-1.0.img
⑦为boot目录提供grub配置文件
命令:vim /test/boot/grub/grub.conf
default=0
timeout=5
title CentOS-Test(Express)
root(hd0,0)
kernel /vmlinuz-test-1.0 ro root=/dev/sda3 selinux=0 init=/bin/bash
initrd /initramfs-test-1.0.img
⑧挂载sdb3
命令:mkdir /test/sysroot
命令:mount /dev/sdb3 /test/sysroot
命令:cd /test/sysroot
命令:mkdir -pv etc bin sbin lib lib64 dev proc sys tmp var usr home root mnt media
⑨添加一个程序
命令:cp /bin/bash /test/sysroot/bin
命令:ldd /bin/bash
P.S. 基于动态编译的程序,还依赖于共享库文件
⑩根切换测试
命令:chroot /test/sysroot
⑪启动效果
(2)破坏本机grub stage1,而后在救援模式下修复之
a.破坏后不重启,修复方法1
①备份MBR
命令:
grub-md5-crypt dd if=/dev/sda of=/root/mbr.bak count=1 bs=512
②破坏bootloader
命令:
dd if=/dev/zero of=/dev/sda bs=446 count=1
③修复
命令:
grub-install --root-directory=/ /dev/sda
b.破坏后不重启,修复方法2
命令:grub
b.破坏后重启,修复方法
①破坏MBR
dd if=/dev/zero of=/dev/sda bs=123 count=1
②重启
③加载系统安装光盘,进入救援模式(类似于WinPE)修复
boot: linux rescue
命令:chroot /mnt/sysimage
命令:grub-install --root-directory=/ /dev/sda
命令:reboot
(3)为grub设备保护功能
①获取md5密码串
命令:grub-md5-crypt
②配置/boot/grub/grub.conf
password --md5 $1$x6lH50$kuKxDqc.Qk3FNjesp9bx4/
③启动效果
参考资料:
①马哥随堂笔记
②《鸟哥的Linux私房菜-基础篇》
注:诚恳欢迎读者对本文提出批评意见,若发现存在错误,我定第一时间修改。如果读者觉得文章对您有帮助,欢迎点赞鼓励一下哟٩(๑❛ᴗ❛๑)۶。