收藏 分享(赏)

redhat启动流程.doc

上传人:hwpkd79526 文档编号:9057965 上传时间:2019-07-22 格式:DOC 页数:8 大小:73KB
下载 相关 举报
redhat启动流程.doc_第1页
第1页 / 共8页
redhat启动流程.doc_第2页
第2页 / 共8页
redhat启动流程.doc_第3页
第3页 / 共8页
redhat启动流程.doc_第4页
第4页 / 共8页
redhat启动流程.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、Redhat 启动流程当用户打开 PC 的电源,BIOS 开机自检,按 BIOS 中设置的启动设备( 通常是硬盘)启动,接着启动设备上安装的引导程序 lilo 或 grub 开始引导 Linux, Linux 首先进行内核的引导,接下来执行 init 程序,init 程序调用了 rc.sysinit 和 rc 等程序,rc.sysinit 和 rc 当完成系统初 始化和运行服务的任务后,返回 init;init 启动了 mingetty 后,打开了终端供用户登录系统,用户登录成功后进入了 Shell,这样就完成了从 开机到登录的整个启动过程。Linux 系统启动过程大致按照如下步骤进行(这是一

2、个简述):第一阶段:BIOS启动引导阶段;在该过程中实现硬件的初始化以及查找启动介质;从MBR(M aster Boot Record)中装载启动引导管理器(LILO 或GRUB)并运行该启动引导管理第二阶段:GRUB为例启动引导阶段;装载stage1装载stage1.5装载stage2读取/boot/grub.conf 文件并显示启动菜单;装载所选的kernel和initrd 文件到内存中第三阶段:内核阶段:运行内核启动参数;解压initrd 文件并挂载initd 文件系统,装载必须的驱动;挂载根文件系统第四阶段:Sys V init 初始化阶段:启动/sbin/init 程序;运行rc.s

3、ysinit脚本,设置系统环境,启动swap 分区,检查和挂载文件系统;读取/etc/inittab文件,运行在/et/rc.d/rc.d中定义的不同运行级别的服务初始化脚本;打开字符终端 1-6 号控制台/打开图形显示管理的 7 号控制台(下面是详细的过程)第一阶段:系统上电开机后,主板BIOS(Basic Input / Output System)运行POST(Power on self test)代码,检测系统外围关键设备(如:CPU、内存、显卡、I/O、键盘鼠标等) 。硬件配置信息及一些用户配置参数存储在主板的CMOS( Complementary Metal Oxide Semic

4、onductor)上(一般64字节) ,实际上就是主板上一块可读写的RAM芯片,由主板上的电池供电,系统掉电后,信息不会丢失。执行POST代码对系统外围关键设备检测通过后,系统启动自举程序, 根据我们在BIOS中设置的启动顺序搜索启动驱动器(比如的硬盘、光驱、网络服务器等) 。选择合适的启动器,比如通常情况下的硬盘设备,BIOS会读取硬盘设备的第一个扇区(MBR,512字节) ,并执行其中的代码。实际上这里BIOS并不关心启动设备第一个扇区中是什么内容,它只是负责读取该扇区内容、并执行,BIOS的任务就完成了。此后将系统启动的控制权移交到MBR 部分的代码。注: 在我们的现行系统中,大多关键设

5、备都是连在主板上的。因此主板BIOS提供了一个操作系统(软件)和系统外围关键设备(硬件)最底级别的接口,在这个阶段,检测系统外围关键设备是否“准备好” ,以供操作系统使用。第二阶段:BIOS通过下面两种方法之一来传递引导记录:第一, 将控制权传递给initial program loader(IPL) ,该程序安装在磁盘主引导记录(MBR)中第二, 将控制权传递给initial program loader(IPL) ,该程序安装在磁盘分区的启动引导扇区中无论上面的哪种情况中,IPL 都是MBR 的一部分并应该存储于一个不大于446字节的磁盘空间中,因为MBR 是一个不大于512字节的空间。因

6、此IPL 仅仅是GRUB的第一个部分(stage1) ,他的作用就是定位和装载GRUB的第二个部分(stage2) ;stage2对启动系统起关键作用,该部分提供了GRUB启动菜单和交互式的GRUB的shell。启动菜单在启动时候通过/boot/grub/grub.conf 文件所定义的内容生成。在启动菜单中选择了kernel之后,GRUB会负责解压和装载kernel image并且将initrd装载到内存中。最后GRUB初始化kernel启动代码。完成之后后续的引导权被移交给kernel。假设Boot Loader为grub (grub-0.97),其引导系统的过程如下:grub 分为sta

7、ge1 (stage1_5) 和stage2两个阶段。stage1可以看成是initial program loaderI(IPL) ,而stage2则实现了grub 的主要功能,包括对特定文件系统的支持(如ext2,ext3,reiserfs等) ,grub自己的shell,以及内部程序(如:kernrl,initrd,root)等。stage 1:MBR(512 字节,0头0道1扇区) ,前446字节存放的是 stage1,后面存放硬盘分区表信息,BIOS将stag1载入内存中0x7c00处并跳转执行。stage1(/stage1/start.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区

8、读入内存。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从硬盘载入内存,如果是stage2,则载入0x820处;如果是 stag

9、e1_5,则载入0x2200处。注:这里的stage2或者stage1_5不是/boot 分区/boot/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/

10、grub 目录下的stage2,这个时候start.S读取的是存放在/boot 分区Boot Sector的stage2。这种情况下就有一个限制:因为start.S通过BIOS中断方式直接对硬盘寻址(而非通过访问具体的文件系统) ,其寻址范围有限,限制在8GB以内。因此这种情况需要将/boot分区分在硬盘8GB寻址空间之前。假如是情形(2) ,我们将/boot/grub 目录下的内容清空,依然能成功启动grub;假如是情形(1) ,将/boot/grub 目录下stage2删除后,则系统启动过程中grub 会启动失败。这个地方经常要进行的操作:是关于grub 常用的几个指令对应的函数:grub

11、root (hd0,0) -root指令为grub 指定了一个根分区grubkernel /xen.gz-2.6.18-37.el5 -kernel指令将操作系统内核载入内存grubmodule /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 -module指令加载指定的模块grubmodule /initrd-2.6.18-37.el5xen.img -指定initrd文件grubboot -boot 指令调用相应的启动函数启动OS内核第三阶段:如阶段2所述,grubboot 指令后,系统启动的控制权移交给kernel。Kernel会立即初始化系统中各

12、设备并做相关配置工作,其中包括CPU、I/O、存储设备等。关于设备驱动加载,有两部分:一部分设备驱动编入Linux Kernel中,Kernel会调用这部分驱动初始化相关设备,同时将日志输出到kernel message buffer,系统启动后dmesg可以查看到这部分输出信息。另外有一部分设备驱动并没有编入Kernel,而是作为模块形式放在initrd(ramdisk)中。在2.6内核中,支持两种格式的initrd,一种是2.4内核的文件系统镜像image-initrd,一种是cpio 格式。以 cpio 格式为例,内核判断initrd为cpio 的文件格式后,会将 initrd 中的内容

13、释放到 rootfs 中。initrd 是一种基于内存的文件系统,启动过程中,系统在访问真正的根文件系统/时,会先访问 initrd 文件系统。将 initrd 中的内容打开来看,会发现有 bin、devetc、lib、procsys、sysroot、init 等文件(包含目录) 。其中包含了一些设备的驱动模块,比如 scsi ata 等设备驱动模块,同时还有几个基本的可执行程序 insmod, modprobe, lvm,nash。主要目的是加载一些存储介质的驱动模块,如上面所说的 scsi ideusb 等设备驱动模块,初始化 LVM,把/根文件系统以只读方式挂载。initrd 中的内容释

14、放到 rootfs 中后,Kernel 会执行其中的 init 文件,这里的 init 是一个脚本,由 nash 解释器执行。这个时候内核的控制权移交给 init 文件处理,我们查看 init 文件的内容,主要也是加载各种存储介质相关的设备驱动。驱动加载后,会创建一个根设备,然后将根文件系统/以只读的方式挂载。这步结束后释放未使用内存并执行 switchroot,转换到真正的根/上面去,同时运行/sbin/init 程序,开启系统的 1 号进程,此后系统启动的控制权移交给 init 进程。关于 switchroot 是在 nash 中定义的程序。Linux Kernel 需要适应多种不同的硬件

15、架构,但是将所有的硬件驱动编入 Kernel 又是不实际的,而且 Kernel 也不可能每新出一种硬件结构,就将该硬件的设备驱动写入内核。实际上 Linux Kernel 仅是包含了基本的硬件驱动,在系统安装过程中会检测系统硬件信息,根据安装信息和系统硬件信息将一部分设备驱动写入 initrd 。这样在以后启动系统时,一部分设备驱动就放在 initrd 中来加载。第四阶段:init 进程起来后,系统启动的控制权移交给 init 进程。/sbin/init 进程是所有进程的父进程,当 init 起来之后,它首先会读取配置文件/etc/inittab,进行以下工作:1)执行系统初始化脚本(/etc

16、/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,到此系统基本算运行起来了,后面需要进行运行级别的确定及相应服务的启动;2)确定启动后进入的运行级别;3) 执行/etc/rc.d/rc,该文件定义了服务启动的顺序是先 K 后 S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rcn.d(n=06)目录下,所有的文件均链接至/etc/init.d 下的相应文件。4)有关 key sequence 的设置5) 有关 UPS 的脚本定义6)启动虚拟终端/sbin/mingetty7)在运行级别 5 上运行 X这时呈现给用户的就是最终的登录界面

17、。至此,系统启动过程完毕。说明:1)/etc/rc.d/rc.sysint - System Initialization Tasks它的主要工作有:配置 selinux,系统时钟,内核参数(/etc/sysctl.conf) ,hostname,启用 swap 分区,根文件系统的检查和二次挂载(读写) ,激活 RAID 和 LVM 设备,启用磁盘 quota检查并挂载其它文件系统等等。GRUB 的基本原理以及对 GRUB 的操作控制方法:GRUB 全称为 Grand Unified Boot Loader,是 Linux 操作系统主流的启动引导管理器。主要作用是启动和装载 Linux 操作系

18、统。系统启动过程中一旦完成了BIOS 自检,GRUB 会被立刻装载。在 GRUB 里面包含了可以载入操作系统的代码以及将操作系统引导权传递给其他启动引导管理器的代码。GRUB 可以允许用户选择使用不同的 kernel 启动系统,或者在启动系统的过程中设置不同的启动参数。而通常 BIOS 会以下面两种方法之一来调用启动引导管理器:将控制权移交给于驱动器主引导记录的 initial program loader(IPL) ;将控制权移交给其他启动引导管理器,再由他们将控制权移交给安装在分区引导扇区的IPL通常情况下启动引导管理器 GRUB 由两部分组成(stage1 和 stage2):stage

19、1 比较小,通常可以驻留在 MBR 或者各个磁盘分区的启动扇区中,主要作用是装载stage2。stage2 比较大,从磁盘的启动引导分区读取至于在 stage1 和 stage2 之间存在一个 stage1.5,是因为 starge1.5 具有识别文件系统的能力。在 Linux 系统中对 GRUB 的配置有两种方法:主要引导管理器:会将启动引导管理器的 stage1 安装在 MBR 上,这时启动引导管理器必须被配置为可以传递控制权到其他操作系统;次要引导管理器:会将启动引导管理器的 stage1 安装在一些分区的引导扇区上,而其他的启动引导管理器会被安装在 MBR 上,由他们来向 Linux

20、启动引导管理器传递控制权。GRUB 在启动过程中可以提供命令行交互界面,可以从 ext 系列,reiserfs,fat 等多种文件系统引导系统,并且可以提供密码加密功能,其内容在/boot 分区下,系统启动过程中由配置文件/boot/grub/grub.conf 来定义启动方式,对该配置文件的更改会立即生效。在配置文件/boot/grub/grub.conf 文件中定义的内容包括:grub 所在的分区,引导系统所使用的 kernel 文件位置,硬件初始化使用的 initrd 文件位置,以及启动参数。例如:grubroot (hd0,0) -root 指令为 grub 指定了一个根分区grubk

21、ernel /xen.gz-2.6.18-37.el5 -kernel 指令将操作系统内核载入内存grubmodule /vmlinuz-2.6.18-37.el5xen ro root=/dev/sda2 -module 指令加载指定的模块grubmodule /initrd-2.6.18-37.el5xen.img - 指定 initrd 文件grubboot -boot 指令调用相应的启动函数启动 OS 内核可见其指定的内容大多数在/boot 分区,如果切换到/boot 分区之后会看到这些内容:/boot/vmlinuz-* linux kernel 的一个 copy;/boot/ini

22、trd*.img 初始化的 ram disk 文件/boot/grub/device.map linux 设备名和 grub 设备名的映射文件/boot/grub/grub.conf 主配置文件通常 GRUB 出错几率不是很大,但一旦出现问题恐怕采用最多的方式是重装 grub 到 MBR 中。在这种时候需要注意的问题有:首先,设备映射关系:GRUB 里面对设备名称的定义和系统中对设备名称的定义方法不一样:(fd0) /dev/fd0(hd0) /dev/sda /dev/hda(hd1) /dev/sdb /dev/hdb如够进入系统或者救援模式,可执行命令/sbin/grub-install

23、 /dev/sda(或者 hda)进行GRUB 重装:# /sbin/grub-install device处于某种原因 MBR 中信息出错可以使用上面的命令将其重装到磁盘主引导记录中;但是如果在不能进入系统的情况下就需要通过 grub 的命令行界面进行手动设置,这个时候就要注意上面所提到的映射关系。同时,在 grub 命令行中对 grub 进行手动设置的时候需要注意所使用的命令:# root (hd0,0) - 指定启动分区# setup(hd0) - 表示将 grub 安装在主引导记录上# quit - 退出 grub shell下面是一个完整的 grub.conf 文件内容:rootdh

24、cp-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 partition. This means that# all kernel and initrd paths are relative to /boot/, eg.# root (hd0,0)# kernel /vmlinuz-version ro root=/dev/

25、VolGroup001/LogVol00# initrd /initrd-version.img#boot=/dev/sdadefault=0timeout=30splashimage=(hd0,0)/grub/splash.xpm.gzhiddenmenupassword -md5 $1$apEcJWbA$DTJ8a6mKn/3yrTTSXBtdH0title 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/VolGroup0

26、01/LogVol00 crashkernel=128M16Minitrd /initrd-2.6.18-8.1.1.el5.img系统启动运行级别的概念以及服务的定制方法;当 initrd 可以正常检测和装载之后,最后的工作就基本上由操作系统来进行了。当系统的 init 进程起来之后系统启动的控制权移交给 init 进程。/sbin/init 进程是所有进程的父进程,当 init 起来之后,它首先会读取配置文件/etc/inittab,进行以下工作:1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,后面需要进行运

27、行级别的确定及相应服务的启动, (从这个角度可以看出如果要定义系统的 init 动作,需要修改/etc/rc.d/rc.sysinit 脚本)2)通过对/etc/inittab 文件的读取确定启动后进入的运行级别;3) 在相应的运行级别中执行/etc/rc.d/rcx.d 目录下的脚本名称,该文件定义了服务启动的顺序是先 K 后 S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rcn.d(n=06)目录下,但这些文件均是到/etc/init.d 下的相应文件的链接。系统会按照在该目录下的文件名称和优先级执行对应运行级别目录下的脚本:在某个运行级别的对应目录下,K 开头的服务被关闭,

28、S 开头的服务被开启,K 在 S 开始之前执行,在执行过程中按照数字来定义优先级,数字越低优先级越高。4)按照/etc/rc.d/rcX.d 目录中的定义,系统会于后台启动相应的服务,如果要对某个运行级别中的服务进行更具体的定制,通过 chkconfig 命令来操作,或者通过 setup/ntsys/system-config-services 来进行定制。5)在/etc/inittab 文件中存在有关 key sequence,UPS 的脚本定义,启动虚拟终端/sbin/mingetty 的设置,这时呈现给用户的就是最终的登录界面。也就是说后台启动的服务完毕之后,如果系统默认进入字符界面,则

29、运行 mgetty 进入 1-6号终端控制台,如果系统默认进入图形界面,则开启 gdm 服务进入 7 号虚拟图形控制台。至此,系统启动过程完毕。对于/etc/rc.d/rc.sysinit 文件的说明:/etc/rc.d/rc.sysint - System Initialization Tasks 执行系统初始化任务的脚本。它的主要工作有:配置 selinux,系统时钟,内核参数(/etc/sysctl.conf) ,hostname,启用 swap 分区,根文件系统的检查和二次挂载(读写) ,激活 RAID 和 LVM 设备,启用磁盘 quota检查并挂载其它文件系统这是其基本要实现的工作

30、内容:#!/bin/bash# /etc/rc.d/rc.sysinit - run once at boot time# Taken in part from Miquel van Smoorenburgs bcheckrc.# Check SELinux status# Because of a chicken/egg problem, init_crypto must be run twice. /var may be# encrypted but /var/lib/random-seed is needed to initialize swap.# Only read this onc

31、e.# Initialize hardware# Set default affinity# Load other user-defined modules# Load modules (for backward compatibility with VARs)# Start the graphical boot, if necessary; /usr may not be mounted yet, so we# may have to do this again after mounting# Configure kernel parameters# Set the hostname.# I

32、nitialize ACPI bits# RAID setup# Device mapper & related initialization# Update quotas if necessary# Remount the root filesystem read-write.# Clean up SELinux labels# Clear mtab# Remove stale backups# Enter mounted filesystems into /etc/mtab# Mount all other filesystems (except for NFS and /proc, wh

33、ich is already# mounted). Contrary to standard usage,# filesystems are NOT unmounted in single user mode.# Check to see if a full relabel is needed# Start the graphical boot, if necessary and not done yet.# Initialize pseudo-random number generator# Use the hardware RNG to seed the entropy pool, if

34、available# Configure machine if necessary.# Clean out /.# Do we need (w|u)tmpx files? We dont set them up, but the sysadmin might.# Clean up /var. Id use find, but /usr may not be mounted.# Reset pam_console permissions# Clean up utmp/wtmp# Clean up various /tmp bits# Make ICE directory# Start up swapping.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报