一,简介:linux
GRUB legacy存在于MBR(主引导记录)的446字节中,是一个本来由 GNU Project 维护的 多启动 引导器(官方已经中止对其的维护,以升级到GRUB version 2.x),其前身为 GRUB (GRand Unified Bootloader), 最初由 Erich Stefan Boleyn 设计和实现。shell
简单的说,启动引导程序是计算机启动时运行的第一个程序。它可用于选择操做系统分区上的不一样内核,也可用于向这些内核传递启动参数。而后内核逐个初始化操做系统的其他部分。
vim
二,功用:bash
1,GRUB的启动阶段:
网络
stage1:加载mbr;
ide
stage1_5:加载mbr以后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
ui
stage2:磁盘分区(/boot/grub/);this
stage2及内核等一般放置于一个基本磁盘分区:
加密
功用:
spa
⑴提供菜单,并提供交互式借口;
e:编辑模式,用于编辑菜单;
c:命令模式,交互式接口;
⑵加载用户选择的内核式操做系统;
容许传递参数给内核;
可影藏此菜单;
⑶为菜单提供了保护机制;
为编辑菜单进行认证 ;
为启用内核或操做系统进行认证;
GRUB菜单:
按c进入命令行借口:
经常使用命令:
help:获取帮助列表;
help KEYWORD:详细帮助信息;
find (hd#,#) /PATH/TO/SOMEFILE:查找;
root (hd#,#):把哪一个磁盘设定为根设备;
kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件,额外还能够添加许多内核支持使用的cmdline参数;
initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk;
boot:引导启动选定的内核;
grub如何识别设备:
(hd#,#)
hd#:磁盘编号,用数字表示,从0开始编号
#:分区编号,用数字表示,从0开始编号
例:手动选定内核启动
2,grub配置文件:/boot/grub/grub.conf <---- /etc/grub.conf
[root@localhost ~]# ll /etc/grub.conf lrwxrwxrwx. 1 root root 22 Dec 3 2015 /etc/grub.conf -> ../boot/grub/grub.conf [root@localhost ~]# vim /etc/grub.conf
配置项:
default=#:设定默认启动的菜单项;菜单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashp_w_picpath=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING:菜单编辑认证;
title TITLE:定义菜单项“标题”,可出现屡次;
root (hd#,#):grub查找stage2及kernel文件所在设备分区,为grub的“根”;
kernel /PATH/RO/VMLIUNZ_FILE [PARAMETERS]:启动的内核;
initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;
password [--md5] STRING:启动选定的内核或操做系统是,进行认证;
可用命令:greb-md5-crypt 命令生成加密密码;
例:
1,咱们给grub菜单编辑加密,只有输入密码认证才能编辑
1,首先用grub-md5-crypt命令生存密文密码:
[root@localhost ~]# grub-md5-crypt
Password:
Retype password:
$1$4O3AC/$K5PIzVEaUIC10k5IfhYT31
2,而后打开配置文件:/boot/grub/grub.conf
[root@localhost ~]# vim /boot/grub.grub.conf
default=0
timeout=5
splashp_w_picpath=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
password --md5 $1$4O3AC/$K5PIzVEaUIC10k5IfhYT31 <---添加这一行
title CentOS (2.6.32-431.el6.i686)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-431.el6.i686 ro root=UUID=06492fe8-720d-4f10-b140-6943db271086 rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
initrd /boot/initramfs-2.6.32-431.el6.i686.img
[root@localhost ~]#reboot
重启以后看到grub菜单,须要按p输入密才能编辑:
2,若是咱们忘记了root密码,也能够利用grub进入单用户模式找回密码:
步骤:
⑴,编辑grub菜单(选定要编辑的title,然后使用e命令)
⑵,在选定的kernel后附加:1,s,S或single均可以;
⑶,在kernel所在行键入“b”命令;
⑷,进去单用户模式后,直接修改密码就能够了;
三,安装grub:
grub-install 命令安装:
[root@localhost ~]# mount /dev/sdc2 /mnt/
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
bin etc lib media mogdata opt root selinux testing users
dev home lost+found mnt oot proc sbin sys tmp var
[root@localhost mnt]# mkdir ./boot
[root@localhost mnt]# ls
bin dev home lost+found mnt oot proc sbin sys tmp var
boot etc lib media mogdata opt root selinux testing users
[root@localhost mnt]# cd
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc (--root-directory=指定的目录为boot目录的上级目录)
sdc sdc1 sdc2
[root@localhost ~]# grub-install --root-directory=/mnt /dev/sdc2
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.
(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc
[root@localhost ~]# ls /mnt/boot/grub/
device.map ffs_stage1_5 minix_stage1_5 stage2 xfs_stage1_5
e2fs_stage1_5 iso9660_stage1_5 reiserfs_stage1_5 ufs2_stage1_5
fat_stage1_5 jfs_stage1_5 stage1 vstafs_stage1_5
安装完成。
另外,grub-install命令也能够用了修复grub:
例:
先破坏grub:
[root@localhost ~]# dd if=/dev/zero of=/dev/sda bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000748108 s, 596 kB/s
[root@localhost ~]# reboot
重启以后在BIOS中调整从光盘引导系统;
而后选择进入救援模式:
而后会让你选择语言,需不须要网络,而后提示你把当前系统挂载至那个目录,最后会进入shell命令行
有两种方法修复:
第一种:
chroot /mnt/sysp_w_picpath
grub-install --root-directory=/ /dev/sda
第二种:
grub
grub> root (hd#,#)
grub> setup (hd#)
reboot重启
修复完成后,启动前记得拆除磁盘。