grub 命令
linux系统的启动引导程序有LiLo和grub,但由于LiLo的缺陷–只能识别0-1023范围的柱面构成的分区中的内核文件,因此逐渐被grub代替,但目前的安卓手机都是使用LiLo程序引导的
grub的版本:
grub的版本分为:
- grub 0.X (grub legacy)
- grub 1.X (grub 2)
目前centos 5和centos 6使用的就是 grub legacy 版本
centos 7使用的是 grub2 版本的启动引导程序
grub的三个阶段
- stage 1: 用于启动Boot loader 来加载stage2的内容至内存中
- stage 1_5:用于识别内核和stage2所在分区的文件系统格式类型,帮助引导stage2
- stage 2: 读取 grub.conf 配置文件,并实现引导功能的扩展
Linux系统中,与系统启动相关的文件均存储在/boot目录下.如grub vmlinuz initramfs等等
与grub相关的配置文件
与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文件,其版本须和内核版本一致
grub程序的功能
- 提供引导菜单,并提供交互式的命令行接口;在菜单界面,按e可进入编辑模式,用于编辑菜单,按c可进入命令行模式
- 加载用户选择的内核或操作系统,并允许传递相应的内核参数给内核;可选择隐藏此菜单
- 为菜单提供保护机制,可 编辑菜单 设置认证 为启用内核 操作系统进行认证, 在系统开启过程中,有几秒的过渡页面,可按任意键进入菜单页面
grub的命令行接口
在菜单页面按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保护机制
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的安装
使用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程序出现损坏时,我们可以利用上述方法进行修复
模拟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
通grub命令行来修复grub程序
[root@localhost ~]# dd if=/dev/zero of=/dev/sda count=1 bs=400
[root@localhost ~]# grub
grub> root (hd0,0)
grub> setup (hd0,0)
模拟grub损坏后,系统重启了的情况下修复grub
- 利用安装光盘进入救援模式进行grub修复
bash-4.1# chroot /mnt/sysimage
sh-4.1# grub-install /dev/sda
sh-4.1# exit
至此grub已修复完成,系统应能正常启动。
- 将损坏的硬盘拆卸挂载到其他Linux系统上进行修复
相关阅读
目 录 第1章 GRUB4DOS入门 1 1.1 用途 1 1.2 安装 1 1.2.1 修改MBR 1 1.2.2
我最近学习Linux 基础,有时候看到一些新的东西,就会去找资料,关于喜欢刨根问底的同学,这个博主的文章是很好的,很棒的,真心的大牛,虚心去
看到网上有关于veket linux的介绍,决定折腾一下据说是最精简的linux,但是安装好以后没有引导器,经过一番搜索找到如下方法,记下来备忘
启动型U盘制作Bootmgr/Grub4DOS/EasyBoot菜单相互切换
Bootmgr/Grub4DOS/EasyBoot这三种菜单的相互切换,以实现更好的兼容性。1.Bootmgr调用Grub4DOS、EasyBootbootmgr是通过BCD文件显示