Linux系统的启动引导程序有LiLo和grub,但由于LiLo的缺陷–只能识别0-1023范围的柱面构成的分区中的内核文件,因此逐渐被grub代替,但目前的安卓手机都是使用LiLo程序引导的
grub的版本分为:
目前centos 5和centos 6使用的就是 grub legacy 版本
centos 7使用的是 grub2 版本的启动引导程序
Linux系统中,与系统启动相关的文件均存储在/boot目录下.如grub vmlinuz initramfs等等
与grub相关的配置文件包括:/etc/grub.conf和/boot/grub/grub.conf
/etc/grub.conf是指向/boot/grub/grub.conf的软连接,grub程序在引导启动时会读取这个配置文件,并按照这个文件的配置参数引导启动系统
文件内容如下:
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-696.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=2c1d3c99-493f-483b-9abf-c4c7171e4598 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-696.el6.x86_64.img
defaule: 表示有多个grub引导菜单时,选择哪一个作为默认启动引导菜单,
defaule=0:表示默认选择第一个选项进行配置
timeout: 表示选择菜单的时间,如果过了这个时间没有选择则表示使用默认选项
splashimage: 指定引导菜单中的背景图片的路径
titile: 指定选项的名称
root: 表示kernel和initrd文件所在的分区路径,而不是”根分区”;其格式为:
root(hd#,#) 第一个 # 表示第几块硬盘,第二个 # 表示同一个硬盘上的分区,都是从0开始
kernel: 通常是用于指定要运行的内核文件路径,如:/vmlinuz-2.6.32-642.el6.x86_64;另外也可在其后设置相关的内核参数,如:ro表示只读,root表示指定根分区所在路径,关闭selinux等等;
initrd: 为内核运行指定其可用的ramdisk文件,其版本须和内核版本一致
在菜单页面按c即可进入命令行接口,在此命令行接口,我们可以配置相关的grub设置.
grub常用的指令有:
help:查看命令帮助;
root (DEVICE):指定系统和内核文件所在的分区,如root(hd0,0)。
find (hd0,0) /path/to/file:用于查找对应分区下的文件。常用于当不确认内核文件在哪个分区时,可使用此命令确认文件所在路径;支持tab补全;
kernel /path/to/kernel_file:用于指定要运行的内核文件。
initrd /path/to/kernel_file:指定initrd文件;
boot:以当前配置好的grub配置启动系统;
grub程序提供系统保护机制,防止恶意用户随意通过当用户模式修改root密码或启动其他内核
设置认证方式为: 在相应的grub.conf配置文件中添加 passwd –md5 STRING
以下为grub菜单的编辑认证
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
#用户在grub菜单界面要输入相应的密码才能对进入相关的编辑模式或命令行模式
password --md5 $1$3WOVb/$a0JViRBPU3q.ibdBsuFSn/
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
# 此为对应的内核启动提供密码认证
password --md5 $1$3WOVb/$a0JViRBPU3q.ibdBsuFSn/
kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.el6.x86_64.img
使用grub-install命令
grub-initall [--root-directory=DIR] DEVICE
DEVICE: 安装的目标磁盘
--root-director=DIR: 指定grub映像文件的存放位置,默认为当前系统根目录.
grub-install 会在指定的目录下创建 boot/grub 的层级目录
并生成相关的grub文件在DIR/boot/grub/ 目录下
在grub命令行下安装grub
输入grub进入grub命令行
[root@localhost ~]# grub #进入grub命令行
grub> root (hd0,0) #指定grub命令行
grub> setup (hd0,0) #安装grub
grub> quit # 退出grub命令行
在grub程序出现损坏时,我们可以利用上述方法进行修复
# 通过重复读写数据破坏硬盘的MBR
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=400
1+0 records in
1+0 records out
400 bytes (400 B) copied, 0.000281298 s, 1.4 MB/s
# 在系统重启前使用修复安装grub
[root@localhost ~]# grub-install /dev/dsa
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=400
[root@localhost ~]# grub
grub> root (hd0,0)
grub> setup (hd0,0)
bash-4.1# chroot /mnt/sysimage
sh-4.1# grub-install /dev/sda
sh-4.1# exit
至此grub已修复完成,系统应能正常启动。