linux启动引导过程(greb)

合集下载

Linux操作系统之一:简述Linux系统开机引导和启动过程

Linux操作系统之一:简述Linux系统开机引导和启动过程

Linux操作系统之一:简述Linux系统开机引导和启动过程操作系统的启动分为两个阶段:•引导boot•启动startup引导阶段开始于打开电源开关,结束于内核初始化完成和systemd 进程成功运行。

启动阶段接管了剩余工作,直到操作系统进入可操作状态。

总体来说,Linux 的开机引导和启动过程是相当容易理解,下文将分节对于不同步骤进行详细说明。

•BIOS 上电自检(POST)•引导装载程序 (GRUB2)•内核初始化•启动 systemd,其是所有进程之父。

注意,本文以 GRUB2 和 systemd 为载体讲述操作系统的开机引导和启动过程,是因为这二者是目前主流的 linux 发行版本所使用的引导装载程序和初始化软件。

当然另外一些过去使用的相关软件仍然在一些 Linux 发行版本中使用。

引导过程引导过程能以两种方式之一初始化。

•其一,如果系统处于关机状态,那么打开电源按钮将开启系统引导过程•其二,如果操作系统已经运行在一个本地用户(该用户可以是root 或其他非特权用户),那么用户可以借助图形界面或命令行界面通过编程方式发起一个重启操作,从而触发系统引导过程。

重启包括了一个关机和重新开始的操作。

BIOS 上电自检(POST)上电自检过程中其实Linux 没有什么也没做,上电自检主要由硬件的部分来完成,这对于所有操作系统都一样。

当电脑接通电源,电脑开始执行BIOS(基本输入输出系统Basic I/O System)的POST (上电自检Power On Self Test)过程。

BIOS 上电自检确认硬件的基本功能正常,然后产生一个 BIOS 中断INT 13H,该中断指向某个接入的可引导设备的引导扇区。

它所找到的包含有效的引导记录的第一个引导扇区将被装载到内存中,并且控制权也将从引导扇区转移到此段代码。

引导扇区是引导加载器真正的第一阶段。

大多数Linux 发行版本使用的引导加载器有三种:GRUB、GRUB2 和 LILO。

linux开机如何进入grub命令行模式,并通过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。

linux系统的流程

linux系统的流程

Linux系统的启动流程可以大致分为以下几个步骤:1.开机自检(BIOS):服务器主机开机以后,将根据主板BIOS中的设置对cpu、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,大多时候会移交给本机硬盘。

2.MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据MBR记录的引导信息调用启动菜单(如GRUB)。

3.GRUB菜单:对于Linux操作系统来说,GRUB (统一启动加载器)是使用最为广泛的多系统引导器程序。

系统控制权传递给GRUB以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载Linux内核文件,然后将系统控制权转交给内核。

4.内核加载:内核是操作系统最基本的部分,负责管理系统的硬件和软件资源。

当GRUB将系统控制权转交给内核时,内核开始运行并加载必要的驱动程序和模块。

5.用户层init依据inittab文件设定运行等级:内核加载之后,第一个运行的程序是/sbin/init,该程序会读取/etc/inittab文件来设定系统的运行等级。

运行等级决定了系统的运行方式和提供的服务。

6.执行rc.sysinit:在设定运行等级之后,/etc/rc.d/rc.sysinit脚本被执行,用于进行系统初始化工作,如设置PATH环境变量、网络配置、分区挂载等。

7.启动内核模块和执行不同级别的脚本程序:根据不同的运行等级,系统会加载相应的内核模块,并执行不同级别的脚本程序,以启动或停止相应的服务。

8.进入系统登陆界面:最后,系统进入登录界面,用户可以输入用户名和密码进行登录,开始使用Linux系统。

以上步骤是一般的Linux系统启动流程,具体细节可能因不同的Linux发行版和配置而有所不同。

Linux启动引导流程

Linux启动引导流程

Linux启动引导流程一、启动过程:固件firmware(CMOS/BIOS) → POST 加电自检↓自举程序BootLoader(GRUB) →载入内核↓载入内核Kernel →驱动硬件↓启动进程init↓读取执行配置文件/etc/inittab二、主要步骤:1、固件(firmware)的加电自检POST CMOS/BIOS(引导介质,软硬件时钟)2、读取硬盘的第一个位置主引导记录MBR(存放自举程序bootloader)3、Linux下的常用是grub,作用是载入内核(kernel)和镜像文件加载内核4、内核做两件事情驱动硬件和启动init进程Init进程5、Init进程启动后读取/etc/inittab配置文件6、/etc/inittab是一个shell脚本完成后续的系统引导7、首先判断系统的缺省的运行级别/etc/initdefault查看运行级别级别加载脚本8、执行/etc/rd.d/rc.sysinit系统服务启动脚本不管系统在任何运行级别都会运行来进行基本服务的加载9、/etc/rc.d/rc会根据系统的运行级别运行相应的/etc/rc.d/rcN.d (N(0-6)对应运行级别) 这个目录下有两种运行脚本分别以S和K 开头的,S表示开启的服务,K表示关闭的服务服务脚本10、到username、password界面三、启动信息查询dmesg查询系统启动过程里面所有的信息最重要的是内核驱动硬件的信息,可以查看所添加的硬件是否被系统所识别日志文件/var/logBoot.log启动日志,一般是空的Messages 查看某一个服务的启动日志文件,如果某个服务启动的时候出现问题也会记录下来。

linux启动引导过程(greb)

linux启动引导过程(greb)

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命令来引导linux

grub命令来引导linux

grub命令来引导linux由于对linux系统的好奇,想按在机器上玩玩。

昨天忙活了一晚上,最终才把linux安装好。

但高兴的有点太早了,我还以为进linux就像进windows那么简单哪,没有想到却蹦出来一个引导命令(grub),让我引导,我一看麻木了。

一点也不会。

没有办法我实在熬不住了,就关机睡了。

今天中午,上网查资料。

把有关的命令给熟悉了一边。

不过看后挺费劲的。

试了几次还是不行。

我就没有弄了。

本打算放弃的。

没有想到下午来灵感了。

敲几个命令就进了。

这次安装让我学到了不少。

下面来主要讲一下在grub下来引导linux;其步骤如下;a 进入grub的命令模式。

b 先熟悉一下grub 的一些命令grub>helpc 熟悉一下cat命令d root指令来指定/boot所在的分区e kernel指令来指定linux的内核,及所在的分区f 用initrd命令来指定initrd文件g boot引导系统cat命令的用法cat指令是用来查看文件内容的,有时我们不知道Linux的/boot分区,以及/根分区所在的位置,要查看/etc/fstab的内容来得知,这时,我们就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容;注意要学会用tab键命令补齐的功能;grub> cat ( 按tab 键会出来hd0或hd1之类的;grub> cat (hd0, 注:输入hd0,然后再按tab键;会出来分区之类的;grub> cat (hd0,6)Possible partitions are:Partition num: 0, Filesystem type unknown, partition type 0x7Partition num: 4, Filesystem type is fat, partition type 0xbPartition num: 5, Filesystem type is reiserfs, partition type 0x83 Partition num: 6, Filesystem type is ext2fs, partition type 0x83 Partition num: 7, Filesystem type unknown, partition type 0x83Partition num: 8, Filesystem type is reiserfs, partition type 0x83 Partition num: 9, Filesystem type unknown, partition type 0x82grub> cat (hd0,6)/etc/fstab 注:比如我想查看一下 (hd0,6)/etc/fstab的内容就这样输入;LABEL=/ / ext3 defaults1 1/dev/devpts /dev/pts devpts gid=5,mode=62 0 0 0/dev/shm /dev/shm tmpfs defaults 0 0/dev/proc /proc proc defaults 0 0/dev/sys /sys sysfs defaults 0 0LABEL=SWAP-hda1 swap swap defaults 0 0/dev/hdc /media/cdrecorder auto pamconsole,ex ec,noauto,managed 0 0主要查看/etc/fstab中的内容,主要是Linux的/分区及/boot是否是独立的分区;如果没有/boot类似的行,证明/boot和Linux的/处于同一个硬盘分区;比如上面的例子中LABEL=/ 这行是极为重要的;说明Linux系统就安在标签为LABEL=/的分区中;如果您的Linux系统/boot和/没有位于同一个分区,可能cat (hd[a-n],y) 查到的是类似下面的;LABEL=/ / ext3 defaults 1 1LABEL=/boot /boot ext3 defaults 1 2root (hd[0-n,y) 指令来指定/boot所在的分区;其实这个root (hd[0,n],y)是可以省略的,如果省略了,我们要在kerenl 命令中指定;我们前面已经说过(hd[0-n],y) 硬盘分区的表示方法的用途;主要是用来指定/boot所在的分区;eg:grub> root (hd0,0)kernel 指令,用来指定Linux的内核,及/所在的分区;kernel 这个指令可能初学者有点怕,不知道内核在哪个分区,及内核文件名的全称是什么。

linux启动流程

linux启动流程Linux启动流程。

Linux操作系统的启动流程是一个非常复杂的过程,涉及到多个环节和组件的协同工作。

在本文中,我们将介绍Linux系统的启动流程,以帮助读者更好地理解Linux系统的启动过程。

首先,当计算机开机时,BIOS(基本输入/输出系统)将被激活。

BIOS是一个位于计算机主板上的固件,其作用是初始化硬件设备,并加载引导程序。

接着,BIOS将在预定义的设备上搜索引导扇区,通常是硬盘或固态硬盘。

一旦找到引导扇区,BIOS将把控制权交给引导扇区上的引导加载程序(boot loader)。

引导加载程序的作用是加载操作系统内核,并将控制权交给内核。

在Linux系统中,最常用的引导加载程序是GRUB(GRand Unified Bootloader)。

GRUB具有丰富的功能和灵活的配置选项,可以加载多个操作系统,并支持在系统启动时进行参数设置。

一旦内核被加载,它将开始初始化系统硬件,并启动用户空间进程。

内核首先会进行一系列的自检和硬件初始化,确保系统硬件处于正常工作状态。

接着,内核将加载并挂载根文件系统,这是系统中所有其他文件系统的起点。

一旦根文件系统被挂载,内核将启动用户空间进程。

用户空间进程是系统中的所有应用程序和服务的运行环境,包括init进程和其他系统进程。

init进程是Linux系统中的第一个用户空间进程,它负责启动系统中的所有其他进程,并提供系统初始化和管理功能。

在init进程启动后,它将根据配置文件启动系统中的各种服务和应用程序。

这些配置文件通常位于/etc/init.d/目录下,包括了系统启动时需要运行的各种服务和应用程序。

init进程将按照这些配置文件的要求,逐个启动系统中的各项服务和应用程序。

最后,在所有必要的服务和应用程序都被启动后,系统将进入用户登录界面,等待用户输入用户名和密码。

一旦用户成功登录,系统将启动用户的默认shell,并提供给用户一个可操作的命令行界面或图形界面。

Linux的启动流程

Linux的启动流程1. 从BIOS到KERNELBIOS自检->MBR(GRUB)->KERNEL->KERNEL自解压->内核初始化->内核启动BIOS自检当电脑开机的时候,电脑会进入BIOS,BIOS的工作要紧是侦测电脑的周边配套设备是否工作正常,如CPU的类型、速度、缓存等主板类型内存的速度,容量硬盘的大小,类型和工作模式风扇速度等要紧是为了检查这些设备在开机的时候是否能通过检测,假如能通过检测,说明电脑能够正常的工作。

-----------------------------------------一、载入启动程序BIOS自检完成后,BIOS会依照用户设置的启动顺序来由那个设备来启动电脑的操作系统,那个设备一样是硬盘。

也确实是进入到硬盘的MBR区域(引导扇区),那个区域中的有512个字节的大小,其中前446个字节中储存的程序是选择启动分区,也确实是电脑由那个硬盘分区来载入开机的程序。

那么在那个446个字节的空间中储存的确实是启动程序,然后由那个小程序来加载存储在其他位置的操作系统,也确实是启动grub程序。

当找到启动设备(硬盘)时,第一时期所用的boot loader(存放在引导扇区)被装载到RAM中并被执行。

那个地点的boot loader在大小上小于一个扇区的大小,也确实是512字节,而它的任务,确实是加载第二时期的boot loader。

当负责第二时期的boot loader位于内存中并被执行时,通常会显示一个一闪而过的屏幕,然后linux以及可选的初始化内存盘(一种临时的根文件系统,假如想得到具体的介绍,请访问://likunarmstrong.bokee /5502266.html) 会被装载到储备器中。

当系统镜像被加载时,第二时期的boot loader将把操纵权转交给内核镜像,与此同时,内核开始自解压并初始化。

在那个时期,第二时期的boot loader会检查系统的硬件,枚举那些附加的硬件设备,挂载根设备,之后加载需要的内核模块。

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引导过程

Linux操作系统下GRUB引导过程及原理(1)GRUB是一个多重启动管理器。

GRUB是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择启动哪个系统。

它可以启动的操作系统包括Linux, FreeBSD, Solaris, NetBSD, BeOS, OS/2, Windows 95/98 /NT /2000。

它可以载入操作系统的内核和初始化操作系统(如Linux, FreeBSD),或者把启动权交给操作系统(如Windows 98)来完成启动。

Thiz Server默认安装GRUB,并用它来启动机器。

安装了GRUB,开机后会出现一个菜单,列出所有的启动选项。

如果设置了启动画面,则会显示启动画面,按【Esc】键则可以取消启动画面显示菜单选项GRUB,按【e】是编辑启动命令,按【c】是使用命令行等。

用上下键可以选择菜单项,按【Enter】启动所选项。

按【e】键可以编辑所选项的启动命令,您可以用这个功能临时改变系统的启动参数。

按【c】键则进入命令行模式。

在命令行模式下可以输入命令直接执行,例如可以敲入poweroff关闭电脑。

按【Tab】键可以列出所有支持的命令。

GRUB可以代替LILO来完成对Linux的启动,特别适用于Linux与其他操作系统共存情况,与LILO相比,它有以下特点:支持大硬盘以前许多Linux发行版本的LILO 都有同样的一个问题:根分区(/boot分区)不能分在超过1024柱面的地方,一般是在8.4GB左右的地方,否则LILO不能安装,或者安装后不能正确启动系统。

而GRUB就不会出现这种情况,只要安装时您的大硬盘是在LBA模式下,GRUB就可以启动根分区在8GB以外的操作系统。

在LILO下,您需要手动输入操作系统的名字来启动不同的操作系统。

而GRUB使用一个菜单来选择不同的系统进行开机。

您还可以自己设置各种参数,如延迟时间、默认操作系统等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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@localhostroot]#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选项以告知bootloader 不使用initrd.如果我们做网关,因为ram是我们的文件系统的载体,所以initrd一行当然不能去掉,但是我们可以不用linuxrc文件,sysroot文件夹和initrd 文件夹.不信的话,试试看吧.好了,initrd(linuxrc)已经介绍完了.linuxrc执行完毕之后,系统就会以真正的根目录正式init.系统在/bin/或者/sbin目录下找到init程式,然后根据它的配置文件/etc/fstab进行初始化,最后调用mingetty程式启动login完成引导.ps:init这一部分网上有很多的详细资料所以我在这里并没有展开来说. 终于写完了,希望对你有所帮助.如有错误,还望指正.。

相关文档
最新文档