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