清理硬盘底层层文件是指什么

首先简单认识一下硬盘的物理结构,硬盘内部的物理结构很复杂,只能从大的颗粒度去看内部的结构
总体来说,硬盘结构包括:盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份。所有的盘片(一般硬盘里有多个盘片,盘片之间平行)都固定在一个主轴上。在每个盘片的存储面上都有一个磁头,磁头与盘片之间的距离很小(所以剧烈震动容易损坏),磁头连在一个磁头控制器上,统一控制各个磁头的运动。磁头沿盘片的半径方向动作,而盘片则按照指定方向高速旋转,这样磁头就可以到达盘片上的任意位置了。
先上几张美图:
基本的结构就是这样子的,至于硬盘是如何进行读写的,必须要知道磁盘盘片是如何划分的?否则你只知道磁头在盘片上动来动去。
盘片上涉及的基本概念
整个硬盘上一般有很多的盘片组成,每个盘片如同切西瓜一样被“切”成一块一块的扇面,同时沿着半径的方向被划分成了很多同心圆,就是传说中的磁道,每条磁道被扇面切成很多的扇形区域叫做扇区(扇区是从磁盘读出和写入信息的最小单位,通常大小为512字节),不同盘片上的同半径磁道组成了柱面,这些都是磁盘物理上的概念,知道便可。有了这些概念,我帮便可以计算磁盘的容量:
磁头数&×&磁道(柱面)数&×&每道扇区数&×&每扇区字节数
l&&&&&&&&&磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头;
l&&&&&&&&&磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据;
l&&&&&&&&&柱面(cylinder)数:同磁道数量;
l&&&&&&&&&扇区(sector)数:每个磁道都别切分成很多扇形区域,每道的扇区数量相同;
l&&&&&&&&&圆盘(platter)数:就是盘片的数量。
硬盘上的数据定位
每个扇区可存储128×2的N次方(N=0.1.2.3)字节的数据(一般为512B),扇区为数据存储的最小单元,从上图可知,外圈的扇区面积比内圈大,为何存储的数据量相同,这是因为内外圈使用的磁物质密度不同,但现在的硬盘已经采用内外圈同密度物质来存储数据了,以减少类似“大面积小数据”的浪费情况。(此时的内外磁道的扇区数量将不同,具体细节省略)
有了扇区(sector),有了柱面(cylinder),有了磁头(head),显然可以定位数据了,这就是数据定位(寻址)方式之一,CHS(也称3D),对早期的磁盘(上图所示)非常有效,知道用哪个磁头,读取哪个柱面上的第几扇区就OK了。CHS模式支持的硬盘容量有限,用8bit来存储磁头地址,用10bit来存储柱面地址,用6bit来存储扇区地址,而一个扇区共有512Byte,这样使用CHS寻址一块硬盘最大容量为256
* 1024 * 63 * 512B = 8064 MB(1MB = 1048576B)(若按1MB=1000000B来算就是8.4GB)
但现在很多硬盘采用同密度盘片,意味着内外磁道上的扇区数量不同,扇区数量增加,容量增加,3D很难定位寻址,新的寻址模式:LBA(Logical Block Addressing)。在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再将这种逻辑地址转换为实际硬盘的物理地址。
LBA下的编号,扇区编号是从0开始。
逻辑扇区号LBA的公式:
LBA(逻辑扇区号)=磁头数 × 每磁道扇区数 × 当前所在柱面号 + 每磁道扇区数 × 当前所在磁头号 + 当前所在扇区号 – 1
例如:CHS=0/0/1,则根据公式LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0
也就是说物理0柱面0磁头1扇区,是逻辑0扇区。
接着&,了解硬盘基本机械构造以及运行原理之后,我们还想知道硬盘上的盘片是如何进行分区的、有哪几种分区、如何存储分区信息的?
磁盘的分区
装过系统的人都知道必须要分区后才能安装系统,形象点的说比如windows里C:,D:之类的东西;如果你要问硬盘为什么要分区,我也说不上来很严格的原因,首先从使用习惯上来讲,我们不希望数据杂乱无章堆积在一起,其次,如果不分区,如何才能在一块硬盘上使用不同的文件系统(下面讲到)呢,学院派的说法是:数据安全和性能考虑。
先要说硬盘中最最重要的第一扇区,因为整块硬盘的重要信息都在这里:
&MBR(Master Boot Record 主启动记录):开机引导程序就在安装在此,占用446
&DPT(Disk Partition table 硬盘分区表):记录硬盘上的分区元信息,占用64byte。
MBR是如何工作的呢,不用深究,反正就是系统开始时会主动读取数据的地方,这样才能引导进行操作系统的启动;
DPT要仔细的讲讲,分区的大致意思就如同抢地盘,不过人家比较规矩,按照柱面(最小的分区单位)分配,比如第一个分区从柱面1-200,第二个分区201-500,但三个分区501-1000...(省略并非可以无限分配下去哦)
为啥说不能一直分配下去呢,技术柱面数量足够,因为上面说到硬盘分区表只有64个字节,每条分区记录需要占用16字节,最多只能分4个,疑问在此:我的电脑怎么分了5个(c\d\e\f\g)?
其实我说的4个分区是所谓的主分区,为了能支持很多分区引入了扩展分区的概念, 也就是说,可以使用DPT中一条记录来记录扩展分区的信息,然后在扩展分区中再继续划分逻辑分区,而逻辑分区的分区信息则记录在扩展分区的第一个扇区中,如此则可以像链表一样划分出很多分区来。但注意,一个分区表中可以有1~4条主分区,但是最多只能有1个扩展分区
&分区表之间是如何关联的,详细讲一下,分区表是一个单向链表,第一个分区表,也就是位于硬盘第一个扇区中的DPT,可以有一项记录扩展分区的起始位置柱面,类似于指针的概念,指向扩展分区(图3),根据这项记录我们可以找到扩展分区的某柱面0磁头1扇区(CHS),而这个扇区中又存放了第二个分区表,第二个分区表第一项记录一般表述了当前所在的逻辑分区的起始/终止柱面,第二项记录表述了下一个逻辑分区所在的0磁头1扇区(CHS),第三、第四项记录不存任何信息(图4)。
& 请看下图,主引导记录/分区表所在的是硬盘第一个分区,基本分区1、基本分2、基本分区3都是主分区、扩展分区内有2个逻辑分区,每个逻辑分区的第一个扇区都是分区表。
&分区后的系统启动
&之前提到MBR中安装的引导加载程序,他的作用是什么?
①&&& 提供开机菜单选项:可以供用户选择启动哪个操作系统,这是多重引导功能。
②&&& 加载操作系统内核:每个操作系统都有自己的内核,需要引导程序来加载
③&&& 转交给其他引导程序:可以将工作移交给其他引导程序来进行上述操作。
& 其实引导加载程序除了可以安装在MBR中,还可以直接安装在每个分区的引导扇区(DBR)中,注意下,每个分区(主分区、逻辑分区)都有一个自己的启动扇区,专门用来安装引导加载程序,如上图表3。
系统启动过程:
①&&& 首先,BIOS启动后,读取硬盘第一个扇区MBR中的引导加载程序(可能是windows或者linux的grub)
②&&& MBR中的引导程序提供开机菜单,你可以选择1)直接加载windows 内核 2)将工作转交给windows 分区内的引导扇区中的加载程序,让他自己去加载内核 3)转交给linux分区内引导扇区,让他去加载linux.
③&&& 根据用户选择的选项和引导加载程序中记录的分区,到分区表找对应的分区柱面号等分区信息,启动内核或者分区加载程序。
Window安装时默认会自动将MBR和windows所在分区的引导扇区都装上引导程序,而不会提供任何选项给用户选择,因此如果之前装过其他操作系统,然后再另外装一个windows时,会把公用的MBR覆盖掉,如此,原来的操作系统就无法启动了。如果先装windows,然后装linux,linux 会覆盖MBR,然后让用户选择是否将windows等其他操作系统的启动项添加进来,如果你选择了添加进来,那么你在开机时就会有两个选项让用户进行选择了。
文件系统也是很大很复杂的话题,我们仍然以比较通俗、粗颗粒度来讲解,试想一下,我们的文件如何对应到磁盘的扇区上呢,所以光有底层的概念 磁道 扇区是没有用的,需要更加抽象的数据类型或结构来抽象底层的细节。
文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型(Abstract data type)。
文件系统是一种用于向用户提供底层数据访问的机制。它将设备中的空间划分为特定大小的块(扇区),一般每块512字节。数据存储在这些块中,大小被修正为占用整数个块。由文件系统软件来负责将这些块组织为文件和目录,并记录哪些块被分配给了哪个文件,以及哪些块没有被使用。
不过,文件系统并不一定只在特定存储设备上出现。它是数据的组织者和提供者,至于它的底层,可以是磁盘,也可以是其它动态生成数据的设备(比如网络设备)
只是简单介绍,具体的文件系统要具体分析。
感谢那些无私奉献的blogger!
参考或推荐资源:
&Alibaba DBA
《大话存储》 张冬
/shishm/archive//2222469.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2713181次
积分:26239
积分:26239
排名:第182名
原创:355篇
转载:1189篇
评论:65条
(2)(1)(12)(3)(25)(37)(9)(32)(19)(7)(5)(11)(26)(37)(29)(76)(26)(19)(41)(63)(76)(32)(33)(88)(41)(16)(25)(37)(73)(63)(92)(75)(120)(159)(55)(67)(13)(1)引导文件_百度百科
NTLDR一般存放于C盘根目录下,是一个具有隐藏和只读属性的系统文件。它的主要职责是解析Boot.ini文件。如果你对它的理解还不是很清楚,那么下面我们就以Windows XP为例介绍NTLDR在系统引导过程中的作用。 Windows XP在引导过程中将经历预引导、引导和加载三个阶段,这与Windows 9X直接读取的方式来启动系统是完全不一样的,NTLDR在这三个阶段的引导过程中将起到至关重要的作用。
引导文件基本概述
在预引导阶段里计算机所做的工作有:运行POST程序,POST将检测系统的总内存以及其他硬件设备的状况,将磁盘第一个物理加载到内存,加载硬盘并运行,主引导记录会查找的起始位置。接着活动分区的被加载并执行,最后从引导扇区加载并初始化NTLDR文件。
引导文件引导阶段
在引导阶段中,Windows XP将会依次经历初始引导加载器阶段、操作系统选择阶段、硬件检测阶段以及配置选择阶段这四个小的阶段。
(1)在初始引导加载器阶段中,NTLDR将把计算机的微处理器从实模式转换为32位,在实模式中,系统会为MS-DOS预留640KB大小的内存空间,其余的内存都被看做是,在32位平面模式中系统将所有内存都视为可用内存,然后NTLDR执行适当的小型文件系统,这时NTLDR可以识别每一个用NTFS或FAT格式的文件系统分区,至此初始引导加载器阶段结束。
(2)当初始引导加载器阶段结束后将会进入操作系统选择阶段,如果计算机上安装了多个操作系统,由于NTLDR加载了正确的Boot.ini文件,那么在启动的时候将会出现要求选择操作系统的菜单,NTLDR正是从文件中查找到系统文件的分区位置。如果选择了NT系统,那么NTLDR将会运行文件,否则NTLDR将加载BOOTSECT.DOS,然后将控制权交给BOOTSECT.DOS。如果Boot.ini文件中只有一个操作系统或者其中的timeout值为0,那么将不会出现选择操作系统的菜单画面,如果Boot.ini文件非法或不存在,那么NTLDR将会尝试从默认系统卷启动系统。
小提示:NTLDR启动后,如果在系统根目录下发现有Hiberfil.sys文件且该文件有效,那么NTLDR将读取Hiberfil.sys文件里的信息并让系统恢复到休眠以前的状态,这时并不处理Boot.ini文件。
(3)当操作系统选择阶段结束后将会进入硬件检测阶段,这时文件将会收集计算机中硬件信息列表,然后将列表返回到NTLDR,这样NTLDR将把这些硬件信息加载到注册表“”中的Hardware中。
(4)硬件检测阶段结束后将会进入配置选择阶段,如果有多个列表,那么将会出现配置文件选择菜单,如果只有一个则不会显示。
引导文件加载内核
在加载内核阶段中,NTLDR将加载NTOKRNL.EXE内核程序,然后NTLDR将加载硬件抽象层(HAL.dll),接着系统将加载注册表中的“HKEY_MACHINESystem”键值,这时NTLDR将读取“HKEY_MACHINESystemselect”键值来决定哪一个ControlSet将被加载。所加载的ControlSet将包含设备的以及需要加载的服务。再接着NTLDR加载注册表“HKEY_LOCAL_MACHINESystemservice”下的start键值为0的底层。当ControlSet的CurrentControlSet被加载时,NTLDR将把控制权传递给NTOSKRNL.EXE,至此引导过程将结束。
小提示:如果在启动的时候按F8键,那么我们将会在启动菜单中看到多种选择启动模式,这时NTLDR将根据用户的选择来使用启动参数加载NT,用户也可以在Boot.ini文件里设置启动参数。
“BOOT.INI”文件会在已经安装了Windows NT/2000/XP的操作系统的所在分区,一般默认为C:下面存在。但是它默认具有隐藏和系统属性,所以你要设置你的,以便把“BOOT.INI”文件显示出来。我们可以用任何一种来打开他它。一般情况下,它的内容如下:
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)Windows
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)Windows=&Microsoft Windows XP Professional& /fastdetect
在Windows 2000或者是XP系统中,我们可以很容易的设置“BOOT.INI”文件。那就是在“我的电脑”上面点击右键,选择“属性”打开“系统属性”对话框,再点击“高级”选项卡,在“启动和故障修复”里面点击“设置”按钮,就可以打开“启动和故障修复”对话框了,在这里面我们就可以对它进行详细设置。
引导文件编辑文件
如果你拥有Windows XP操作系统,那么你可以用“系统配置实用程序”来更方便的编辑“BOOT.INI”文件。具体做法是:打开“开始”菜单,点击“运行”命令,再在弹出的文本框中输入“msconfig”点击“确定”后就会弹出“系统配置实用程序”,再点击“BOOT.INI”选项卡,就会出现如图所示的界面。在这里,我们可以很方便地设置文件。
言归正传,现在,来说明一下这个文件内容的含义。
引导文件系统加载部分
这一部分很简单,只有两个设定。那就是“timeout=”和“default=”。
“timeout=”就是设定开机时系统引导菜单显示的时间,超过设定值则自动加载下面“default=”指定的操作系统。默认值是30,单位为秒。我们可以在这里面设定等待时间的长短。如果将其设为“0”那么就是不显示系统引导菜单。
“default=”则是设定默认引导的操作系统。而等号后面的操作系统必须是已经在“[operating systems]”中存在的。如果想默认为加载另外的操作系统,我们可以参看“[operating systems]”中的操作系统列表,然后把想要加载的操作系统按照格式写到“default=”后面就可以了。
引导文件操作系统部分
([operating systems])
在这里面,列出了机器上所安装的全部操作系统。比如机器上只有一个操作系统,那么就只有一条信息,那就是“multi(0)disk(0)rdisk(0)partition(1)Windows=&Microsoft Windows XP Professional& /fastdetect”
在这里需要注意的是,在英文引号内的文字就是引导操作系统菜单时显示出来的让我们选择操作系统的提示文字,在这里面我们可以随意更改。而“multi(0)disk(0)rdisk(0)partition(1) Windows”这一句就需要些解释了。因为它涉及ARC(高级RISC计算机)命名,它是x86或RISC计算机中用于标识设备的动态方法。
ARC命名的第一部分用于标识硬件适配卡/磁盘控制器,它有两个选项:SCSI和Multi。
Multi表示一个非SCSI硬盘或一个由SCSI BIOS访问的SCSI硬盘,而SCSI则表示一个SCSI BIOS禁止的SCSI硬盘。(x)是硬件序号。Disk(x)表示SCSI总线号。如果硬件适配卡为Multi,其正确表示方法就为disk(0),rdisk(x)则表示硬盘的序号,如果硬件适配卡为SCSI则忽略此值;
partition(x)表示硬盘的分区序号。了解这些,我们就可以解释前面那条信息的含义了,即“multi(0)disk(0)rdisk(0)partition(1) Windows”为,在0号非SCSI设备上的第0号磁盘上的第一个分区里面的“Windows”目录下可以找到能够启动的操作系统。
等号后的内容前面已经说过,那个就是引导菜单显示出来的供我们选择的提示文字。而后面的“/fastdetect”又是作什么用的呢?这是一个开关符,用来控制启动该操作系统时的具体选项,下面再来详细的介绍各种开关符的含义:
/3GB:这是Win2000 SP3新引入的。这使得用户区和系统区分为3G比1G的比例。只有用户使用NT企业版,应用程序也支持3GB选项时,此选项才生效。
/BASEVIDEO:使用标准VGA方式启动。这种方式主要用于显示失效时。
/BAUDRATE:指出用于调度的,如果用户不设置,则使用默认的9600,而对于线缆Modem则使用19200。
/BOOTLOG:使Win2000将日志写入 %SystemRoot%NTBTLOG.TXT 。
/BURNMEMORY=:使NT在已知的内存上少使用指定的数量,如果/burnmemory=64,则有64M内存NT不使用。
/CRASHDEBUG:调度器在NT启动时启动,只有在时才有用,如果系统经常会无故出错,这个选项就很有用了。
/DEBUG:在启动NT时调入调度器,它可以在任何时间激活,在错误可以再次出现时使用它比较合适。
/DEBUGPORT= comx :指定用于调度的端口,其它X就指。
/FASTDETECT:对于Win2000启动时,它使系统不检查和。
/HAL=:允许用户不使用默认的HAL。
/INTAFFINITY:设置多处理器HAL(HALMPS.DLL),使编号最大的处理器接收。如果不设置此选项,Win2000会使所有处理器接收中断请求。
/KERNEL=:与上面的功能相同,不过是针对SMP中的而言的。
/MAXMEM:n:指定NT可以使用的最大内存数,如果一个内存片损坏,这个开关就十分有用了。
/NODEBUG:不使用调试信息。
/NOGUIBOOT:指定此选项会使Win2000不加载VGA,也就不会显示启动过程和失败时的兰屏信息。
/NOSERIALMICE=[COMx | COMx,y,z…]:在特定的COM中上禁止对串行鼠标的检测。如果用户有一个非鼠标设备接在COM口上,这个选项会十分有用。如果此开关未加参数,系统会禁止所有COM口。
/NUMPROC=n:只允许前N个系统处理器工作。
/ONECPU:在多处理器中只使用一个处理器。
/PCILOCK:不让NT为PCI设置分配IO/IRQ资源,而启用BIOS设置。
/SAFEBOOT:安全启动,这个大家一定十分熟悉,Win2000只启动HKLMSystemCurrentControlSet
ControlSafeBoot中的和服务,其后跟三个参数MINIMAL,NETWORK或DSREPAIR之一。MINIMAL和NETWORK在允许网络下启动系统。而DSREPAIR要求系统从中调入的设置。还有一个选项是&(ALTERNATESHELL)&,它让系统调入由HKLMSystemCurrentControlSet
SafeBootAlternateShell指定的SHELL程序,而不使用默认的Explorer。
/SOS:在调入名时显示它的名字,在因驱动问题而无法启动时使用比较好。
/WIN95:在装有三个系统DOS、Win9x和Windows NT的系统上,让NTLDR直接调用Win9x。启动文件BOOTSECT.W40。
/WIN95DOS:在装有三个系统DOS、Win9x和Windows NT的系统上,让NTLDR直接调用DOS启动文件BOOTSECT.DOS
/YEAR=:使用指定的年份,如果设置为/YEAR=2005,那现在的时间就是2005年,此选项仅对NT4+SP4和Win2000生效。
引导文件Vista SP1以后引导文件发生改变
此处转自Win Vista系统的帮助和支持
文件发生了什么变化?
在 Windows 的较早版本中,boot.ini是系统文件,它包含有关计算机上安装的 Windows操作系统的信息。当您打开计算机时,在启动的过程中显示该信息。它在多重引导配置中或者对于需要自定义 Windows 启动方式的高级用户或管理员最有用。
在此版本的 Windows 中,boot.ini文件已经替换为启动配置数据 (BCD)。该文件比boot.ini功能多,它可应用于使用其他方式而非基本输入/输出系统 (BIOS) 的来启动计算机。
如果您需要对 BCD 进行更改(如从显示的操作系统列表中删除条目),请使用命令行工具,它是专门用于管理员和 IT 专业人员的高级工具。有关Bcdedit的技术信息,请转到Microsoft IT 专业人员网站。
如果您的计算机是多重引导配置,您仍然可以通过使用“控制面板”中的“系统”来更改默认情况下打开哪个 Windows操作系统以及显示操作系统列表的时间。
单击打开“系统”。
在左窗格中,单击“高级系统设置”。 如果系统提示您输入管理员密码或进行确认,请键入密码或提供确认。
单击“高级”选项卡,然后在“启动和故障恢复”下单击“设置”。
在“系统启动”下,选择默认的操作系统以及显示操作系统列表所需的时间,然后单击“确定”。
Uinx和Linux系统下引导文件由于开源的方式引导可以用不同的程序常见的有Grub和Lilo
引导文件引导过程
下面转Linux 引导过程内幕(排版式修改)
从到第一个用户空间应用程序的指导
级别: 初级
M. Tim Jones ,, Emulex
2006 年 7 月 26 日
引导文件引导
Linux& 系统的过程包括很多阶段。不管您是引导一个标准的 x86桌面系统,还是引导一台嵌入式的 PowerPC& 机器,很多流程都惊人地相似。本文将探索 Linux 的引导过程,从最初的引导到启动第一个应用程序。在本文介绍的过程中,您将学习到各种与引导有关的主题,例如引导加载程序、解压、初始 RAM 磁盘以及 Linux 引导的其他一些元素。
早期时,启动一台计算机意味着要给计算机喂一条包含引导程序的纸带,或者手工使用前端面板地址/数据/控制开关来加载引导程序。尽管目前的计算机已经装备了很多工具来简化引导过程,但是这一切并没有对整个过程进行必要的简化。
让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了。然后将回顾一下在各个步骤到底发生了什么。在整个过程中,参考一下内核可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析。
图 1 是我们在 20,000 英尺的高度看到的视图。
图 1. Linux 引导过程在 20,000 英尺处的视图
当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中。中的(CPU)会调用这个重置向量来启动一个位于闪存/ROM 中的已知地址处的程序。在这两种情况下,结果都是相同的。因为 PC 提供了很多灵活性,BIOS 必须确定要使用哪个设备来引导系统。稍后我们将详细介绍这个过程。
当找到一个引导设备之后,第一阶段的引导加载程序就被装入 RAM 并执行。这个引导加载程序在大小上小于 512(一个),其作用是加载第二阶段的引导加载程序。
当第二阶段的引导加载程序被装入 RAM 并执行时,通常会显示一个动画屏幕,并将 Linux 和一个可选的初始 RAM磁盘(临时)加载到内存中。在加载映像时,第二阶段的引导加载程序就会将控制权交给映像,然后内核就可以进行解压和初始化了。在这个阶段中,第二阶段的引导加载程序会检测系统硬件、枚举系统链接的硬件设备、挂载根设备,然后加载必要的内核模块。完成这些操作之后启动第一个程序(init),并执行高级工作。
这就是 Linux 引导的整个过程。现在让我们深入挖掘一下这个过程,并深入研究一下 Linux 引导过程的一些详细信息。
引导文件系统启动
系统启动阶段依赖于引导 Linux 系统上的硬件。在嵌入式平台中,当系统加电或重置时,会使用一个启动环境。这方面的例子包括、RedBoot 和 Lucent 的 MicroMonitor。嵌入式平台通常都是与引导监视器搭配销售的。这些程序位于目标硬件上的闪存中的某一段特殊区域,它们提供了将 Linux映像下载到闪存并继续执行的方法。除了可以存储并引导 Linux 映像之外,这些引导监视器还执行一定级别的和硬件初始化过程。在嵌入式平台中,这些引导监视器通常会涉及第一阶段和第二阶段的引导加载程序。
引导文件提取 MBR 的信息
要查看 MBR 的内容,请使用下面的命令:
# dd if=/dev/hda of=mbr.bin bs=512 count=1 # od -xa mbr.bin
这个 dd 命令需要以 root 用户的身份运行,它从 /dev/hda(第一个 IDE 盘) 上读取前 512 个字节的内容,并将其写入 mbr.bin 文件中。od 命令会以十六进制和 ASCII 码格式打印这个的内容。
在 PC 中,引导 Linux 是从 BIOS 中的地址 0xFFFF0 处开始的。BIOS 的第一个步骤是加电自检(POST)。POST 的工作是对硬件进行检测。BIOS 的第二个步骤是进行本地设备的枚举和初始化。
给定 BIOS 功能的不同用法之后,BIOS 由两部分组成:POST 代码和运行时服务。当 POST 完成之后,它被从内存中清理了出来,但是 BIOS 运行时服务依然保留在内存中,目标操作系统可以使用这些服务。
要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是、、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。
通常,Linux 都是从硬盘上引导的,其中主(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。
第一阶段引导加载程序
MBR 中的主引导加载程序是一个 512 字节大小的映像,其中包含程序代码和一个小(参见图 2)。前 446 个字节是主引导加载程序,其中包含和错误消息文本。接下来的 64 个字节是分区表,其中包含 4 个分区的记录(每个记录的大小是 16 个字节)。MBR 以两个特殊数字的字节(0xAA55)结束。这个数字会用来进行 MBR 的有效性检查。
图 2. MBR 剖析
主引导加载程序的工作是查找并加载次引导加载程序(第二阶段)。它是通过在分区表中查找一个来实现这种功能的。当找到一个活动分区时,它会扫描分区表中的其他分区,以确保它们都不是活动的。当这个过程验证完成之后,就将活动分区的从这个设备中读入 RAM 中并执行它。
第二阶段引导加载程序
次引导加载程序(第二阶段引导加载程序)可以更形象地称为加载程序。这个阶段的任务是加载 Linux内核和可选的初始 RAM 磁盘。
引导文件GRUB 阶段引导加载程序
/boot/grub 目录中包含了 stage1、stage1.5 和 stage2 引导加载程序,以及很多其他加载程序(例如,CR-ROM 使用的是 iso9660_stage_1_5)。
在 x86 PC 环境中,第一阶段和第二阶段的引导加载程序一起称为 Linux Loader(LILO)或 GRand Unified Bootloader(GRUB)。由于 LILO 有一些缺点,而 GRUB 克服了这些缺点,因此下面让我们就来看一下 GRUB。(有关 GRUB、LILO 和相关主题的更多内容,请参阅本文后面的 参考资料 部分的内容。)
关于 GRUB,很好的一件事情是它包含了有关 Linux 文件系统的知识。GRUB 不像 LILO 一样使用裸,而是可以从 ext2 或 ext3 文件系统中加载 Linux 内核。它是通过将两阶段的引导加载程序转换成三阶段的引导加载程序来实现这项功能的。阶段 1 (MBR)引导了一个阶段 1.5 的引导加载程序,它可以理解包含 Linux 内核映像的。这方面的例子包括 reiserfs_stage1_5(要从 Reiser 日志文件系统上进行加载)或 e2fs_stage1_5(要从 ext2 或 ext3 文件系统上进行加载)。当阶段 1.5 的引导加载程序被加载并运行时,阶段 2 的引导加载程序就可以进行加载了。
当阶段 2 加载之后,GRUB 就可以在请求时显示可用列表(在 /etc/grub.conf 中进行定义,同时还有几个软/etc/grub/menu.lst 和 /etc/grub.conf)。我们可以选择内核甚至修改附加内核参数。另外,我们也可以使用一个命令行的 shell 对引导过程进行高级手工控制。
将第二阶段的引导加载程序加载到内存中之后,就可以对文件系统进行查询了,并将默认的内核映像和 initrd 映像加载到内存中。当这些准备好之后,阶段 2 的引导加载程序就可以调用映像了。
引导文件内核
GRUB 中的手工引导
在 GRUB 命令行中,我们可以使用 initrd 映像引导一个特定的,方法如下:
grub& kernel /bzImage-2.6.14.2
[Linux-bzImage, setup=0x1400, size=0x29672e]
grub& initrd /initrd-2.6.14.2.img
[Linux-initrd @ 0x5f13000, 0xcc199 bytes]
grub& boot
Uncompressing Linux... Ok, booting the kernel.
如果您不知道要引导的的名称,只需使用斜线(/)然后按下 Tab 键即可。GRUB 会显示内核和 initrd 映像列表。
当内核映像被加载到内存中,并且阶段 2 的引导加载程序释放控制权之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用,并开始启动内核引导的过程。
当 bzImage(用于 i386 映像)被调用时,我们从 ./arch/i386/boot/head.S 的 start 汇编例程开始执行(主要流程图请参看图 3)。这个例程会执行一些基本的硬件设置,并调用 ./arch/i386/boot/compressed/head.S 中的 startup_32 例程。此例程会设置一个基本的环境(等),并清除 Block Started by Symbol(BSS)。然后调用一个叫做 decompress_kernel 的 C 函数(在 ./arch/i386/boot/compressed/misc.c 中)来解压。当内核被解压到内存中之后,就可以调用它了。这是另外一个 startup_32 函数,但是这个函数在 ./arch/i386/kernel/head.S 中。
在这个新的 startup_32 函数(也称为清除程序或进程 0)中,会对进行初始化,并启用内存功能。然后会为任何可选的浮点单元(FPU)检测 CPU 的类型,并将其存储起来供以后使用。然后调用 start_kernel 函数(在 init/main.c 中),它会将您带入与体系结构无关的 Linux部分。实际上,这就是 Linux内核的 main 函数。
图 3. Linux内核i386 引导的主要函数流程
通过调用 start_kernel,会调用一系列初始化函数来设置中断,执行进一步的内存配置,并加载初始 RAM 磁盘。最后,要调用 kernel_thread(在 arch/i386/kernel/process.c 中)来启动 init 函数,这是第一个进程(user-space process)。最后,启动空任务,现在调度器就可以接管控制权了(在调用 cpu_idle 之后)。通过启用中断,的调度器就可以周期性地接管控制权,从而提供能力。
在引导过程中,初始 RAM 磁盘(initrd)是由阶段 2 引导加载程序加载到内存中的,它会被复制到 RAM 中并挂载到系统上。这个 initrd 会作为 RAM 中的临时使用,并允许内核在没有挂载任何的情况下完整地实现引导。由于与进行交互所需要的模块可能是 initrd 的一部分,因此内核可以非常小,但是仍然需要支持大量可能的硬件配置。在内核引导之后,就可以正式装备根文件系统了(通过 pivot_root):此时会将 initrd 根文件系统掉,并挂载真正的根文件系统。
decompress_kernel 输出
函数 decompress_kernel 就是显示我们通常看到的解压消息的地方:
Uncompressing Linux... Ok, booting the kernel.
initrd 函数让我们可以创建一个小型的 Linux,其中包括作为可加载模块编译的。这些可加载的模块为内核提供了访问磁盘和磁盘上的文件系统的方法,并为其他硬件提供了驱动程序。由于是磁盘上的一个文件系统,因此 initrd 函数会提供一种启动方法来获得对磁盘的访问,并挂载真正的根文件系统。在一个没有硬盘的嵌入式环境中,initrd 可以是最终的根文件系统,或者也可以通过(NFS)来挂载最终的根文件系统。
引导文件Init
当被引导并进行初始化之后,内核就可以启动自己的第一个应用程序了。这是第一个调用的使用标准 C 库编译的程序。在此之前,还没有执行任何标准的 C应用程序。
在桌面Linux 系统上,第一个启动的程序通常是 /sbin/init。但是这不是一定的。很少有会需要使用 init 所提供的丰富初始化功能(这是通过 /etc/inittab 进行配置的)。在很多情况下,我们可以调用一个简单的 shell脚本来启动必需的嵌入式应用程序。
引导文件结束语
与 Linux 本身非常类似,Linux 的引导过程也非常灵活,可以支持众多的处理器和硬件平台。最初,加载引导加载程序提供了一种简单的方法,不用任何花架子就可以引导 Linux。LILO 引导加载程序对引导能力进行了扩充,但是它却缺少文件系统的感知能力。最新一代的引导加载程序,例如 GRUB,允许 Linux 从一些文件系统(从 Minix 到 Reise)上进行引导。
Linux引导grub和lilo的基本知识作者vivelo
目前,PC的性能越来越强大,尤其是超大容量的硬盘使我们有足够的地方去安装多个操作系统。Linux下最常用的多重启动软件就是LILO和Grub。
LILO是现在许多Linux缺省的引导程序,它的全称是Linux Loader,拥有很强大的功能。Grub 也是一个多重启动管理器,它的全称是Grand Unified Bootloader。Grub的功能与LILO一样,也是在多个操作系统共存时选择引导哪个系统。它可以引导很多PC上常用的操作系统,其中就有Linux、FreeBSD、Solaris、Windows 9x、Windows NT;可以载入操作系统的和初始化操作系统;可以把引导权直接交给操作系统来完成引导;可以直接从FAT、minix、FFS、ext2或ext3分区读取。Grub 有一个特殊的交互式控制台方式,可以手工装入内核并选择。
引导文件初识
Grub和LILO
引导文件Grub与LILO的优缺点
由于Grub出现要比LILO晚,所以它可以实现LILO的绝大部分功能,可以代替LILO来完成对Linux的引导,特别适用于Linux与其它操作系统共存情况。
◆ 8.4GB问题
以前大多数Linux所带较旧版本的LILO都有这样的一个问题:启动/boot分区不能分在超过1023柱面的地方,一般是在8.4GB左右的地方,否则LILO不能安装,或者安装后不能正确引导系统。Grub就不会出现这种情况,只要安装时大硬盘是在LBA模式下,它就可以引导根分区在8GB以外的操作系统。如今,在LILO较新的版本中这个问题已经做了很好处理。
◆ 漂亮的Logo
Grub引导开机显示一个漂亮的,它可以是640×480、800×600、等各种模式画面, 而且可以支持自动选择最佳图像模式。Linux爱好者可以通过改变这幅图片来制作个性化开机画面。
LILO源于文字界面,因此它在最新的版本中对开机画面的支持也是很有限的。
◆ 执行模式
Grub不但可以通过配置文件进行引导,还可以在选择引导前动态改变引导参数,动态加载各种设备。例如,在Linux下编译了一个新的核心,但不能确定它能不能工作,就可以在引导时动态改变Grub的参数,此时即使Grub菜单配置不正确,但仍可以引导系统。Grub的命令行有非常强大的功能,而且支持如bash一样的历史功能,可以用上下键来寻找以前的命令。LILO就不支持这种模式。
在LILO下,既可以手工输入操作系统的名字来引导不同的操作系统,也可使用一个菜单来选择不同的系统进行引导。Grub也兼容以上的操作。
◆ 分区对Grub与LILO的影响
LILO是通过读取硬盘上的绝对来装入操作系统,因此每次分区改变都必须重新配置LILO,如果调整了分区的大小及分区的分配,那么LILO在重新配置之前就不能引导这个分区的操作系统了。而Grub是通过文件系统直接把核心读取到内存,因此只要操作系统核心的路径没有改变,Grub就可以引导系统。
Grub和LILO支持多种,支持多种文件系统,动态装载,甚至可以通过网络装载操作系统核心。Grub还支持多种可执行文件格式,支持自动解压,可以引导不支持多重引导的操作系统等。
引导文件Grub和LILO的参数比较
敲入“makebootable”命令,就可以安装Grub。而“lilo -v”则是重新安装LILO。LILO包括一个的空间,所以LILO既可以安装在MBR中,也可以安装在某个分区的引导扇区。Grub和LILO同时都可以安装在之中。制作Grub的和制作LILO的启动盘相差不大。
要制作,需执行一些简单的步骤。首先确定Grub或LILO已经安装,并且在新的软盘上创建 ext2文件系统。然后进行安装,将一张空盘插入软驱,输入:
#mke2fs /dev/fd0
创建了ext2文件系统后,需要安装该文件系统。
(1)安装Grub
进入Grub的目录:
#cd /boot/grub
放入一张软盘,执行以下命令:
#dd if=stage1 of=/dev/fd0 bs=512 count=1
#dd if=stage2 of=/dev/fd0 bs512 seek=1
Grub启动盘就完成了。
(2)安装LILO
#dd if=/dev/hda of=/dev/fd0 bs=512 count=1(因为LILO已经安装在MBR中)
执行上述命令后LILO启动盘就完成了。
Grub启动时,会在/boot/grub/中寻找一个名字为menu.lst的配置文件,如果找不到此文件则不进入菜单模式直接进入命令行模式。menu.lst 是一个文本文件,可以用任何一个打开它。每一行代表一个配置命令,如果一行的第一个字符为“#”,则表明这一行为注释,可以简单地用增加或减少注释行来改变配置。LILO使用一个文本文件/etc/lilo.conf作为其配置文件。LILO读取lilo.conf,按照其中的参数将特定的LILO写入系统引导区。如果修改了/etc/lilo.conf,就必须重新运行LILO命令,以保证LILO正常运行。
Grub和LILO有很多的相似的参数,见表1所示。
表1 Grub和LILO参数比较
相似功能 Grub的具体参数 LILO的具体参数
在second秒之后引导默认的操作系统timeout second timeout=tsecs
默认启动选项 default num default=name
指定操作系统的名字和描述 title OS mode label
指出的路径 Kernel image
指出开机画面的文件所存放的路径和文件名 Splash pathname/filename message=message-file
引导文件配置
(1)Grub和LILO共同的配置(括号内为LILO的参数)
指定引导默认的操作系统的等待时间:
timeout second(timeout=tsecs)
上面代码表明设定second秒之后引导默认的操作系统。如果是timeout 5,就是5秒没有其它指令就引导系统;如果设成-1,则Grub会一直等待直到用户选择一个选项为止。
LILO中,timeout=50同样设置等待键盘输入的时长,单位是0.1秒。超过这段时间没有输入则为超时,系统将自动引导缺省的操作系统。如果不设置本参数,缺省的超时时间长度为无穷大。
指定引导的默认操作系统:
default num(default=name)
Grub中默认启动第num+1行的操作系统,default=1则启动第2个系统。LILO中是通过default=name指定缺省引导的操作系统,如default=LINUX表示将label为Linux的系统作为缺省引导的操作系统。如不指定该参数,排在lilo.conf中的第一个操作系统将作为缺省操作系统。
指定引导的操作系统的:
Kernel(image)
给Grub指定内核在哪儿,还要指出哪个文件是内核文件。例如kernel /boot/vmlinuz-2.2.16 root=/dev/hda7 ro说明/boot/vmlinuz-2.2.16 就是要载入的内核,后面的都是传递给内核的参数。root=/dev/hda7就是Linux根分区的所在分区,ro以只读的方式打开。 LILO中是以image=filename来指定含有一个Linux内核的启动选项的文件或设备。
指定引导操作系统时的:
Splash pathname/filename(message=message-file)
上面代码指出Grub开机画面文件所存放的路径和文件名。LILO中,message=message-file命令用于指定一个包含注释信息的文件,该文件将在系统“LILO”之前显示。如果在LILO启动时想获取较多的信息,可以编辑这个文件,再使用该命令就可以了。文件中如果包含有ASCⅡ码为0xFF的字符(Ctrl+L)则表示清屏。注意,文件的大小不能超过65535个字节。每次文件改变之后,都必须重新运行LILO命令重建,以保证其正常显示。
指定引导操作系统的名称:
title OS mode(label)
上面代码指出的字符就是Grub菜单项上所看见的选项,你可以写上操作系统的名字和描述,如用 title Linux、 Single Mode代表这一选项是引导此Linux的单用户模式。在LILO中,label=name通过此参数来标识当前操作系统,即操作系统名。用户可通过在LILO提示后输入name来引导特定的操作系统。
(2)LILO的配置信息
在LILO.conf中,最多有16个操作系统选项,它比Grub有更大的灵活性。LILO.conf配置文件主要分为两部分:一部分是全局配置;另一部分是引导配置,“#”表示注释。
◆ LILO的全局配置
全局参数是全程有效的,它可以出现在文件LILO.conf中的任何地方。
指定引导操作系统文件的备份:
backup=backup-file
force-backup=backup-file
install= file
在装入LILO之前,将原先的备份到backup-file。它可以备份到一个设备上,用户可以通过dd if=/boot/boot.bak of=/dev/hda bs=446 count=1恢复原先的MBR。force-backup=backup-file类似“backup”,但是会覆盖原有的同名文件。install=file将指定的文件作为新的引导来安装,若未设置install选项,则将boot/boot.b作为默认使用。
指定一个用于安装LILO的设备:
boot=boot-device
上面代码指定一个用于安装LILO的设备。通常LILO可安装在如下几个地方:
MBR:第一个硬盘的, 对应于/dev/hda、/dev/sda或者是/dev/hda0等。
Root: Linux根分区“/”上。
Floppy: LILO安装在上,对应于/dev/fd0。LILO缺省安装在根分区超级块上。
指定用于优化压缩LILO:
该参数用于优化压缩LILO,让LILO把相邻的多次读取请求合并成一次读取请求,从而使MAP文件更小。因此,从软驱读取时推荐使用 compact 选项。
指定强制LILO等待用户的键盘输入:
delay=tsecs
prompt forces
prompt给出“boot:”提示,强制LILO等待用户的键盘输入,按下则立即引导默认的操作系统;按下Tab显示可供选择的操作系统。大多数情况下,如果有多个操作系统应该使用参数,这样留给用户一个选择的余地。在没有指定“prompt”参数时,LILO将立即引导缺省的操作系统。“delay”参数在这之间插入一段延时,单位是1/10秒。如果未设置delay选项或设为0,则引导装入程序就不会等待。prompt forces不等待任何的按键事件发生,就直接进入启动提示符模式。如果设定了prompt选项而没设定timeout选项,则不能自行启动。
指定非标准硬盘的具体参数:
disk=device-name
上面代码指定了非标准硬盘的具体参数。它有以下的几个参数:bios,设备号;sectors,数;heads,;cylinders,数;partition,用于物理定位特殊硬盘上的分区;start,每一分区的起始扇区。
指定磁盘的物理性能指标:
table=device
ignore-table
linear产生线性地址,而非“扇区/磁头/柱面”地址的linear扇区地址。因此,linear地址在运行时不依赖于硬盘参数。注意,在将LILO安装到上时不能使用“linear”参数。table指定含有的设备;若未指定该参数,引导装入程序就不会把分区信息传送到已启动的操做系统。若一个已定位且引用了table选项的分区表被修改则必须重新运行LILO。fix-table选项使得LILO可对分区表上的扇区/磁头/柱面,以及进行调整,从而建立每个分区表入口、包含有该分区的最前和最后一个扇区的扇区/磁头/柱面及线性地址。ignore-table通知LILO忽略无效的。
map=map-file
指定map文件,没有本项时缺省使用/boot/map,每次改动LILO都应产生一个新的与之相关map文件。Lock是告诉LILO,提示后立即按上一次的引导映像启动计算机。允许自动记录引导命令行,作为以后启动的默认缺省值。
当用于启动的引导映像不存在时,使用optional参数使LILO忽略它。这对用于测试一个不长期存在的Linux内核是有用的。
指定LILO设置口令保护:
password=password
restricted
上面代码为LILO设置口令保护,每次重新启动计算机提示用户输入口令。因为这个密码是明文的,设置了口令后建议将LILO.conf的改为000,以免让非root用户看到口令。restricted 与password联用,使“password”仅作用于在LILO提示后有参数输入的时候。
指定控制器的参数:
serial=parameters (port, bps,parity,bits)
这将初始化指定的串口,并将使引导管理器能接收来自串口的输入。
参数如下:
〈port〉 表示的串口号。
〈bps〉 串口速率。
〈parity〉设置串口校验。一般情况下,LILO忽略。n表示无校验,e表示,o表示。
〈bits〉字符位数,只能取7或8,缺省值是8。当有奇偶校验时只能取7。
用下面命令可以打开进程报告:
verbose=level
append=string
数目越大给出的冗长输出越多。如果在LILO命令行中附加参数-v,则冗长标准也相应增加,最大的冗长标准是5。
append传递一个特殊硬件的参数串string给Linux系统的。它常用来配置一些Linux不能正确测试到的硬件设备。例如:append = “hda=128,64,200”指明该硬盘为128柱面、64磁头、200。
指定RAM盘的大小:
ramdisk=size
size为零时不建立RAM盘。忽略此参数时,RAM盘大小由Linux内核引导程序决定。
指定以何种读写方式载入:
read-write
从字面上可以知道它们分别是通知LILO以只读方式载入根文件系统,以读写方式载入根文件系统。
指定LILO引导Linux系统时的VGA模式:
指定LILO引导Linux系统时的VGA模式,有以下的参数值:
normal 常规80×25文本模式。
extended 80×50文本模式。
引导时询问用户使用哪一种VGA模式,这时敲将显示一个可分配的VGA模式表。如果不指定VGA模式,系统将缺省地使用包含在系统里的VGA模式值。
◆ 引导配置
引导映像参数作用于每一个。
设置包含Linux内核引导映像的文件或设备:
image=pathname
设置包含非:
other=pathname
如DOS、Windows 95等系统引导的文件或设备,以提示启动其它独立的系统。
range=start-end
alias=name
loader=chain-loader
如果“image”参数被设置为一个设备,则Linux内核引导程序的存放范围必须被range=start-end设置。alias给当前操作系统起一别名。loader=chain-loader指定LILO所需要的特定的引导程序,缺省值是/boot/chain.b。
LILO运行时会给出一些提示信息,这些信息对于深刻地了解Bootloader是很有益的。表2罗列了一些错误信息供参考。
表2 LILO出错信息
LILO出错信息 代表的意义
LILO提示信息 NULL LILO没有安装或者安装lILO的分区没有被激活
L LILO的第一部分已经被装入并运行了,但它不能装入第二部分的引导程序。这种情况通常发生在介质访问失败或硬盘参数错误。
LI LILO第一部分正确,但是第二部分执行时出错。一般是硬盘参数有误或/boot/boot.b与map程序不相匹配。
LIL LILO第二部分开始执行,但是不能从“map”文件中读取描述符表(Descriptor Table)。磁盘介质错误或磁盘参数有误。
LIL? LILO在错误的地方加载。
LIL- 描述符表错误。硬盘参数的不匹配或/boot/boot.b与map程序不相匹配。
磁盘0x00 由LILO读取子程序产生。被破坏,或者当使用“linear”参数时访问超出1024的柱面。
0x01 LILO访问了BIOS不支持的硬盘。
0x02 磁盘介质出现问题。
0x03 磁盘介质错。
0x04 磁盘扇区未找到,硬盘参数错误。
0x05 磁盘激活顺序改变。
0x06 磁盘错误的介质。
0x07 无效的初始化,BIOS没有适当地初始化硬盘。
0x08 DMA超出限度。
0x09 DMA试图越过64KB边界。由于“compact”参数造成。
0x0C 无效的磁盘介质。
0x010 “CRC错误”,检测到介质错误。建议多启动几次,运行map安装程序,把从坏块写到正常的介质上。
0x11 ECC纠正成功。读错误发生然后被纠正,但是LILO并不知道这个情况,终止了启动过程。
0x20 磁盘控制器错误。
0x40 磁盘定位失败,磁盘介质问题。
0x80 磁盘超时。磁盘或没有准备好,介质坏了或没有磁盘。
0xBB BIOS错误。磁盘与BIOS配置不符。
(3)Grub配置信息
与LILO相比,Grub有更强的交互性。下面就以它的命令来理解这个bootloader 。
进入菜单,按“e”是编辑启动命令,按“c”是使用命令行。按“e”键可以编辑所选项的启动命令,用这个功能可以临时改变系统的启动参数。
要启动一个操作系统,首先指定引导哪个分区上的系统,例如要引导第一个硬盘上的第一个分区的操作系统,先键入:
grub&root (hd0,0)
如果要启动的是Windows系统,键入:
grub&chainloader (hd0,0)+1
注意,(hd0,0)要随着硬盘和分区的不同而改变。
如果要引导Linux或其它系统,应键入:
grub&kernel (hd0,6)/boot/vmlinuz root=/dev/hda7
注意,磁盘参数也要随着硬盘和分区的不同而改变,如从第二个硬盘的第一个分区引导则用hdb1,最后敲入boot就可以启动系统了。
在不能确定命令或者命令的参数时,都可以按“Tab”获得相关的帮助;用上下键可以获得命令的历史记录,这些就像在Linux中使用bash一样简单。也可以键入启动命令,然后boot就可以引导系统了。
Grub下生成:
grub& root (fd0)
grub& setup (fd0)
grub& quit
如果要把Grub装到硬盘上,也很容易。如果安装到MBR,则可以指定整个磁盘而不必指定分区,如下(对于hda):
grub& setup (hd0)
如果要将Grub安装到/dev/hda7的中,应输入:
grub& setup (hd0,6)
综上所述,LILO要求用户十分明白每个参数才能很好地掌握;而Grub则更加看中用户的交互性,两者在bootloader中不分伯仲。
引导文件实例
下面就以我的lilo.conf为例,把它翻译成Grub的menu.lst文件。
lilo.conf:
#The lilo.conf of the writer
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/cosixmsg //指出开机画面的文件所存放的路径和文件名
password = wudi //密码是wudi
timeout=50 //在5秒之后引导默认的操作系统
default=dos //默认启动选项dos
image=/boot/vmlinuz-2.2.16-3 //指出Linux内核的路径
label=linux //指定操作系统的名字Linux
root=/dev/hda7
other=/dev/hda1 //指定操作系统的名字DOS
翻译后的menu.lst文件:
timeout 5 //在5秒之后引导默认的操作系统
default 1 //默认启动选项dos
# → linux ← //指定操作系统的名字LINUX
title linux root (hd0,6) kernel /boot/vmlinuz-2.2.16 root=/dev/hda7 ro
initrd /boot/initrd-2.2.16.gz
# → linux END ←
# → dos ← //指定操作系统的名字DOS
title dos root (hd0,0) chainloader +1
# → dos END ←
通过以上对Grub和LILO的讲解,读者可能已经对这两种bootloader有了较深地理解,但是还需要经过大量反复地练习,才能很好地掌握。}

我要回帖

更多关于 iphone硬盘底层 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信