grub 引导guojizaixian - 乐橙lc8

grub 引导guojizaixian

2018-11-01 08:21:43 | 作者: 映雁 | 标签: 分区,体系,发动 | 浏览: 4013




GRUB装备文件示例 grub.conf是GRUB的装备文件,其结构比较简略,能够分为两部分,榜首步分是大局装备,别的一部分就是每个操作体系的发动装备。其间能够有多个操作体系的菜单装备。下面就是一个详细的比方。#=/boot/grub/grub.conf文件典范
timeout 30 # 等候用户挑选菜单项的时间(以秒计),超时则引导默许的选项
default 0 # 默许选项,榜首项
fallback 1 # 假设榜首项犯错,则发动下面的后备选项
splashimage=(hd0,0)/grub/splash.xpm.gz #GRUB发动画面

#以下是发动Linux的装备
titleRed Hat Linux Enterprise AS3 for syd168 #发动项的菜单标题
root (hd0,0) #指定根文件体系,第1块硬盘第1个扇区中的/boot。
kernel /vmlinuz-2.4.18 ro root=LABEL=/ #内核在/boot中
initrd /initrd-2.4.18-14.img #发动RAM盘在/boot下

#以下是发动Windows的装备,假设只需Linux就不需求
title Windows2003 Enterprise for syd168 #Windows发动菜单标题
root noverify(hd0,1) #该操作体系在hd0的第二分区,不mount
chainloader +1 #从榜首个硬盘的第二个分区引导Windows

#=/boot/grub/grub.conf文件典范
上面的比方,仅仅简略说明晰GRUB中发动Linux和Windows的装备办法。更多的发动装备请参阅下面内容。5. 引导多体系装备GRUB支撑多操作体系引导。用GRUB引导后能够进入指令行形式或许菜单形式,能够经过灵敏的指令行形式挑选引导各个分区的操作体系,指定引导参数。GRUB支撑三种引导办法,一种是直接引导操作体系内核,另一种是经过chainload进行直接引导,第三种就是经过网络引导操作体系。关于GRUB能够支撑的Linux,FreeBSD,OpenBSD,NetBSD,GUN Mach等能够经过直接引导完结,可是关于GRUB不支撑的操作体系(如Windows),需求用第二种办法chainload来完结。下面就别离来看看这几种引导办法:(1) 直接引导
装备进程一般如下:
a) 用root指令设置包括操作体系内核的根设备
b) 用kernel指令装载内核映象文件,假设这个内核引导的时有参数的话,能够直接将参数加在内核文件名的后边
c) 用module或modulenounzip装载内核模块
d) boot开端引导
(2) chainload引导
a) 设置GRUB的根设备,用rootnoverify (hdx,y)指定
b) 开端引导,用chainloader +1指定,此处“+1”是指示GRUB读入分区的榜首个扇区的引导记载。
c) 履行boot开端引导
以上是一般的chainloader方法,关于DOS和WINDOWS,能够简略地用两条指令进行引导:chainloader (hdx,y)+1,然后boot,其间x,y用来指明地点分区号。
(3) 从网络引导:
为了使GRUB能够支撑从网络引导,需求在编译时翻开网络支撑选项(请参阅源文件中的netboot/README.netboot)。别的,要在网络中设置两个效劳:动态IP效劳(BOOTP、DHCP或RARP)和FTP效劳。然后,别离针对不同的效劳器BOOTP,DHCP或RARP运转bootp,dhcp或rarp。假设全部设置无误的话GRUB就会给出IP,IP netmask和TFTP效劳器的IP和网关的IP地址。最终,从网上得到操作体系的映象文件。下面是一个比方:
grub bootp
Probing...[NE*000]
NE2000 base ...
Address: 192.168.110.23 Netmask: 255.255.255.0
Server: 192.168.110.14 Gateway: 192.168.110.1
grub root (nd)
grub kernel /tftproot/gnumach.gz root=sd0s1

参阅来历:
ftp://alpha.gnu.org/gnu/grub/
https://www.linuxeden.com/html/sysadmin/20070530/26936.html
https://soft.zdnet.com.cn/software_zone/2007/1006/537431.shtml


https://blog.chinaunix.net/u3/93926/showart_1873482.html


全世界linuxer都知道grub是什么东西,但关于MBR引导到grub再引导到详细操作体系的这个流程或许有不少朋友就比较模糊了。这不,cu上一位朋友就发出了这样一个求助贴:假设现在一台电脑上装了WIN2000体系,那么我现在在装上LINUX体系和GRUB,那么假设把GRUB装在主分区的话,GRUB直接 引导 LINUX和WIN2000,我是能够了解的,由于MBR中是GRUB的STAGE1(对不对呢?),MBR经过查看DPT分区信息引导体系跳转至DBR (活动分区),我这儿想问的活动分区是什么时分设的呢?那么装GRUB到MBR里,那本来MBR中的WIN的引导信息是怎样处理的呢?是不是咱们假设说装 GRUB到MBR的时分,GRUB就把GRUB地点那个区设置为了活动分区了呢?然后GRUB引导时分,MBR就找到那个活动分区找到所需求的文件,然后 持续呢?假设说把GRUB装到其他分区(非主引导区)的话,那是怎样样完结GRUB先发动的呢?不是先MBR吗?由于装到了其他分区,没有改主引导区,因 此主引导区仍是WIN2000的引导数据啊,怎样会GRUB先发动了呢?这是为什么呢?跟活动分区有联系没有呢?我看材料上写的是哪个体系发动哪个体系就 是活动分区,可是那样的话,如同就解说不通了啊,就是最最开端这个当地一向不明白,理不清楚。下面就是cu各个玩家对这个问题剖析评论的总结。首要让咱们看看传统的发动流程:加载并运转Master Boot Record(MBR)主引导区内容(如lilo等)。然后扫描分区表,定位活动分区,并将活动分区上的引导扇区内容加载到内存中履行。体系引导进程首要由以下几个进程组成(以硬盘发动为例)1、 开机;2、 BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000;3、 将硬盘榜首个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;4、 查看(WORD)0000:7dfe是否等于0xaa55.若不等于则转去测验其他介质;假设没有其他发动介质,则显现 “No ROM BASIC” ,然后死机;5、 跳转到0000:7c00处履行MBR中的程序;6、 MBR先将自己复制到0000:0600处,然后持续履行;7、 在主分区表中查找标志为活动的分区。假设发现没有活动分区或许不止一个活动分区,则中止;8、 将活动分区的榜首个扇区读入内存地址0000:7c00处;9、 查看(WORD)0000:7dfe是否等于0xaa55,若不等于则显现 “Missing Operating System”,然后中止,或测验软盘发动;10、 跳转到0000:7c00处持续履行特定体系的发动程序;11、 发动体系。装grub到逻辑分区,那么就必定把grub装入的逻辑分区设为活动的。不过,这时分,grub接管了11步今后的动作:从stage 1.5读出grub.conf。再由装备和用户挑选决议下一步的引导行为。一般设备grub都有两种状况,关于设备到MBR这种状况而言,GRUB直接覆盖了本来的MBR引导程序。这也是为什么要换回“本来的 windows的引导方法”,只需用dos引导fdisk /mbr一下就能够的原因。为什么能够这样做,请留意,1-11步中有两个当地呈现了0000:7c00。不管是dos boot sector仍是nt loader它自身也是从0000:7c00运转的。其实ms当年开发分区办理的这个小程序适当所以在bios引导boot sector中插进去的。grub由于也是写的从0000:7c00这个内存开端的子程序,那么既能够被BIOS加载又能够被dos的MBR加载应该好理 解了吧。开机自检后,引导权交给了硬盘的MBR,此刻grub就发动了。由grub来引导windows /linux都能够。留意:linux不必定要设备在活动分区,由于引导程序在MBR!可是windows必定要设备在活动分区(可引导的 windows),第二个windows能够不设备在活动分区,但它的引导文件必定在活动分区。大体次第是:grub—- windows– 查找引导文件—引导加载—发动windowsgrub—- linux— 查找引导文件(/boot)– 引导加载—发动linux那么,假设把grub设备到了其它的分区上,不是MBR呢?这是grub所装在的那个主分区有必要被设为活动分区。由于MBR(物理主引导分 区)中其实并没有 OS相关的引导程序的,一般MBR仅仅扫描并读取随后的分区表,找到相应的活动分区,读取相应活动分区的榜首个扇区的512字节程序并运转,该程序担任进 一步引导相应分区的相应体系。因而,大约的运转次第是BIOS— MBR—- GRUB—- 菜单。这样,大体的实在流程就能够总结如下了:1、 开机;2、 BIOS加电自检(POST——Power On Self Test),内存地址为0fff:0000;3、 将硬盘榜首个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00处;4、 查看(WORD)0000:7dfe是否等于0xaa55.若不等于则转去测验其他介质;假设没有其他发动介质,则显现 “No ROM BASIC” ,然后死机;5、 跳转到0000:7c00处履行MBR中的程序;6、 MBR先将自己复制到0000:0600处,然后持续履行;假设先装XP后装LINUX,并且LINUX没有装在MBR,那这个MBR中的数据仍是WIN 写的数据,它的效果都是下步中所说的效果,就是查找主分区表中标志为活动的分区,那么这个时分就有必要把GRUB地点的主分区设置为活动的分区,这个时分才 能正常的发动GRUB,然后GRUB的STAGE1在调STAGE1.5和其他的,然后来引导整个体系。假设说先装XP后装LINUX,可是GRUB装在 了MBR,那样STAGE1直接调入内存,STAGE1在调STAGE1.5和STAGE2等,然后来引导体系。那这个时分是不需求将GRUB其他文件所 在的主分区设为活动分区的,它直接调STAGE1.5等,然后再调STAGE2等,来辨认文件体系,然后完结可多发动。7、 在主分区表中查找标志为活动的分区。假设发现没有活动分区或许不止一个活动分区,则中止;8、 将活动分区的榜首个扇区读入内存地址0000:7c00处;9、 查看(WORD)0000:7dfe是否等于0xaa55,若不等于则显现 “Missing Operating System”,然后中止,或测验软盘发动;10、 跳转到0000:7c00处持续履行特定体系的发动程序;11、 发动体系。一点材料:能正常作业的grub应该包括一下文件:stage1、stage2、*stage1_5、menu.lst。其间stage1的巨细必定是512字节,它要被设备(也就是写入)某个硬盘的主引导记载,或许某个活动分区(这个分区要用fdisk符号 成可发动的)的发动扇区。stage1的首要的也是仅有的效果就是找到你寄存在硬盘上某个当地的stage2文件,来完结后续的作业。stage2 文件能够存在在某个特定的文件体系中,比方你分了一个linux分区,在上面创立一个ext2文件体系,然后把这个文件拷贝到这个分区的某个目录下。也可 以把stage2直接寄存在硬盘的某个方位,也就是未分区的某个当地。不过,如同没有多少人会这么做吧。由于stage1的容量有限(主引导记载MBR和发动扇区的巨细只能够是512字节),所以它对文件体系是无法辨认的,那假设你把 stage2寄存 在 ext2或许fat格局的文件体系上,它怎么来找到这个文件呢?这就要用到上面说到的那些stage1_5的文件了,它们担任解说文件体系。你的 stage2放在什么格局的文件体系上,就要调用对应的那个stage1_5文件。比方,你把stage2寄存在ext2格局的文件体系上,就需求 e2fs_stage1_5;stage2寄存在fat格局的文件体系上,就需求fat_stage1_5了。



比方:title Install Ubuntu 8.10root (hd0,0)kernel (hd0,6)/vmlinuz boot=casper iso-scan/filename=/ubuntu-8.10-desktop-i386.iso ro quiet splash locale=zh_CN.UTF-8initrd (hd0,6)/initrd.gz榜首行root(hd0,0) 意思是指定榜首快硬盘,榜首个分区为当时引导目录!第二行:kernel 后边跟的是体系内核引导文件!加传递给内核的参数!第三行initrd 是虚拟磁盘文件!为了得到广泛硬件的支撑!这儿需求虚拟磁盘!由于在体系引导之前或许硬盘是不可用的 所以先虚拟一快磁盘出来 放引导文件!然后等引导到必定的进程再加载硬盘!



initrd 的重要性

咱们在本章稍早之前‘ boot loader 与 kernel 载入’的当地有略微讲过这个 initrd 的咚咚, 这玩意儿能够被称为 Initial RAM Disk (初始化虚拟磁碟)。前面也说到过 initrd 能够协助供给中心模组, 让 Linux 中心在‘开机的进程’傍边不需求挂载根目录就能够载入所需求的模组,最终得以顺畅进入 Linux 体系。 那你会问啊,啥时后需求 initrd 呢?这就得要从开机的流程谈起了。

咱们知道中心解压缩之后会开端侦测并且驱动一切硬体,可是中心档案并没有包括一切的硬体驱动程式, 而是一堆驱动程式以模组的方法寄存在 /lib/modules/`uname -r`/kernel/.... 傍边。 也就是说,在开机的进程傍边咱们还需求挂载根目录以便利让中心读取 /lib/modules/.... 内的中心模组, 这样才能够开机完结。简略的流程如下所示:

1. 读取 BIOS 设定,获得开机设备与主机板晶片等资讯;
2. 读取 MBR 内的开机载入器 (loader),并透过主机的 INT 13 硬体功用读取中心档案
3. 中心解压缩并且侦测硬体
4. 挂载根目录,视需求载入 /lib/modules/`uname -r`/... 内的中心模组
5. 开端履行 init 这支程式的后续流程等......

在上面的流程傍边不知道你有没有发现一个问题,那就是第 3, 4 进程之间,假设中心自身不知道档案体系格局时, 那怎么挂载根目录啊?当然无法挂载对吧!此刻就会形成无法开机的问题了!由于连根目录都无法挂载, 怎么进入 Linux 体系啊?您说是吧!那么或许会呈现这个问题吗?当然或许的! 假设你的 filesystem 是 LVM, RAID时,或许硬碟是 SCSI 介面时 (包括 SATA 或 USB 介面的磁碟), 那么预设的 Linux 中心档案将无法知道而无法挂载的啦! 果然如上所示,那么你除了从头编译中心将这些模组直接包在中心档案内之外,还有什么挑选?有的,那就是 initrd 啦!

initrd 能够将 /lib/modules/.... 内的‘开机进程傍边必定需求的模组’包成一个档案 (档名就是 initrd), 然后在开机时透过主机的 INT 13 硬体功用将该档案读出来解压缩,此刻中心就不需求挂载根目录, 由于中心所需求的模组都在 initrd 内了!其实一切的中心模组都在 /lib/modules/ 内, 因而只需能够挂载根目录,其他的模组读取都没有问题的,所以说:‘initrd 内所包括的模组大多是与开机进程有关,而首要以档案体系及硬碟模组 (如 usb, SCSI 等) 为主’的啦!

一般来说,需求 initrd 的时间为:

* 根目录地点磁碟为 SATA、USB 或 SCSI 等衔接介面;
* 根目录地点档案体系为 LVM, RAID 等特别格局;
* 根目录地点档案体系为非传统 Linux 知道的档案体系时。

之前鸟哥十分简略疏忽 initrd 这个档案的重要性,是由于鸟哥很穷... ^_^,由于鸟哥的 Linux 主机都是较前期的硬体, 运用的是 IDE 介面的硬碟,并且并没有运用 LVM 等特别格局的档案体系,而 Linux 预设中心自身就知道 IDE 介面的磁碟, 因而不需求 initrd 也能够顺畅开机完结的。自从 SATA 硬碟流行起来后,没有 initrd 就没办法开机了! 由于 SATA 硬碟运用的是 SCSI 模组来驱动的,而 Linux 预设中心并没有包括 SCSI 模组....

一般来说,各 distribution 供给的中心都会附上 initrd 档案,但假设你有特别需求所以想重制 initrd 档案的话, 能够运用 mkinitrd 来处理的。这个档案的处理方法很简略, man mkinitrd 就知道了! ^_^。 咱们仍是简略的介绍一下去!

[root@linux ~]# mkinitrd [with=模组称号] initrd档名 中心版别
参数:
with=模组称号:模组称号指的是模组的姓名罢了,不需求填写档名。举例来说,
现在中心版别的 ext3 档案体系模组为底下的档名:
/lib/modules/`uname -r`/kernel/fs/ext3/ext3.ko
那你应该要写成: with=ext3 就好了 (省掉 .ko)
initrd档名:你所要树立的 initrd 档名,尽量取有意义又好记的姓名。
中心版别  :某一个中心的版别,假设是现在的中心则是‘ `uname -r` ’


典范一:以 mkinitrd 的预设功用树立一个 initrd 虚拟磁碟档案
[root@linux ~]# mkinitrd initrd_`uname -r` `uname -r`
[root@linux ~]# ll
-rw-rr  1 root root 589106 Jun 27 11:39 initrd_2.6.9-55.EL
# 由于现在的中心版别可运用 uname -r 获得,因而鸟哥运用较简略的指令来处理啰~
# 此刻 initrd_2.6.9-55.EL 会被树立起来,你能够将他移动到 /boot 等候运用。

典范二:运用旧版中心树立含有 8139too 这个模组的 initrd 档案
[root@linux ~]# ll /lib/modules
drwxr-xr-x  3 root root 4096 Feb 28 23:59 2.6.9-42.0.10.EL
drwxr-xr-x  3 root root 4096 Feb  1 05:17 2.6.9-42.0.8.EL
drwxr-xr-x  3 root root 4096 Oct 15  2006 2.6.9-42.EL
drwxr-xr-x  3 root root 4096 May 20 16:53 2.6.9-55.EL
# 这个指令能够看出有多少中心版别,鸟哥想要用 2.6.9-42.EL 来玩的!

[root@linux ~]# mkinitrd with=8139too initrd_2.6.9-44.EL 2.6.9-42.EL
[root@linux ~]# ll
-rw-rr  1 root root 603934 Jun 27 11:45 initrd_2.6.9-44.EL
# 假设与典范一比较,有没有发现这个档案比较大一点,由于多含了一个模组之故。

initrd 树立完结之后,一起中心也处理完毕后,咱们就能够运用 grub 来树立选单了! 底下持续瞧一瞧吧!


版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    常用工具alibaba

    日志,检查,监控
  • 3
  • 4
  • 5

    pthread快报

    线程,运转,调用
  • 6

    linux 解压rarmingxing

    原生,指令
  • 7

    Linux常用端口sohu

    协议,效劳,端口
  • 8

    apache 的modguojizaixian

    状况,指令,检查
  • 9

    epoll学习ITeye快报

    数据,事情,形式
  • 10

    linux sort uniqITeyealibaba

    排序,文件,字符