Bootloader:

GRUB:GRand Uniform Bootloader,通用统一引导加载器;

grub 0.x:grub legacy

grub 1.x:grub2


grub legacy:

1st stage: stage1,MBR的前446Bytes;

1.5 stage:stage1_5,MBR之后的若干个扇区中;让stage1中的bootloader程序能够识别stage2所在的分区的文件系统;

2nd stage:stage2,磁盘的启动分区,

注意:stage2及内核核心文件必须放置在同一个基本磁盘分区上;


stage2提供的功能:

1.加载操作系统内核核心文件;

2.提供一个菜单和交互式接口;

3.允许用户编辑菜单内容;

4.命令行接口操作模式;

5.身份认证机制,以保证菜单编辑和内核启动的安全;


grub的命令行界面:

grub> 


grub的命令行界面中的常用命令:

help:获取所有的grub命令的名称列表和简要使用方法;

help GRUB_CMD:显示特定命令的详细帮助信息;

root (hd#,#):将指定磁盘的指定分区作为grub程序的根设备;

hd#:磁盘编号,#一般是从0开始的数字;如hd0表示第一块磁盘;

#:分区编号,#一般是从0开始的数字,如0表示第一个分区;


(hd0,0):当前计算机上的第一块磁盘的第一个分区;

find (hd#,#):从指定的分区中搜索文件,并显示出文件所在位置;

kernel /PATH/TO/KERNEL_CORE_FILE:设定本次启动时用到的内核文件的绝对路径;额外还可以在kernel命令中,为内核启动添加更多的内核参数;

ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}

initrd /PATH/TO/initramfs-VERSION-release.img


grub的配置文件:

/boot/grub/grub.conf   <--- /etc/grub.conf

default=0

设定默认启动菜单项;整个菜单中的所有的title是从0开始编号的;

timeout=5

用户未作出选择时,grub会自动引导默认菜单对应的内核的超时时间;

splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz

grub的背景图片对应的路径;

hiddenmenu

隐藏grub的启动菜单

password --md5 CRYPTED_PASSWORD

为了保护菜单设置的密码,通常用于防止随意进入单用户模式;

title CentOS 6 (2.6.32-573.el6.x86_64)

定义菜单项中的各个"标题",可以定义多个title项;至少有一项;

  root (hd0,0)

  指定grub的根设备,通常是用来安装grub的那个分区;

  kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=5ebb0e76-bb19-4a80-9c70-0d101c0778e1 nomodeset 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 /initramfs-2.6.32-573.el6.x86_64.img

  内核所对应的ramdisk(ramfs)文件

password --md5 CRYPTED_PASSWORD

保护操作系统内核的启动;


自制小Linux:

1.在某个正常运行的CentOS里添加一块硬盘;

2.对硬盘分区,创建相应的文件系统,并挂载(/mnt/boot, /mnt/sysroot);

3.安装grub程序

# grub-install --root-directory=/mnt(boot的父目录) /dev/sdb

4.为小Linux的根分区创建目录层级结构:

# mkdir -pv /mnt/sysroot/{bin,boot,dev,etc,lib,lib64,proc,sys,mnt,media,tmp,var,usr,sbin}

5.复制内核文件及ramdisk文件到目标系统的启动分区;

# cp /boot/vmlinuz-VERSION-release /mnt/boot

# cp /boot/initramfs-VERSION-release.img /mnt/boot

6.给grub提供配置文件:

default=0

timeout=10

title Mylinux (1.0.0)

root (hd0,0)

kernel /vmlinuz-VERSION-release ro root=/dev/sda3 selinux=0 init=/bin/bash

initrd /initramfs-VERSION-release.img

7.将/bin/bash及其共享库文件,复制到/mnt/sysroot下对应的目录中;除此之外,还可以复制其他的各应用程序及相应的共享库文件;

8.多执行几次sync命令,使得内存中缓存或缓冲的数据被保存到磁盘上;

9.新建虚拟机,将小硬盘作为新虚拟机的硬盘使用;将宿主系统挂起之后,再启动小Linux即可。


小实验:

破坏grub,在重启之前可以使用下列方法恢复:dd命令

1.# grub-install --root-directory=/ /dev/sda

2.# grub

grub> root (hd0,0)

grub> setup (hd0)

grub> quit

#


破坏grub或者grub.conf配置文件,重启之后无法正确引导内核;可以使用光盘或U盘等其他的引导设备将系统引导起来,并进入rescue模式,其他操作方法如上。


POST --> BootSequence(BIOS) --> BootLoader(GRUB, MBR-stage1) --> stage1_5 --> stage2 --> kernel --> init