linux grub 引导启动过程详解
linux开机如何进入grub命令行模式,并通过grub命令进入系统

linux开机如何进⼊grub命令⾏模式,并通过grub命令进⼊系统今天突然想了解⼀下grub的⼯作模式,于是想着,开机的时候进⼊grub命令⾏模式看看grub都有哪些功能。
⼀、进⼊grub命令⾏1、开机启动后在grub引导弹出需要进⼊的系统界⾯时,按c键直接进⼊命令⾏模式,也可按 e 建进⼊编辑引导参数界⾯,根据提⽰按 ctrl-c 或者 F2 进⼊命令⾏。
2、如果开机时不显⽰引导菜单,⽽是直接进⼊系统,则需要在系统启动前按住shift 键,在菜单中选择发⾏版条⽬后按e键进⼊。
3、根据提⽰按 ctrl-c 或者 F2 进⼊命令⾏。
⼆、从grub命令⾏进⼊系统1. ⾸先利⽤ls命令,找到Ubuntu安装在哪个磁盘分区;⽐如输⼊ls后我的机器列出的磁盘分区信息如下:(hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1)查找包含grub.cfg⽂件的分区假定通过 ls (hd1,gpt2)/boot/grub 发现了grub.cfg⽂件,则表明Linux安装在这个分区2. 找到Linux的/boot分区,以及/根分区所在的磁盘位置输⼊ cat (hd0,gpt2)/etc/fstab会输出类似下⾯的信息# <file system> <mount point> <type> <options> <dump> <pass>3. 指定Linux内核,及/所在分区grub> linux /boot/vmlinuz-4.8.0-36-generic ro text root=/dev/sda24. initrd命令指定initrd⽂件grub> initrd /boot/initrd.img-4.8.0-36-generic5. boot引导系统,结束grub> boot。
grub2 原理

grub2 原理全文共四篇示例,供读者参考第一篇示例:Grub2是一款广泛应用于Linux操作系统的引导管理器,其设计的初衷是为了解决引导多个操作系统的问题。
Grub2的设计极具灵活性和可扩展性,使得它成为目前最流行的引导管理器之一。
Grub2的工作原理十分复杂,但可以简单地分为几个主要步骤:第一步是启动引导加载程序。
当计算机启动时,BIOS会加载Grub2引导加载程序到内存中,并执行引导加载程序。
引导加载程序的主要功能是在系统启动时向用户提供一个选择菜单,让用户选择要启动的操作系统。
第二步是加载内核。
一旦用户选择了要启动的操作系统,Grub2会加载该操作系统的内核文件到内存中。
内核文件包含了操作系统的核心功能,如进程管理、文件系统等。
第三步是加载初始化RAM磁盘(initrd)。
在加载内核之后,Grub2会加载initrd文件到内存中。
initrd是一个临时的文件系统,用于初始化硬件设备和加载驱动程序,以便系统能够顺利启动。
第四步是启动操作系统。
Grub2会将控制权交给内核,由内核初始化系统并启动用户空间进程,最终启动操作系统。
Grub2的设计具有许多优点,例如支持多种文件系统和操作系统,能够通过脚本和配置文件自定义启动选项,支持密码保护和图形界面等。
Grub2还支持在启动时对引导选项进行编辑,方便用户在系统启动时进行调试和配置。
Grub2也存在一些缺点,例如在配置文件中出现错误可能导致系统无法启动,引导加载程序的体积相对较大,可能会增加系统启动时间等。
在使用Grub2时,用户需要仔细阅读文档并谨慎配置,以避免出现问题。
Grub2是一款功能强大且灵活的引导管理器,能够帮助用户管理多个操作系统的启动过程。
它的工作原理虽然复杂,但通过对其原理和配置文件的深入了解,用户可以充分利用其强大的功能,提高系统的稳定性和性能。
第二篇示例:Grub2是一个多重引导加载程序,常用于Linux系统,负责加载操作系统。
arm版本linux系统的启动流程

arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
Linux启动过程详解_MBR和GRUB概述

MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。
本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。
常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。
grub启动流程及原理

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 15 sectors are embedded.
-rw-r--r-- 1 root root 8904 2010-10-23 xfs_stage1_5
[cent@localhost ~]$
现在我们把Grub再安装一次,安装在MBR(MBR广义可指主引导扇区):
[cent@localhost ~]$ sudo grub
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
手动通过grub命令行启动Linux或者win系统

手动通过grub命令行启动Linux或者win系统前些天fedora的启动菜单grub.conf丢失,无法进入系统。
不过,grub启动管理器还好好的,只好通过grub命令行来手动引导启动系统了。
在“从硬盘安装fedora 8 ”中曾经稍微提到过,grub是一个多系统的启动管理器,不但有linux版本的grub,也有windows版本的grub。
上次从硬盘安装系统用的就是windows版本的grub。
可以说,grub是一个非常强大的多系统启动管理器,具有多重系统引导,交互式操作,可设置grub启动密码,可映射硬盘,可以定制开机画面等等特点。
通过命令行启动系统就是交互式操作的一个应用,至于其它应用,这里就不再一一列出。
想要深入了解它的话,可以看一下grub的手册:/main/doc/grub/grubmanual/index.html 。
说来惭愧,我还没完全看过。
哈哈。
闲话少说,先把通过命令行启动系统的过程列出来。
为了解释方便,特标上行号:1root (hd0,2)2kernel /vmlinuz-2.6.26.5-28.fc8 ro root=/dev/VolGroup00/LogVol00 rhgb quiet 3initrd /initrd-2.6.26.5-28.fc8.img4boot怎么样?linux的启动命令行是不是很简洁啊?下面就一一解释这几命令。
第1行命令:指定/boot所在的分区。
要是不知道自己的/boot分区在哪里,没关系,先输入root (hd0,然后按Tab键,它会显示可能的分区,然后根据分区类型判断/boot分区。
我就是这么做的......所以Tab键是linux里很好用的一个键。
这里指定/boot分区并不是必须的,在这里省略的话要在kernel 以及initrd中指定,即:kernel (hd0,2)/vmlinuz-2.6......和initrd (hd0,2)/initrd-2.6......关于"hd0,2”,是指第一块硬盘的第三个分区,这是一个主分区。
GRUB2及启动过程详解

GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
GRUB引导下进Linux单用户模式的三种方式,修改root密码

GRUB引导下进Linux单用户模式的三种方式,修改root密码首先,启动电脑,屏幕出现是GRUB的提示:‘e’ 在booting前编辑启动命令行‘a’ 在booting前编辑kernel的参数‘c’进入grub命令行由此按‘e’、a’、‘c’三个不同的键,进入三种不同的操作:1.快速法:选择Fedora Core (2.6.9-1.667)菜单,按a键:grub append>,versace handbags;ro root=/dev/VolGroup00/LogVol00 rhgb quiet修改成:grub append>ro root=/dev/VolGroup00/LogVol00 single quiet按ENTER键完成修改并booting进入Linux单用户模式sh-3.00# passwd这时就会让你输入新的root密码,输入后,还出来sh-3.00#就不用管了,好像一会就能进入下面的重启的,又输了下reboot ,重启生效。
2.简便法:选择Fedora Core (2.6.9-1.667)菜单,按e键:root (hd0,2)kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quietinitrd /initrd-2.6.9-1.667.img选择kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quiet命令行按e键:grub edit>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 rhgb quiet修改成:grub edit>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 single quiet按ENTER键完成修改按b键booting进入Linux单用户模式sh-3.00#3.手动法:按c键进入grub命令行:(在grub命令行下按TAB键可得到grub命令帮助与grub命令的可能选项)grub>fstest (grub>filesystem tracing is now ongrub>root (hd0,2) ((指定保存有Linux 内核的分区为第一个硬盘的第三个分区)grub>filesystem type is ext2fs,partition type 0x83grub>kernel /vmlinuz-2.6.9-1.667 ro root=/dev/VolGroup00/LogVol00 single quiet ((指定内核文件为/boot/vmlinuz-2.6.9-1.667,内核参数为ro―readonly, 根分区为/dev/VolGroup00/LogVol00,rhgb―图形方式启动,quiet―不输出启动信息)grub>initrd /initrd-2.6.9-1.667.img ((在内核启动前加载支持系统硬件设备的内核模块---initrd镜像文件--/boot/initrd-2.6.9-1.667.img,并初始化RAM disk)grub>boot (如果系统的配置与脚本文件正确,以上三种方式在Booting command-list中都会出现:remounting root filesystem in read-write mode:[OK]表示此时linux单用户模式下的根文件系统处于可读可写状态。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux grub 引导启动过程详解2008-01-08 17:18这几天看了很多文档,算是对linux的启动过程有了比较细致的了解.网上有很多文章谈到这方面的内容,但总觉得没有一篇完全的解析linux启动的细节,下面是我小弟在学习的过程中总结出来的一些东东.这个是完整的linux启动过程,不涉及内核,但是我觉得比较详细哦.(由于本人比较懒,这一段是从网上抄的)机器加电启动后,BIOS开始检测系统参数,如内存的大小,日期和时间,磁盘设备以及这些磁盘设备用来引导的顺序,通常情况下,BIOS都是被配置成首先检查软驱或者光驱(或两者都检查),然后再尝试从硬盘引导。
如果在这些可移动的设备中,没有找到可引导的介质,那么BIOS通常是转向第一块硬盘最初的几个扇区,寻找用于装载操作系统的指令。
装载操作系统的这个程序就是boot loader.linux里面的boot loader通常是lilo或者grub,从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。
那么启动的时候grub是如何被载入的呢grub有几个重要的文件,stage1,stage2,有的时候需要stage1.5.这些文件一般都在/boot/grub文件夹下面.grub被载入通常包括以下几个步骤:1. 装载基本的引导装载程序(stage1),stage1很小,网上说是512字节,但是在我的系统上用du -b /boot/grub/stage1 显示的是1024个字节,不知道是不是grub版本不同的缘故还是我理解有误.stage1通常位于主引导扇区里面,对于硬盘就是MBR了,stage1的主要功能就是装载第二引导程序(stage2).这主要是归结于在主引导扇区中没有足够的空间用于其他东西了,我用的是grub 0.93,stage2文件的大小是107520 bit.2. 装载第二引导装载程序(stage2),这第二引导装载程序实际上是引出更高级的功能,以允许用户装载入一个特定的操作系统。
在GRUB中,这步是让用户显示一个菜单或是输入命令。
由于stage2很大,所以它一般位于文件系统之中(通常是boot所在的根分区).上面还提到了stage1.5这个文件,它的作用是什么呢你到/boot/grub目录下看看,fat_stage_1.5 e2fs_stage_1.5 xfs_stage_1.5等等,很容易猜想stage1.5和文件系统有关系.有时候基本引导装载程序(stage1)不能识别stage2所在的文件系统分区,那么这时候就需要stage1.5来连接stage1和stage2了.因此对于不同的文件系统就会有不同的stage1.5.但是对于grub 0.93好像stage1.5并不是很重要,因为我试过了,在没有stage1.5 的情况下, 我把stage1安装在软盘的引导扇区内,然后把stage2放在格式化成ext2或者fat格式的软盘内,启动的时候照常引导,并不需要e2fs_stage_1.5或者fat_stage_1.5.下面是我的试验:#mkfs.ext2 /dev/fd0#mount -t ext2 /dev/fd0 /mnt/floppy#cd /mnt/floppy#mkdir boot#cd boot#mkdir grub (以上三步可用mkdir -p boot/grub命令完成)#cd grub#cp /boot/grub/{stage1,stage2,grub.conf} ./#cd; umount /mnt/floppy以上几步把软盘格式化成ext2格式,然后把stage1,stage2,grub.conf这几个启动的时候必须的文件拷贝到软盘的指定目录下.下面安装grub到软盘上.#grub (进入grub环境)grub> install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2p (fd0)/boot/grub/grub.conf以上这条命令也可以用下面的两句代替grub>root (fd0) #grub的根目录所在的分区grub>setup (fd0) #这一步就相当于上面的install命令我在这里解释一下install (fd0)/boot/grub/stage1 (fd0) (fd0)/boot/grub/stage2 p(fd0)/boot/grub/grub.conf 这条命令.install告诉GRUB将(fd0)/boot/grub/grub/stage1安装到软驱的引导扇区(fd0).(fd0)/boot/grub/stage2告诉grub stage2这个文件所在的位置.p 参数后面跟着(fd0)/boot/grub/grub.conf 告诉grub的配置文件所在的位置.好了,让BIOS从软驱启动,试一下,没有e2fs_stage_1.5文件照样能够进入系统.其实这就是一个小小的启动盘啊.(了解了grub的运行原理,就简单多了^_^)3. 现在我们已经到grub的开机选单这一步了,接下来grub所需要做的就是装载在一个特定分区上的操作系统,如linux内核。
一旦GRUB从它的命令行或者配置文件中,接到开始操作系统的正确指令,它就寻找必要的引导文件,然后把机器的控制权移交给操作系统.由于篇幅有限,避免冗长,grub的命令我就不多说了,网上很有多的资料,一个典型完整的引导linux的命令如下:title 51baseroot(hd0,0)kernel /bzImage ro root=/dev/ram0initrd /initrd.img这里有必要注意一下几个问题:(1)grub的磁盘以及分区的命名方式和linux有所区别,第一个磁盘是从0开始,第一个分区也是从0开始.譬如第一个硬盘的第5分区在linux下面是/dev/hda5 ,而在grub里面是(hd0,4).再如/dev/fd0在grub里面是(fd0,0).(最后一句如有错误望提醒)(2)不管是IDE硬盘hda,hdb还是SCSI硬盘sda,sdb在grub里面都是以hd方式命名. 譬如虚拟机里面的/dev/sda2在grub里面是(hd0,1),再如/dev/hdb7在grub里面以(hd1,6) 命名.(3)要搞清楚上面两个root的关系,root (hd0,0)中的root是grub命令,它用来指定boot所在的分区作为grub的根目录.而root=/dev/ram0是kernel的参数,它告诉操作系统内核加载完毕之后,真实的文件系统所在的设备.要注意grub的根目录和文件系统的根目录的区别.再回到上面的几行命令.kernel命令用来指定内核所在的位置,"/"代表(hd0,0),也就是grub的根目录initrd命令用来指定初始化ram的img文件所在位置.grub载入内核bzImage并展开到指定位置(应该是0x100000这个地方),同时载入initrd.img到内存(不知道是什么地方).ps:grub的任务至此就结束了,下面grub将机器的控制权转交给操作系统(linux).操作系统接到控制权之后,开始start_kernel,接着内核将initrd.img展开到/dev/ram0 为临时根文件系统,执行里面的linuxrc文件.P.这里有必要说一下initrd的作用特别是它里面的核心文件linuxrc的作用.initrd是inital ram disk的宿写.当存在initrd的时候,机器启动的过程大概是以下几个步骤(当initrd这一行用noinitrd 命令代替后,就不存在initrd了)1)boot loader(grub)加载内核和initrd.img2)内核将压缩的initrd.img解压成正常的ram disk并且释放initrd所占的内存空间3)initrd作为根目录以读写方式被挂载4)initrd里面的文件linuxrc被执行5)linuxrc挂载新的文件系统6)linuxrc使用pivot_root系统调用指定新的根目录并将现有的根目录place到指定位置.7)在新的文件系统下正式init8)initrd被卸载.为了便于理解,我将red hat linnux9 里面的initrd-2.4.20-8.img拿出来分析一下.这其实是一个压缩了的文件,是以gz结尾的.[root@localhost root]#cp /boot/initrd-2.4.20-8.img /mnt/initrd-2.4.20-8.gz [root@localhost root]#gunzip /mnt/initrd-2.4.20-8.gz[root@localhost root]#mount -o loop /mnt/initrd-2.4.20-8 /mnt/ram//********************************* added by me *********************************//有可能出现错误:you must specify the filesystem type.这时输入命令:[root@localhost root]#file /mnt/initrd-2.4.20-8initrd-2.4.20-8:ASCii cpio archive靠!这也能挂载吗?直接使用下列命令:[root@localhost root]#cp initrd-2.4.20-8 /mnt/ram/[root@localhost root]#cd /mnt/ram[root@localhost root]#cpio -ivdm < initrd-2.4.20-8//********************************* end of added *********************************// [root@localhost ram]#lsbin dev etc lib linuxrc loopfs proc sbin sysroot[root@localhost ram]#ls bininsmod modprobe nash[root@localhost ram]#ls libBuslogic.o ext3.o jbd.o scsi_mod.o sd_mod.o[root@localhost ram]ls devconsole null ram systty tty1 tty2 tty3 tty4sbin目录是指向bin目录的一个连接,其他目录是空的.[root@localhost ram]cat linuxrc#!/bin/nash1.echo "Loading scsi_mod.o module"2.insmod /lib/scsi_mod.o3.echo "Loading sd_mod.o module"4.insmod /lib/sd_mod.o5.echo "Loading BusLogic.o module"6.insmod /lib/BusLogic.o7.echo "Loading jbd.o module"8.insmod /lib/jbd.o9.echo "Loading ext3.o module"10.insmod /lib/ext3.o11.echo Mounting /proc filesystem12.mount -t proc /proc /proc13.echo Creating block devices14.mkdevices /dev15.echo Creating root device16.mkrootdev /dev/root17.echo 0x0100 > /proc/sys/kernel/real-root-dev18.echo Mounting root filesystem19.mount -o defaults --ro -t ext3 /dev/root /sysroot20.pivot_root /sysroot /sysroot/initrd21.umount /initrd/proc上面的编号是我为了下面好说明加上去的.首先我们必须注意的是这里使用的shell是nash而不是bash,nash是专门为linuxrc可执行脚本设计的,因此你有必要看一看nash的man文档.1-10行是加载一些必要的模快.11-12行加载proc内核文件系统,13-14行利用nash内建的命令mkdevices创建块设备,mkdevices是根据/proc/partitions文件创建里面列出的所有块设备.15-16行利用nash内建的命令mkrootdev,mkrootdev使它后面的参数/dev/root成为一个块节点从而使得根分区设备被挂载,其中根分区设备由grub.conf里面的kernel命令后面所带的参数root=决定,如果root=参数没有被指定,/proc/sys/kernel/real-root-dev文件将提供根分区设备号.17行将数字256写入到后面的文件里面去.18-19行挂载根文件系统到/sysroot目录下,/dev/root里面的内容就是root=参数所指定的设备里面的内容20行调用pivot_root改变根目录所在地并place旧的根目录到指定的位置.21行卸载旧的根目录里面的proc内核文件系统.从这里面我们总结一下linuxrc的作用: (参考/usr/src/linux-2.4/Documentation/initrd.txt文档)2)/linuxrc文件决定在挂载真正的文件系统之前所需完成的事情(譬如加载必要的网络驱动或者加载ext3文件系统).3)/linuxrc加载必要的模块.4)/linuxrc挂载根文件系统5)/linuxrc调用pivot_root来改变根目录关于initrd的用途可以查考上面提到的文档,想知道linux系统是如何安装的吗那里面由答案.既然linuxrc的主要目的是加载模快用的,那如果我们的内核没有动态的模块而所需的功能都是静态编译进内核的,那么是不是可以不用linuxrc文件呢答案是可以不用,在普通的linux操作系统里面可以加入noinitrd选项以告知boot loader 不使用initrd.如果我们做网关,因为ram是我们的文件系统的载体,所以initrd 一行当然不能去掉,但是我们可以不用linuxrc文件,sysroot文件夹和initrd文件夹. 不信的话,试试看吧.好了,initrd(linuxrc)已经介绍完了.linuxrc执行完毕之后,系统就会以真正的根目录正式init.系统在/bin/或者/sbin目录下找到init程式,然后根据它的配置文件/etc/fstab进行初始化,最后调用mingetty程式启动login完成引导.ps:init这一部分网上有很多的详细资料所以我在这里并没有展开来说.。