论坛风格切换切换到宽版
  • 808阅读
  • 0回复

[问题求助]Linux系统启动的基本过程和步骤(转载) [复制链接]

上一主题 下一主题
离线ghjp.
 
发帖
1950
C币
-60699
威望
382
贡献值
1
银元
-1
铜钱
4379
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
Linux系.统启动的基本过程和步骤:.
最.近在某个版块看到有人.讨论GRUB的问题,这里是我个人的一些理解。服务器
我想大部分还是正确的,但.肯.定也有理解错误的地方,在这里抛砖引玉了!    健康
Linux系统启动过程.大致按照如下.步骤进行(这是一个简述):学习
第一阶段:BIOS启.动引导阶段;(        游戏          )
           .             在该过程中实现硬件的初始化以及查找启动介质.;外贸
       .                 从.MBR中装载启动引导管理器(GRUB)并运行该启动引导管理.
第二阶段:GRUB启动.引导阶段;学习
  .         .             装载stage1投资
        .         .       装载stage1.5.
         .     .          装载stage2             电子
        . .               读取/boot/grub.conf文件并显示启动菜单;服务器
       .                 装载所选的kernel和initrd文件到内存.中教育
第三阶段:内核阶段:
                ..        运行内核启动参数;[成人用品]
       .                 解压i.nitrd文件并挂载initd文件系统,装载必须的驱动;(        游戏          )
             .  .         挂载根文件系统             汽车
第四阶段:Sys V init初始化阶段:.服务器
                        启动/sbin/ini..t程序;    美容
             .           运行rc.sysinit脚本,设.置系统环境,启动swap分区,检查和挂载文件系统;教育
        .              .  读取/etc/i.nittab文件,运行在/et/rc.d/rc.d中定义的不同运行级别的服务初始化脚本;外贸
          .              打开字符终端1-6号控制台/打.开图形显示管理的7号控制台.
同时在上述过程中各阶段所需要读取的.文件和操.作的对象:.
BIOS启动引导阶段                  .        GRUB启动引导阶段             ..       内核阶段                            /init/sysinit阶段    美容
==========================================.=======================.==========================.=======
N.one                .                         /boot/grub/grub.conf      .         /boot/vmlinuz-      /etc/rc.d/rc.sysinit          婚庆
        .                                        ./boot/grub/stage1_5               /boot/initrd-     .    /etc/inittab.
          .                                      /b.oot/grub/stage.2                                                         /etc/rc.d/.rc.d.
                                                             .                           .                               .          /e.tc/rc.d/init.d/*健康
                                                                                         ..     .                                  .                        婚庆
(下面是详细的过程)  .                             .                    .            .                                                       .
第一阶段:
系统上电开机后,主板BIOS(Basi.c Input / Output System)运行POST(Power on s.elf tes.t)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等)。硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Ox.ide Sem.iconductor)上(.一般64字节),实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。(广告)
执行POST代码对系统外围关键设备检测通过后,系统启动自举程序, 根据我们在BIOS中设置的.启动顺序搜.索启动驱动器(比如的硬盘、光驱、网.络服务器等)。选择合适的启动.器,比如通常情况下的硬盘设备,BIOS会读取硬盘设备的第一个扇区(MBR,512字节),并执行其中的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。此后将系统启动的控制权移交到MBR.部分的代码。    外汇
注.: 在我们的现行系统中.,大多关键设备都是连在主板上的。因此主板BIOS提供了一个操作系统(软件)和系统外围关.键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否“准备好”,以供操作系统使用。电脑
第二阶段:
BIOS通过下面两种方法之一.来传递引导记录:服务器
第一,        将控制权传递给initial program loader(IP.L),该程序安装在磁盘.主引导记录(MBR)中    健康
第二,        将控制权传递给ini.tial program loader(IPL),该程序安装在磁盘分区.的启动引导扇区中.
无论上面的哪种情况中,IPL都是.MBR的一部分并应该存储于一个不大于446字节.的磁盘空间中,因为MBR是一个不大于512字节的空间。    外汇
因此IPL仅仅是GRUB的第一个部分(stage1),他的作用就是定位和装载.GRUB的第二个部分(stage2);sta..ge2对启动系统起关键作用,该部分提供了GRUB启动菜单和交互式的GRUB的shell。启动菜单在启动时候通过/boot/grub/grub.conf文件所定义的内容生成。在启动菜单中选择了kernel之后.,GRUB会负责解压和装载kernel image并且将initrd装载到.内存中。最后GRUB初始化kernel启动代码。服务器
完成之后后续的引导权.被移交给kernel。.
假设Boot Loader为grub (grub-0.97),其引导系统的过程如下..:.
grub分为stage1 (stage1_5) 和stage2两个阶段。stage1可以看成是initial program load.erI(IPL),而stage2则实现了grub的主要功能,包括对特定文件系统的支持(如ext2,.ext3,reiserfs等),grub自己的shel.l,以及内部程序(如:kernrl,ini.trd,root)等。外贸
stage 1:MBR(512 字.节,0头0道1扇区),前446字节存放的是 stage1,后面存放硬盘分区表信息,B..IOS将sta.g1载入内存中0x7c00处并跳转执行。stage1(/stage1/stage.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区读入内存。0头0道2扇区内容是源代码中的/stage2/.start.S,编译后512字节,它是stage2或者stage1_5的入口。    外汇
注:此时stage1是没有能力识别文件系.统的,其定位硬盘0头0道2扇区.过程如下:健康
BIOS将stage1载入内存0x7c00处并执行,然后调用BIOS INIT13中断,将硬盘0头0.道2扇区内容载入内存0x7000处,然后调用copy_buffer将其转移到内存0x8000处。定位0.头0道2扇区有两种寻.址方式:LBA、CHS。健康
start.S的主要功能是将stage2或stage1_5从硬盘载入内存,如.果是stage.2,则载入0x820处;如果是 stage1_5,则载入0x.2200处。.
注:这里的stage2或.者stage1._5不是/boot分区/boo.t/grub目录下的文件,这个时候grub还没有能力识别任何文件系统。分以下两种情况:           女人
(1)假如start.S读取的是stage1_5,它存放在硬盘0头0道3扇区向后的位置,stage1._5作为stage1和stage2中间的桥梁,stage1._5有识别文件系统的能力,此后grub才.有能力去访问/boot分区/boot/grub目录下的 stage2文件,将stage2载入内存.并执行。    外汇
(2)假如start.S读取的是stage2,同样,这个stage2也不是/boot分区/boot/grub目录下的stage2,这个时候sta.rt.S读取的是存放在/boot分区Boot Sector的sta.ge2。这种情况下就有一个限制:因为start..S通过BIOS中断方式直接对硬盘.寻址(而非通过访问具体的文件系统),其寻址范围有限,限制在8GB以内。因此这种情况需要将/boot分区分在硬盘8GB寻址空间之前.。.
假如是情形(2),我们将./boot/grub目录下的内容清空,依然能成.功启动grub;假如是情形(1),将/boot/grub目录下stage2删除后,则系统启动过程中grub会启.动失败。           建材
这个地方经常要进行的操作:
是关于grub常用的几个指令对应的函数:.    健康
g.rub>root (hd0,0)                                                   .                     .                        --?root.指令为grub指定了一个根分区.
grub>kernel /.xen.gz-2.6.18-37.el5        .          .                                                     .   --?kernel指令将操作系统内核载入内存(        游戏          )
grub>.module /vmlinuz-2.6.18-37.el5xen ro root=/.dev/sda2                                          --?modul.e指令加载指定的模块外贸
grub.>modu.le /initrd-2.6.18-37.el5xen.img                                                        .         --?指定initrd文件    健康
g.rub>boot           .                                                                                               --?boot. 指令调用相应的启动.函数启动OS内核电脑
第三阶段:
如阶段2所述,grub>b.oot指令后,系统启动的控制权移交给kernel。Kernel会立即初始化系统中各设备并做相关配置工作,其中包括CP.U、.I/O、存储设备等。           女人
关于设备驱动加载,有.两部分:一部分设备驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设.备,同时将日志输出到k.ernel message buffer,系统启动后dmesg可以查.看到这部分输出信息。另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在initrd(ramdisk)中。虚拟主机
在2.6内核中,支.持两种格式的initrd,一种是2.4内核的文件系统镜像image-initrd,一种是cpio格式。以 cpio 格式为例,内核判断initrd为cp.io的文件格式后,会将in.itrd中的内容释放到rootfs中。 学习
initrd是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统/时,会先访问initrd文件系统。将initrd中的内容打开来看,会发现有b.i.n、devetc、lib、procsys、sysroot、init等文件(包含目录)。其中包含了一些设备的驱动模块,比如.scsi ata等设备驱动模块,同时还有几个基本的可执行程序 insmod, modprobe, .lvm,nash。主要.目的是加载一些存储介质的驱动模块,如上面所说的scsi ideusb等设备驱动模块,初始.化LVM,把/根文件系统以只读方式挂载。服务器
in.itrd中的内容释放到rootfs中后,Kernel会执行其中的init文件,这里的init是一个脚本,由nash解释器执行。这个时候内核的控制权移交给init文件处.理,我们查看init文件的内容,主要也是加载各种存储介质相关的设备驱.动。              汽车
驱动加载后,.会创建一个根设备,然后将根文件系统/以只读的方式挂载。这.步结束后释放未使用内存并执.行switchroot,转换到真正的根/上面去,同时运行/sbin/init程序,开启系统的1号进程,此后系统启动的控制权移交给 init 进程。关于switchroot是在nash中定.义的程序。             汽车
Linux .Ke.rnel需要适应多种不同的硬件架构,但是将所有的硬.件驱动编入Kernel又是不实际的,而且Kernel也不可能每新出一种硬件结构,就将该硬件的设备驱动写入内核。实际上Linux Kernel仅.是包含了基本的硬件驱动,在系统安装过程中会检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入 initrd 。这样在以后.启动系统时,一部分设备驱动就放在initrd中来加载。投资
第四阶段:
init.进程起来后,系统启动的控制权移交给init进.程。.
/sbi.n/init进程是所有进程的父进程,当init起来之后,它首先会读取配置文件/etc/inittab,进行以.下工作:.
1)执行系统初始化脚本(/etc/rc.d/rc.sy.sinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件.系统,到此系统基本算运行起来了,后面需要进行运行级别的确定及.相应服务的启动;    美容
2)确定启动后进入的.运行级别;           建材
3) 执行/etc/rc.d/rc,该文件定义了服务启动的顺序是先K后S,而具体的每个运行级.别的服务状态是放在/etc/rc.d./rcn.d(n=0~6)目录下,所有的.文件均链接至/etc/init.d下的相应文件。外贸
4)有关key seque.nce的设置电脑
5) 有关UPS的脚本定义
6)启动虚拟终端/sbi.n/mingetty     美容
7)在运行级别5上运行X
这时呈现给用户的就是最终的.登录界面。学习
至此,系统启动过程完毕:)
说明:
1)/etc/rc.d/rc.sysint -- Syste.m Initialization Tas.ks <性病>
它的主要工作有:
配置selinux,
系统时钟,
内核参数(/etc/sysc.tl.conf),    健康
hostname,
启用swap分区,
根文件系统的检查和二次挂.载(读写),.
激活RAID和LVM设备,
启用磁盘quota
检查并挂载其它文件系统
等等。
GRUB的基本原.理以及对GRUB的操作控制方法:电脑
GRUB全称为Grand Unified Boot Loader,是Linux操作系统主流的启动引导管理器。主要作用是启动和装载Linux操作系统。系统启动过程中一旦完成了BIOS自.检,GRUB会被立刻装载。在GRUB里面包含了可以.载入操作系.统的代码以及将操作系统引导权传递给其他启动引导管理器的代码。GRUB可.以允许用户选择使用不同的kernel启动系统,或者在启动.系统的过程中设置不同的启动参数。    外汇
而通.常BIOS会以下面两.种方法之一来调用启动引导管理器:           建材
将控制权移交给于.驱动器主引导记录的initial program loader.(IPL);.
将控制权移交给其他启动引导管理器,再由他们将.控制权移交给安装在分区引导扇区的IP.L.
通常情况下启动引导管理器G.RUB由两部分组成(stage1和stage.2):            杀毒
stage.1比较小,通常可以驻留在MBR或者各个磁盘分区的启动扇区中,.主要作用是装载stage2。.
stage2比较.大,从磁盘的启动引导分区读取    外汇
至于在st.ag.e1和stage2之间存在一个stage1.5,是因为starge1.5具有识别文件系统的能力。.
在Linux系统中对GRUB的配置有两.种方法:电脑
主要引导管理器:
会将启动引导管理器的.stage1安装在MB.R上,这时启动引导管理器必须被配置为可以传递控制权到其他操作系统;虚拟主机
次要引导管理器:
会将启动引导管理器的stage1安装在一些分区的引导扇区上,而.其他的.启动引导管理器会被安装在MBR上,由他们来向Linux启动引导管理器传递控制权。          婚庆
GRUB在启动过程中可以提供命令行交互界面,可以从ext系列,reiserfs,fat等多种文件系统引导系统,并.且可以提供密.码加密功能,其内容在/boot分区下,.系统启.动过程中由配置文件/boot/grub/grub.conf来定义启动方式,对该配置文件的更改会立即生效。<性病>
在配置文件/boot/grub/grub.con.f文.件中定义的内容包括:教育
grub所在的.分区,引导系统所使用的kern.el文件位置,硬件初始化使用的initrd文件位置,以及启动参数。           鲜花
例如:
grub.>roo.t (hd0,0)                                                         .  .                              --?root指令为grub指定了一个根分区投资
grub>kernel /xen.gz-2.6.18-37.el5           .               .                                         --?kernel指令将操作系.统内核载入内存.
grub>module /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2  .         .                     .   --?module指令加载指定的模块.
grub>module /initrd-2.6.18-37.el5xen.img         .             .                                    --?指定.initrd文件服务器
grub>bo.ot.                     .                               .                                               --?boot 指令调用相应的启动函数启动OS内核.
可见其指定的内容大多数在/boot分区,如果切换到/boot分区.之后会看.到这些内容:.
/boot/vmlinuz-*                 linux. kernel的一个co.py;投资
/boot/initrd*.img                初始化的ram dis.k文.件.
/boot/grub/devi.ce.map       . linux设备名和grub设备名的映射文件[成人用品]
/boot/grub/grub.con.f         . 主配置文件.
通常GRUB出错几率不是.很大,但一旦出现问题恐怕.采用最多的方式是重装grub到MBR中。             汽车
在这种时候需要注意的问题有:
首先,设备映射关系:
GRUB里面对设备名称.的定义和系.统中对设备名称的定义方法不一样:.
        .(fd0) .               /dev/fd0.
      .  (hd0)    .            /dev/sda        /dev/hda[成人用品]
        (hd1)                /dev/sdb      . . /dev/hdb投资
如够进.入系统或者救援模式,可执行命令/sbin/grub-install /dev/sda(或者hd.a)进行GRUB重装:(广告)
        .# /sbin/grub-in.stall device            杀毒
处于某种原因MBR中信息出错可以使用上面.的命令将其重装到磁盘主引导记录中;但是如果在不能进入系统的情况下就需要通过grub的命令行界面进行手动设置,这个时候就要注意上面所提到的映射关系..。.
同时,在gr.ub.命令行中对grub进行手动设置的时候需要注意所使用的命令:    外汇
        # root (hd0,0)                .  .              --?指定启动分区             汽车
        # setup(hd0)                                  --.?表示将gru.b安装在主引导记录上[成人用品]
        # quit .                 .                            --?退出grub      .  shell健康
下面是一个完整的grub.con.f文件内容:    美容
[root@dhcp-0-195 ~.]#. cat /etc/grub.conf .
#. grub.conf. generated by anaconda           鲜花
#
# .Note that you do not have to rerun grub after making. changes to this file.
# NOTICE:  You have .a /boot partit.ion.  This means that(广告)
#          al.l kernel and initrd p.aths are relative to /boot/, eg..
#          root (h.d0,0)电脑
#       .   kernel. /vmlinuz-version ro root=/dev/VolGroup001/LogVol00[成人用品]
#         . initrd /.initrd-version.img.
#boot=/dev/sda
default=0
timeout=30
s.plash.image=(hd0,0)/grub/splash.xpm.gz.
hiddenmenu
pa.ssword --md5 $1$apEcJWbA$DTJ8a6mK.n/3yrTTSXBtdH0电影
title Red Hat Enterprise Linux Client (2.6..18-8..1.1.el5)          婚庆
      .  root (hd0,0)(广告)
        kernel /vmlinuz-2.6..18-8.1.1.el5 ro root=/dev./VolGroup001./LogVol00 crashkernel=128M@16M(        游戏          )
   .     initrd /initrd-2.6.18-8.1..1.el5.img健康
系统启动运行级别的概念以及服.务的定制方法;.
当initrd可以正常检测和装载之后,最后的工作就基本上由操作系统来进行了。当.系统的init进程起来之后系统启动的控制权移交给ini.t进程。健康
/sbin/init进程是所有进程的父进程,当init起来之.后,它首先会读取配置文件/etc/.inittab,进行以下工作:.
1)执行系.统初始.化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读.写方式挂载根文件系统及其它文件系统,后面需要进行运行级别的确定及相应服务的启动,(从这个角度可以看出如果要定义系统的init动作,需要修改/etc/rc.d/rc.s.ysinit脚本)           鲜花
2)通过对/e.tc/in.ittab文件的读取确定启动后进入的运行级别;(        游戏          )
3) 在相应的运行级别中执行/etc/rc.d/.rcx.d目录下的脚本名称,该文件定义了.服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d./rcn.d(n=0~6)目录下,但这些文件均是到/.etc/init.d下的相应文件的链接。.
系统会按照在该目录下的文件名称和优.先级执行对应运行级别目录下.的脚本:.
在某个运行级别的.对应目录下,K开头的服务被关闭,S开头的服务被开启,K在S开始之前执.行,在执行过程中按照数字来定义优先级,数字越低优先级越高。.
4)按照/etc/rc.d/rcX.d.目录中的定义,系统会于后台启动相应的服务,如果要对某个运行级别中的服务进行更具体的定制,通过.chkconfig命令来操作,或者通过setup/ntsys/system-confi.g-services来进行定制。<性病>
5)在/etc/inittab文件中存在.有关key sequenc.e,UPS的脚本定义,启动虚拟终端/sbin/.mingetty的设置,这时呈现给用户的就是最终的登录界面。.
也就是说后台启动的服务完毕之后,如果系统默认进入字符界面,则运行mget.ty进入1-6号终端控制台,如果系统默认进入图形界面,.则开启gdm服务进入7号虚拟图形控制台.。    外汇
至此,系统启动过程完毕。
对.于/etc/r.c.d/rc.sysinit文件的说明:域名
/etc/rc.d/rc.sysint -- Syste.m Initialization Tasks 执行系统初始化任务.的脚本。              乙肝
它的主要工作有:
配置selinux,
系统时钟,
内.核参数(/etc/sysctl.conf),.
hostname,
启用swap分区,
根文件系统的检查和二.次挂载(读写),--------------彩票
激活RAID和LVM设备,
启用磁盘quota
检查并挂载其它文件系统
这是其基本要实现的工作内容:
#!/bin/bash
#
# /etc/rc.d/rc..sysinit - run once at boot ti.me           建材
#
# Taken i.n part from Miquel van Smoorenburg's bc.heckrc.             电子
# Check SELinux sta.tus.
          .                   电子
# Because of a chicken/egg problem, init_crypto .must be run twice.  /var. may b.e外贸
# encryp.ted but /var/l.ib/random-seed is needed to initialize swap.           鲜花
# Only read .this once.    健康
# Initialize har.dware.
# Set default affi.nity           建材
# Load ot.her user-define.d modules学习
# Load modules (for backwar.d compatibili.ty with VARs)            杀毒
# .Start the graphical b.oot, if necessary; /usr may not .be mounted yet, so we           建材
# may ha.ve to do this again after mou.nting             电子
# Configure kern.el .parameters服务器
# Set the hostna.me.          婚庆
# Initialize .ACPI bits健康
# RAID setup
# Devi.ce mapper & related init.ialization教育
# Update quotas if n.ecess.ary投资
# Remoun.t the root filesyst.em read-write.--- 印刷
#. Clean up SELinux labels虚拟主机
# Clear mtab
# Remove stale ba.ckups外贸
# Enter mounted. filesystems into /etc/mta.b<性病>
# Mou.nt all other filesystems (except for NFS and /proc, which is already.--- 印刷
# mo.unted). Contrary to. standard usage,--- 印刷
# filesystems are NOT unmounte.d in single. user mode.          婚庆
# Check to see if. a full .relabel is needed    健康
# Start the graphical boot., if necessary and not d.one yet..
# Initialize pseud.o-random .number generator健康
# Use the har.dware RNG to seed the entropy pool, if. available          婚庆
#. Configure ma.chine if necessary.          婚庆
# Clean out /.
# Do we .need (w|u)tmpx file.s? We don't set them up, .but the sysadmin might....
# Clean u.p /var.  I'd use find, .but /usr may not be mounted..
# .Reset pam_console perm.issions学习
#. Clean up utmp/wtmp
# Clean up various /.tm.p bits(        游戏          )
# Make IC.E directory.
# Start up swapping..             汽车

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72153/showart_1070466.html           女人
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个