GURB详解(实施级)

一、什么是grub

GRand Unified Bootloader,由名字就能看出,这是一个多重开机管理系统。目前在centos 6.x等linux发行版上使用的是0.97版本,在centos 7系列用的是grub2。这里先讨论一下grub0.97版本,grub2的机制已经变了,后续讨论。

二、grub引导的三个阶段

Centos 6.8中在/boot/grub目录下,有如下文件:

其中,有stage1,stage2以及若干个stage1.5。

看字面意思,其启动顺序就是stage1àstage1.5àstage2

stage1执行系统启动,其目的是加载stage2,并将控制权转移到stage2中。stage1.5的作用是连接stage1与stage2。

在stage2阶段,将会读取grub.conf配置文件,根据配置进行设置和显示操作系统选择界面。Stage2包含了除自引导之外的所有功能,是整个grub引导的核心。

首先说stage1,stage1可以看作是booloader的备份,但是又不尽相同,注意,千万不可以将stage1直接覆盖bootloader。

磁盘的第一个扇区,大小为512B,bootloader安装在这个扇区中,占用前446B。然后64B是分区表,接着2B是Magic Number。也就是446+64+2=512

使用dd命令导出磁盘第一个扇区:

dd if=/dev/sda of=./mbr bs=512 count=1

用hexdump打开

红色部分为bootloader,蓝色部分为partation table分区表,黄色部分为Magic Number。

备份bootloader

dd if=/dev/sda of=./mbr.img bs=446 count=1

恢复bootloader

dd if=./mbr.img of=/dev/sda bs=446 count=1

资料中显示,stage1.S被放在0面0道的第1扇区,start.S被放在0面0道的第2扇区,而与boot分区相关的文件系统的xxfs_stage1_5被放在0面0道第3扇区开始的扇区里,其占据的扇区数目与该stage1_5文件的大小有关。而其余的stage1_5以及stage2都作为文件被存放在boot分区里。

可是我在测试环境中第二个扇区、第三个扇区一直到第64个扇区,都是空的。可以认为,stage2在磁盘中的位置被写死到stage1中,stage1无需识别文件系统,直接从磁盘指定位置读取指定长度的段。

这里是个疑问,会在以后的学习中注意。

三、grub的安装与修复

grub的安装有两种方式,分别适应两钟不同的情况。

1、  mbr损坏,但是/boot/grub下所有文件都正常,我们只需要修复mbr。

进入救援模式之后,启动grub shell

grub> root (hd0,0)   //根据个人启动分区的不同进行设置。
root(hd0,0)
 Filesystem type is ext2fs, partition type 0x83
grub> setup (hd0)         
setup(hd0)
 Checking if "/boot/grub/stage1"exists... no
 Checking if "/grub/stage1" exists...yes
 Checking if "/grub/stage2" exists...yes
 Checking if "/grub/e2fs_stage1_5"exists... yes
 Running "embed /grub/e2fs_stage1_5(hd0)"...  27 sectors are embedded.
succeeded
 Running "install /grub/stage1 (hd0)(hd0)1+27 p (hd0,0)/grub/stage2 /grub/grub.conf"... succeeded
Done.

2、  替换引导。比如,linux在安装时就没有安装引导,或者以前用的是lilo,而现在想用grub。

使用grub-install命令即可。

grub-install /dev/sda    //选定你要安装bootloader的磁盘或者分区。

这个命令会自动创建/boot/grub目录,并自动生成stage1 stage1.5和stage2,然后将stage1写入mbr。

四、grub的设置

在这里,首先可以了解一下grub.conf的结构。

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-642.4.2.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=autord_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MD rd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img

default=0 //指定默认的启动项,也就是第几个title。这里是编号为0的title。

timeout=5 //超时时间,5秒钟。5秒钟内不进行选择,那么将会自动启动default所指定的title。

splashimage=(hd0,0)/grub/splash.xpm.gz //背景图片。这个没有什么实质性的功能hiddenmenu //隐藏菜单,这个没啥实质性功能,就是一个定制性的。

pasword zhou //但是这种方式是明文密码,任何人打开grub.conf都能看到。

password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //这种是密文密码,虽然可以修改,但是不可以被简单破解。

下面将要开始指定title,这里所写出的title都会在grub的启动列表中显示出来。每个title即指定一个启动,每个启动必须包括三个元素:

1、root元素:其实就是/boot分区所在位置。有些不寻常的时候,安装系统时,安装介质的识别导致磁盘顺序在系统中错误,root 元素的值在移除安装介质后与系统/boot分区所在的位置不一致。

2、kernel元素:指定Linux的kernel文件,同时指定各属性。具体属性参照扩展区域,这里实质性意义也不大,不太常用到修改kernel的参数。

3、initrd元素:指定initramfs所在的位置(6.x系列),initramfs有系统安装时根据系统硬件选择性编译的驱动,所以它不具备通用性,大部分情况下安装时产生的initramfs只能在当前系统中使用。

title CentOS (2.6.32-642.4.2.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-642.4.2.el6.x86_64.img

password --md5$1$jWNz8/$aqDO19NluYIX1zkc1SVGp. //把密码设置在这里,意义完全不同。这里的作用是启动密码,如果要启动该内核,必须输入密码。这个也是拿来玩的东西。

title CentOS (2.6.32-431.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/mapper/VolGroup-lv_root rd_NO_LUKS.UTF-8 rd_NO_MDrd_LVM_LV=VolGroup/lv_swap SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

initrd /initramfs-2.6.32-431.el6.x86_64.img

综上所述,如果我们要写一个最简化的grub.conf,格式可以如下:

timeout 5    //这个选项最好有,否则重启linux后不会自动进入系统,而是等待启动项选择。
title linux
root (hd0,0) 
kernel /vmlinuz-2.6.32-642.4.2.el6.x86_64 ro root=/dev/sda3
initrd  /initramfs-2.6.32-642.4.2.el6.x86_64.img

五、grub的排错

linux偶尔会遇到开机无法启动的情况,无法启动的原因有很多,这里简单写一下常见的。

1、  开机直接显示grub shell。

其实这种是最为容易解决的。因为能出现grub shell说明正常进入了stage2,但是由于grub.conf无法找到或者grub.conf中所写入的配置不正确,导致grub无法引导启动。

如果是grub.conf文件的位置被修改而无法找到了,那么在进入grub shell后可以手动查找grub.conf文件,然后

grub>configfile /grub/grub.conf.bak

如果是grub.conf配置出错,或者不存在了。

针对这种问题,可以手动指定grub.conf中title模块的3个元素进行启动。

grub>root (hd0,0)
grub>kernel / vmlinuz-2.6.32-431.el6.x86_64 roroot=/dev/sda3
grub>initrd /initramfs-2.6.32-431.el6.x86_64.img
grub>boot

这样就可以直接进入系统,然后针对grub.conf进行修改即可。

时间: 2024-10-09 09:28:49

GURB详解(实施级)的相关文章

详解亿级大数据表的几种建立分区表的方式

自5.1开始对分区(Partition)有支持,一张表最多1024个分区 查询分区数据: SELECT * from table PARTITION(p0) 水平分区(根据列属性按行分) 举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录. 垂直分区(按列分) 举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高

Android研究之英特尔 Android* 开发人员指南上的对等应用详解

简介 当没有 Wi-Fi 访问点或互联网访问时,Android* 应用可能需要对等连接在两台或多台 Android* 设备之间建立连接. 比如,文件共享应用和多人游戏. 该功能可使用 NFC.蓝牙或 Wi-Fi 对等技术来实施. 特定案例中的首选技术需要根据所需的距离.连接速度.功耗和独特的技术特性来决定. 本文将对 Wi-Fi 对等技术进行评估. Wi-Fi 对等(P2P)支持具备适当应用的 Android 4.0 或更高版本在没有接入点的情况下通过 Wi-Fi 彼此连接. Android W

LVS详解(实施级)

LVS使用详解 一.LVS概述 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.LVS是开源负载均衡的代表性软件,它工作在内核级别,具备极好的性能和生产环境可用性.普通双CPU,8G服务器,在DR模式下即可承载高达数万甚至数十万的并发连接数. LVS是四层负载均衡软件,与nginx和haproxy等七层负载均衡不同的是,它只能实现数据包的转发和四层一下内容的

OKR详解及其实施

这阵子大家一直在讨论Google的绩效考核方法OKR,我们发现很多文章和说法存在错误和误导,现将其来龙去脉,操作步骤,操作技巧阐述如下,供大家参考. OKR全称是Objectives and Key Results即目标与关键成果法,OKR是一套定义和跟踪目标及其完成情况的管理工具和方法: 1999年 Intel公司发明了这种方法,后来被 John Doerr推广到 Intel和Oracle Google,LinkedIn等逐步流传起来,现在广泛应用于IT.风险投资.游戏.创意等以项目为主要经营

块级格式化上下文(block formatting context)、浮动和绝对定位的工作原理详解

CSS的可视化格式模型中具有一个非常重要地位的概念——定位方案.定位方案用以控制元素的布局,在CSS2.1中,有三种定位方案——普通流.浮动和绝对定位: 普通流:元素按照先后位置自上而下布局,inline元素水平排列,直到行被占满后换行,block元素则被渲染为完整的一行,除非指定,所有元素默认为普通流定位. 浮动:浮动布局中,元素首先按照普通流位置出现,然后根据浮动方向尽可能向左或右偏移,效果与文本环绕相似. 绝对定位:元素会脱离普通流,因此绝对定位元素不会对其兄弟元素产生影响(与float不

华为USG防火墙及NGFW高可用性的规划与实施详解

华为USG防火墙及NGFW高可用性的规划与实施详解 课程目标: 该课程程为卷B,它紧接卷A所描述的基础内容,开始进入防火墙的高可性的规划与实施,本课程卷B的核心目标是:一.从真正意义上去理解防火墙的双机热备的工作原理:二.让工程人员能够实施基于不同防火墙工作模式的双机热备并结合实践的环境进行故障排除:三.突破学员仅在安全认证学习过程中所理解的防火墙双机热备的内容,在实践的环境中防火墙的双机热备技术及可能引发的问题远不止安全认证学习中所描述的内容. 为USG防火墙及NGFW高可用性的规划与实施详解

多自制系统之间MPLS VPN 实施详解

实验拓扑入上如图所示: 基础配置说明: 所有设备都配置lo 0 地址,地址为设备序列号如R1(1.1.1.1/32); 设备互联地址使用10.1.R1R2.R1,如R1和R2互联地址就为10.1.12.1; AS100 配置ospf进程100,AS200配置OSPF进程200,lo 0接口通告进OSPF进程; 基本配置: 在AS100和AS200中配置OSPF进程100和200 在AS100和AS200中配置mpls PE-CE路由器之间配置OSPF,并在PE路由器上相互重分发 配置思路: PE

分享一位国外大牛写的不规则物体像素级碰撞检测算法及详解

最近在做一个有关投篮的小游戏,需要用到像素级碰撞检测,as3自带的hitTestObject显然无法满足需要.网上搜寻了一下,在9ria挖坟挖到两篇好文章: 分享一个超高效的不规则物体碰撞检测的类~~ [Lii]超高效的不规则物体碰撞检测<效率优化> 第一篇文章介绍了一位国外大牛写的不规则物体像素级碰撞检测算法,原理是用bitmap绘制两对象不透明区域,利用混合模式计算出两对象的相交区域. 第二篇文章则在该算法的基础上进行了效率的优化,原理是判断出两对象发生hitTestObject碰撞后,将

Linux的启动流程以及GRUB详解

 一.Linux引导和启动流程       概述,计算机电源接通后通过BISO之后,没有问题,就会去硬盘上找到MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区,它记录着主引导记录中包含了硬盘的一系列参数和一段引导程序,其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序(GRUB).GRUB启动引导器是计算机启动过程中运行的第一个真正的软件,GRUB负责加载启动硬盘分区中的操作