§·Centos系统启动概括流程
系统启动流程:
PC (OS Llinux)
POST(开机)–>BIOS–>MBR(bootloader .446字节)—>kernel–>/sbin/init(/etc/inittab)(用户空间的管理进程)
备注:
POST :加电自检,检测必要的硬件设备:CPU,内存。启动以后转交给:BIOS;
BIOS:(启动顺序:光盘,硬盘,网络,U盘等),找到对应启动设备的MBR,再转交给 MBR;
MBR:其实相当于一个小分区,有512字节,里面存储着一段一个引导程序为:bootloader,MBR启动bootloader, bootloader中存储着从哪个地方找到kernel加载到内存中,找到initrd加载到硬盘中,启动权转交给 kernel;
Kernel:执行系统初始化信息,加载硬件驱动等等,启动用户空间的第一个程序: /sbin/init;
/sbin/init:主要功能是准备软件的运行环境。
§·系统启动流程的详细描述
※·POST大概流程
·POST (power on system test);自检主要的工作是检测一下硬件设备是否存在并能正常的运行,如:cpu,内存,硬盘(没有硬盘当然也可以,有的是网络启动)是否存在并能正常的运行。
·这些自检功能是有一个软件程序来实现的,这个软件程序叫做:BIOS,它是装载在一个硬件芯片COMS之上的,COMS通电后,然后启动BIOS程序。
※·BIOS大概流程
·BIOS(basic input output system),它是一个装载在COMS硬件芯片之上的程序,COMS加电后,BIOS程序会更具COMS上面的一些配置信息去读取其它硬件设备信息并检测是否存在并能正常的运行,之后进行硬件设备的初始化。(里面有设备的启动顺序,按顺序查找启动设备,查找MBR,找到MBR就从该设备启动)
※·MBR boot loader大概流程
·BIOS查找到MBR后,MBR想象成一个小分区,里面存放着一段引导程序为:bootloader。Bootloader为通用程序,为了识别不同系统的文件系统,bootloader是一个启动管理程序,来处理这些核心文件的加载问题,bootloader是一段程序肯定是需要存储在一个设备之上,一般存储与硬盘上,存储在一个可以启动的硬盘的第一个扇区内,这个扇区我们称之为:MBR(master boot record 主引导记录)。
◎·Boot loader功能之一:识别,加载操作系统中的核心文件
·boot loader 的主要功能是去识别,加载操作系统中的核心文件,并提交到内存中运行,进而来启动操作系统。
·由于不同操作系统的文件格式不同,因此也就为之每一种操作系统都有自己的boot loader。
·如果一个硬盘有两个操作系统怎么办,MBR又只有一个,那我们如何安装这两个操作系统的?
·在磁盘管理中我们知道,每个磁盘分区都有一块启动扇区,这个启动扇区用来为安装操作系统安装boot loader,通常操作系统默认会安装一份boot loader到它根目录所在分区的扇区当中。
·Linux系统安装时,会提示我们是否将boot loader安装到MBR上去,如果选择安装到MBR上的话,理论上MBR和对应的分区上的启动扇区上同时都有一份bootloader程序。
·但是windows系统安装时,默认会主动在MBR和对应分区上的启动扇区上同时安装一份bootloader程序,这也导致了之前MBR中的信息将被覆盖掉。
◎·Boot loaer功能之二:提供菜单信息,控制权转交
·bootloader的另一个主要功能是提供菜单信息,可以向使用者提供不同的启动项目,来加载不同的操作系统。并将启动管理功能转交给其它的加载程序。
·由于windows的boot loader 不具备控制权转交功能,因此我们不能使用windows的bootloader去加载linux的boot loader,只能使用linux的boot loader去加载windows的boot loader。
·想安装windows系统,在安装linux的操作系统,通过linux的系统bootloader的菜单列表功能区启动windows操作系统的bootloader信息,进而将控制权转交给windows操作系统分区的第一个扇区当中的loader程序,完成windows启动。
※·Kernel大概流程
·在boot loader开始读取操作系统内核文件后,接下来就会将内核文件解压缩后装载到内存当中,然后根据内核提供的功能开始测试与加载各个设备(CPU,硬盘,网卡等)。这里的设备检测与之前的BIOS自检是不同的,此时内核程序已经完全接管了BIOS的工作,之后的操作都是由内核来完成的。内核文件通常放在/boot/vmliunz的文件。
·此时有个问题,boot loader 指明内核文件在/boot/vmliunz中,但是需要加载内核文件进内存,内核程序和内核文件都在硬盘上,但是需要驱动硬盘有得有硬盘的驱动程序,但是驱动程序都在硬盘上,那我们如何解决这个问题呢?
·为了解决以上的问题,我们采用一种叫虚拟文件系统来解决这个问题。虚拟文件系统(initial RAM DISK),同样也放置再在/boot目录下面,并且是以initrd开头的文件。
◎·initrd文件的特点
注意:initrd既然是提供kerner驱动文件,为什么启动bootloader可以加载initrd文件呢?
bootloader程序本身有所在的/boot分区的驱动文件,bootloader可以识别/boot分区,即可加载 initrd文件,initrd文件自带很多的驱动文件,当kernel文件启动需要使用其他分区文件时,找到initrd的文件的自带的驱动文件,即可kernel可以识别其他分区上的文件。
·这个initrd文件的特点是:能够通过boot loader程序将其加载到内存当中,然后这个文件会被解压缩并在内存中模拟一个根文件系统,这个根文件系统能够提供一个可以运行的程序,通过该程序可以加载在启动过程中所需要的核心模块(RAID LVM SCSI 等文件系统与磁盘的驱动程序),initrd加载完成后,会协助内核重新呼叫/sbin/init来执行后续的正常启动。
·boot loader可以加载kernel和initrd,然后在内存中让initrd加压缩成根目录,然后内核可以在这个之上加载合适的驱动程序,来加载硬盘等设备,之后释放虚拟的根文件系统,并以制度的方式挂载磁盘上真实的根文件系统,之后就开始正常的启动过程。
※·/sbin/init大概流程
·在内核,硬件及其驱动信息加载完毕后,内核会呼叫用户控件的第一个执行程序/sbin/init ,init程序主要功能是准备软件运行环境,包括系统主机名称,网络配置,文件系统格式等其他服务的启动管理,而这些所有的操作都是通过init的配置文件来定义的。
·init的配置文件(后面详细介绍)
Centos 5 :采用Sys V init 方式 ,/etc/inittab (串行启动,启动缓慢)
Centos 6 :采用Upstart方式 ,/etc/inittab /etc/init/*.conf (并行启动,启动快速)
Centos 7 :采用systemd方式,/usr/lib/systemd/* (非常之快)
§·系统启动各个流程介绍相关工作与配置文件
※·POST工作
提问1:POST检测与BIOS程序检测有什么区别?
提问2:POST检测如果没有内存BIOS程序可以正常检测吗?
※·BIOS工作
◎·BIOS主要工作:
·BIOS是一段程序存储在COMS固件中;
·BIOS根据COMS中的一些配置信息读取硬件信息,并检测该硬件是否存在;
·BIOS根据COMS信息进行硬件设备初始化。
※·boot loader工作与配置文件
◎·boot loader主要工作:
·boot loader的程序有很多比如:
LILO : linux loader (以前使用的程序)
GRUB : GRAND UNIFIED BOOTLOADER (/boot/grub) (现在使用的程序)
·boot loader位于MBR中的一段程序,MBR存储在硬盘上;
·boot loader可以加载initrd文件到内存;
·boot loader主要功能识别,加载操作系统核心文件;
◎·GRUB 介绍:
*Grub程序如何加载到内存中
·MBR空间为512字节,grub程序肯定比MBR空间大,所以如何启动grub有成为了一个问题。
·Linux将boot loader的程序运行与配置项加载分成三个阶段(stage)来运行
Stage1:运行boot loader主程序,这个程序必须安装在启动区MBR中,MBR仅仅安装的是boot loader 的最小程序,相关的配置文件没有安装在MBR中;
Stage1_5:识别文件系统,在MBR随后的扇区中存放,主要用于与stage2所有的分区的文件系统进行交互。
比如在 /boot/grub目录下有许多的 1_5文件。 /boot/grub ls ffs_stage1_5 jfs_stage1_5 reiserfs_stage1_5 stage2 xfs_stage1_5 e2fs_stage1_5 grub.conf menu.lst splash.xpm.gz ufs2_stage1_5 fat_stage1_5 iso9660_stage1_5 minix_stage1_5 stage1 vstafs_stage1_5
Stage2:通过boot loader加载所有的配置文件及其相关的环境参数信息,这些配置文件及相关的环境参 数都存放于磁盘分区的/boot目录下,如下:
# /boot/grub ll total 275K -rw-r--r--. 1 root root 63 Jul 19 18:21 device.map -rw-r--r--. 1 root root 14K Jul 19 18:21 e2fs_stage1_5 -rw-r--r--. 1 root root 13K Jul 19 18:21 fat_stage1_5 -rw-r--r--. 1 root root 12K Jul 19 18:21 ffs_stage1_5 -rw-------. 1 root root 1.1K Aug 17 11:07 grub.conf -rw-r--r--. 1 root root 12K Jul 19 18:21 iso9660_stage1_5 -rw-r--r--. 1 root root 13K Jul 19 18:21 jfs_stage1_5 lrwxrwxrwx. 1 root root 11 Jul 19 18:21 menu.lst -> ./grub.conf -rw-r--r--. 1 root root 12K Jul 19 18:21 minix_stage1_5 -rw-r--r--. 1 root root 15K Jul 19 18:21 reiserfs_stage1_5 -rw-r--r--. 1 root root 1.4K Nov 15 2010 splash.xpm.gz -rw-r--r--. 1 root root 512 Jul 19 18:21 stage1 -rw-r--r--. 1 root root 124K Jul 19 18:21 stage2 -rw-r--r--. 1 root root 12K Jul 19 18:21 ufs2_stage1_5 -rw-r--r--. 1 root root 12K Jul 19 18:21 vstafs_stage1_5 -rw-r--r--. 1 root root 14K Jul 19 18:21 xfs_stage1_5
·以上得知在/boot/grub目录下最重要的是grub的配置文件及其各种文件系统的定义,当boot loader读取了这些文件系统所定义的数据后,就能够识别文件系统并读取在该文件系统上的内核文件了,grub是目前使用最多最广泛的Linux启动管理程序。
◎·GRUB 配置文件:
*Grub目录文件介绍(/boot/grub/)
·device.map : 定义grub装载了哪里 ·e2fs_stage1_5 : 文件系统的定义 ·fat_stage1_5 : 文件系统的定义 ·ffs_stage1_5 : 文件系统的定义 ·grub.conf : grub的配置文件 ·iso9660_stage1_5 : 光盘文件系统的定义 ·jfs_stage1_5 : 文件系统的定义 ·menu.lst : 链接文件 链接到 ./grub.conf ·minix_stage1_5 : 文件系统的定义 ·reiserfs_stage1_5 : 文件系统的定义 ·splash.xpm.gz : 启动时在grub底下的背景图示 ·stage1 : tage1的相关说明 ·stage2 : tage2的相关说明 ·ufs2_stage1_5 : 文件系统的定义 ·vstafs_stage1_5 : 文件系统的定义 ·xfs_stage1_5 : 文件系统的定义
*Grub的配置文件 grub.conf文件详解
·Grub的内容如下:/boot/grub/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/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 #表示默认的启动条目,如果有多个操作系统,0表示定义的第1个title系统,1表示定义的第2个title系统,以此类推 timeout=5 #表示可供选择的等待时间,如果超过5秒,则使用默认的启动条目default启动系统 splashimage=(hd0,0)/grub/splash.xpm.gz #表示定义启动的背景图片信息(图片类型为 xpm 14bits颜色 640*480 压缩为 gzip) hiddenmenu #启动是否显示菜单,默认是不显示,如果想显示菜单,注释即可 title CentOS (2.6.32-642.el6.x86_64) #定义各个操作系统的名称,title 0 root (hd0,0) #定义title 0 的启动磁盘 启动分区 kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #定义title 0 的内核存放路径和一些其他的参数 initrd /initramfs-2.6.32-642.el6.x86_64.img #定义title 0 的initrd的存放路径 title CentOS (2.6.32-431.el6.x86_64) # root (hd0,0) #注意 kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
注意:
1.硬盘代号以小括号()括起来;
2.硬盘以hd表示,后面会接一组数字,数字之间以逗号隔开;
3.是以搜寻到的顺序来作为磁盘的编号,而非根据磁盘的排线编号(多硬盘情况,搜寻的次序是根据bios中设置的启动顺序,而非插槽编号);
4.第一个搜寻的第一个磁盘编号为0,第二个为1,以此类推;
5.每块磁盘的第一个分区编号为0,第二个为1,以此类推;
6.因此(hd0,0)就表示第一个磁盘的第一个分区;
*Grub的配置文件 grub.conf其他说明
·grub的命令行界面:(只能搜索/boot/grub下的文件名) #/root grub Probing devices to guess BIOS drives. This may take a long time. GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> find /grub/grub.conf find /grub/grub.conf (hd0,0) grub> help help blocklist FILE boot cat FILE chainloader [--force] FILE clear color NORMAL [HIGHLIGHT] configfile FILE device DRIVE DEVICE displayapm displaymem find FILENAME geometry DRIVE [CYLINDER HEAD SECTOR [ halt [--no-apm] help [--all] [PATTERN ...] hide PARTITION initrd FILE [ARG ...] kernel [--no-mem-option] [--type=TYPE] makeactive map TO_DRIVE FROM_DRIVE md5crypt module FILE [ARG ...] modulenounzip FILE [ARG ...] pager [FLAG] partnew PART TYPE START LEN parttype PART TYPE quit reboot root [DEVICE [HDBIAS]] rootnoverify [DEVICE [HDBIAS]] serial [--unit=UNIT] [--port=PORT] [-- setkey [TO_KEY FROM_KEY] setup [--prefix=DIR] [--stage2=STAGE2_ grub will attempt to avoid printing an terminal [--dumb] [--no-echo] [--no-ed terminfo [--name=NAME --cursor-address testvbe MODE unhide PARTITION uppermem KBYTES vbeprobe [MODE] grub> ·grub保护机制,只有通过认证才能修改grub.conf信息。可以通过以下方式来对grub.conf进行保护: 1.在第一个title之上添加password --md5 ******************主要用于保护编辑功能; 2.在某个title内添加password --md5 ****************** 主要用户保护内核; 生成密码的命令:grub-md5-crypt 如: [root@Centos6 /]#grub-md5-crypt Password: Retype password: $1$Ra1Tw$PzwS.OyWeskJUNI8pI.0Y1 # 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/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=30 splashimage=(hd0,0)/grub/splash.xpm.gz #hiddenmenu password --md5 $1$Ra1Tw$PzwS.OyWeskJUNI8pI.0Y1 title CentOS (2.6.32-642.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-642.el6.x86_64.img title mylinux root (hd0,0) kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=ca4c44c8-1c65-4896-a295-d55e5d5e5c5e rd_NO_LUKS rd_NO_LVM.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet initrd /initramfs-2.6.32-431.el6.x86_64.img
*grup常见问题的处理
·grub出现了问题导致系统无法启动时该怎么办?
1.用安装光盘启动,在安装界面选择 Rescue installed system进入紧急救援模式;
2.然后根据提示选择语言和键盘格式;
3.选择是否配置网卡,选择no;
4.提示硬盘上的系统已经被找到并挂载在/mnt/sysimage下,continue用读写模式挂载;
5.输入 chroot /mnt/sysimage 改变到磁盘根目录;
6.# fdisk -l /dev/sda (使用fdisk检查分区)
7.# grub-install /dev/sda (安装grub引导程序到磁盘 /dev/sda 的MBR扇区)
8.# exit
或者将步骤7的安装换成修复,如下:
7. sh-4.1#grub
8. grub>root (hd0,0) 探测下硬盘的文件系统
9. grub>setup (hd0)
10. grub>quit
·grub 的配置文件grub.conf出现了问题导致系统无法启动时该怎么办?
重新启动系统无法进入系统:
1.用安装光盘启动,在安装界面选择 Rescue installed system进入紧急救援模式;
2.然后根据提示选择语言和键盘格式;
3.选择是否配置网卡,选择no;
4.提示硬盘上的系统已经被找到并挂载在/mnt/sysimage下,continue用读写模式挂载;
5.输入 chroot /mnt/sysimage 改变到磁盘根目录;
6.grub>find (hd0,0)/
7.grub>root (hd#,N)
8.grub>kernel /PATH/TO/KERNEL_FILE
9.grub>initrd /PATH/TO/INITRD_FILE
10.grub>boot
·grub 安装在别的硬盘上面如何操作?
·指定新硬盘上根文件分区
#grub-install –root–directory=/mnt /dev/hda
·在设备 /dev/hda 分区中需要 有一个目录名为 /boot
#mkdir /mnt/boot
#mount /dev/hda1 /mnt/boot
#grub-install –root–directory=/mnt /dev/hda
·在/mnt/boot/ 下创建文件 grub.conf
※·initrd工作与配置文件
◎·initrd的主要工作
·boot loader程序可以把initrd文件加载到内存中去,在内存中解压缩为小的根文件系统,提供一些可以运行 的程序,通过程序可以加载核心的模块(各种文件系统的驱动程序)
·加载合适的驱动后,以只读的方式挂载真正的根文件系统后,释放自己虚拟的根文件系统,控制权交给kernel
◎·initrd的介绍
·initrd的工作就是配合kernel完成自身的根文件系统挂载,kernel挂载后,释放自身,交由kernel继续下去;
·initrd是一个虚拟的根文件系统,提供可以运行的程序,该程序可以加载核心的模块(各种磁盘分区的文件 系统),由此initrd在硬盘有它的数据。
·initrd就是一个过渡的虚拟文件系统,完成工作后释放自身。
◎·initrd的配置文件
·initrd的文件目录在/boot下:(由于我的系统安装的双内核,所以文件比较多) config-2.6.32-431.el6.x86_64 symvers-2.6.32-431.el6.x86_64.gz config-2.6.32-642.el6.x86_64 symvers-2.6.32-642.el6.x86_64.gz System.map-2.6.32-431.el6.x86_64 System.map-2.6.32-642.el6.x86_64 initramfs-2.6.32-431.el6.x86_64.img vmlinuz-2.6.32-431.el6.x86_64 #initrd文件为:initramfs-2.6.32-431.el6.x86_64.img (虽然名称不一样,但是功能是一样的) #内核文件为:vmlinuz-2.6.32-431.el6.x86_64 (一般都是为vmlinuz开头的) #initrd文件与kernel文件的版本是一样的 initramfs-2.6.32-642.el6.x86_64.img vmlinuz-2.6.32-642.el6.x86_64 注意:initrd文件是一个img一个文件,可以展开查看里面的文件,展开的文件结构和真实的根文件系统差不 多。
◎·initramfsXXXXXXXX.img内部文件介绍
#使用zcat initramfs-2.6.32-431.el6.x86_64.img | cpio -id 释放img文件
[root@Centos6 /root/initrd]#zcat initramfs-2.6.32-431.el6.x86_64.img | cpio -id [root@Centos6 /root/initrd]#ls bin init lib pre-trigger tmp cmdline initqueue lib64 pre-udev usr dev initqueue-finished mount proc var dracut-004-409.el6 initqueue-settled netroot sbin emergency initqueue-timeout pre-mount sys etc initramfs-2.6.32-431.el6.x86_64.img pre-pivot sysroot
#看看2级文件目录结构,看看目录中有哪些文件。可以看许多的相关命令 和相关的库文件
[root@Centos6 /root/initrd]#tree -L 2 ├── bin │ ├── awk -> gawk │ ├── basename │ ├── bash │ ├── cat │ ├── cp │ ├── dash │ ├── dd │ ├── dmesg │ ├── gawk │ ├── grep │ ├── gzip │ ├── ln │ ├── loadkeys │ ├── ls │ ├── mkdir │ ├── mknod │ ├── mount │ ├── mv │ ├── plymouth │ ├── plymouthd │ ├── readlink │ ├── rm │ ├── rmdir │ ├── sed │ ├── setfont │ ├── sh -> dash │ ├── sleep │ ├── umount │ └── uname ├── dev │ └── pts ├── dracut-004-409.el6 ├── emergency │ └── 00plymouth-emergency.sh ├── etc │ ├── centos-release │ ├── crypttab │ ├── group │ ├── ld.so.cache │ ├── ld.so.conf │ ├── ld.so.conf.d │ ├── lvm │ ├── modprobe.d │ ├── plymouth │ ├── profile │ ├── rdma │ ├── system-release -> centos-release │ └── udev ├── init ├── initqueue ├── initqueue-finished ├── initqueue-settled ├── initqueue-timeout │ └── 99rootfallback.sh ├── initramfs-2.6.32-431.el6.x86_64.img ├── lib │ ├── dracut-crypt-lib.sh │ ├── dracut-lib.sh │ ├── firmware │ ├── kbd │ ├── modules │ ├── terminfo │ └── udev ├── lib64 │ ├── device-mapper │ ├── ld-2.12.so │ ├── ld-linux-x86-64.so.2 -> ld-2.12.so │ ├── libacl.so.1 -> libacl.so.1.1.0 │ ├── libacl.so.1.1.0 │ ├── libaio.so.1 -> libaio.so.1.0.1 │ ├── libaio.so.1.0.1 │ ├── libattr.so.1 -> libattr.so.1.1.0 │ ├── libattr.so.1.1.0 │ ├── libaudit.so.1 -> libaudit.so.1.0.0 │ ├── libaudit.so.1.0.0 │ ├── libblkid.so.1 -> libblkid.so.1.1.0 │ ├── libblkid.so.1.1.0 │ ├── libbz2.so.1 -> libbz2.so.1.0.4 │ ├── libbz2.so.1.0.4 │ ├── libc-2.12.so │ ├── libcap.so.2 -> libcap.so.2.16 │ ├── libcap.so.2.16 │ ├── libcryptsetup.so.1 -> libcryptsetup.so.1.1.0 │ ├── libcryptsetup.so.1.1.0 │ ├── libc.so.6 -> libc-2.12.so │ ├── libdevmapper-event-lvm2mirror.so -> device-mapper/libdevmapper-event-lvm2mirror.so │ ├── libdevmapper-event-lvm2raid.so -> device-mapper/libdevmapper-event-lvm2raid.so │ ├── libdevmapper-event-lvm2snapshot.so -> device-mapper/libdevmapper-event-lvm2snapshot.so │ ├── libdevmapper-event-lvm2.so.2.02 │ ├── libdevmapper-event-lvm2thin.so -> device-mapper/libdevmapper-event-lvm2thin.so │ ├── libdevmapper-event.so.1.02 │ ├── libdevmapper.so.1.02 │ ├── libdl-2.12.so │ ├── libdl.so.2 -> libdl-2.12.so │ ├── libdmraid-events-isw.so -> libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid-events-isw.so.1 -> libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid-events-isw.so.1.0.0.rc16 │ ├── libdmraid.so.1 -> libdmraid.so.1.0.0.rc16 │ ├── libdmraid.so.1.0.0.rc16 │ ├── libexpat.so.1 -> libexpat.so.1.5.2 │ ├── libexpat.so.1.5.2 │ ├── libfipscheck.so.1 -> libfipscheck.so.1.1.0 │ ├── libfipscheck.so.1.1.0 │ ├── libfreeblpriv3.chk │ ├── libfreeblpriv3.so │ ├── libgcc_s-4.4.7-20120601.so.1 │ ├── libgcc_s.so.1 -> libgcc_s-4.4.7-20120601.so.1 │ ├── libgcrypt.so.11 -> libgcrypt.so.11.5.3 │ ├── libgcrypt.so.11.5.3 │ ├── libglib-2.0.so.0 -> libglib-2.0.so.0.2800.8 │ ├── libglib-2.0.so.0.2800.8 │ ├── libgpg-error.so.0 -> libgpg-error.so.0.5.0 │ ├── libgpg-error.so.0.5.0 │ ├── liblvm2cmd.so.2.02 │ ├── libm-2.12.so │ ├── libm.so.6 -> libm-2.12.so │ ├── libnih.so.1 -> libnih.so.1.0.0 │ ├── libnih.so.1.0.0 │ ├── libnss_files-2.12.so │ ├── libnss_files.so.2 -> libnss_files-2.12.so │ ├── libpci.so.3 -> libpci.so.3.1.10 │ ├── libpci.so.3.1.10 │ ├── libpcre.so.0 -> libpcre.so.0.0.1 │ ├── libpcre.so.0.0.1 │ ├── libply.so.2 -> libply.so.2.0.0 │ ├── libply.so.2.0.0 │ ├── libply-splash-core.so.2 -> libply-splash-core.so.2.0.0 │ ├── libply-splash-core.so.2.0.0 │ ├── libpopt.so.0 -> libpopt.so.0.0.0 │ ├── libpopt.so.0.0.0 │ ├── libpthread-2.12.so │ ├── libpthread.so.0 -> libpthread-2.12.so │ ├── libreadline.so.6 -> libreadline.so.6.0 │ ├── libreadline.so.6.0 │ ├── libresolv-2.12.so │ ├── libresolv.so.2 -> libresolv-2.12.so │ ├── librt-2.12.so │ ├── librt.so.1 -> librt-2.12.so │ ├── libselinux.so.1 │ ├── libsepol.so.1 │ ├── libtinfo.so.5 -> libtinfo.so.5.7 │ ├── libtinfo.so.5.7 │ ├── libudev.so.0 -> libudev.so.0.5.1 │ ├── libudev.so.0.5.1 │ ├── libuuid.so.1 -> libuuid.so.1.3.0 │ ├── libuuid.so.1.3.0 │ ├── libz.so.1 -> libz.so.1.2.3 │ └── libz.so.1.2.3 ├── mount │ ├── 10resume.sh │ └── 99mount-root.sh ├── proc ├── sbin │ ├── biosdevname │ ├── blkid │ ├── blockdev │ ├── cache_check -> pdata_tools │ ├── cache_dump -> pdata_tools │ ├── cache_repair -> pdata_tools │ ├── cache_restore -> pdata_tools │ ├── cryptroot-ask │ ├── cryptsetup │ ├── dmeventd │ ├── dmraid │ ├── dmraid_scan │ ├── dmsetup │ ├── dmsquash-live-root │ ├── era_check -> pdata_tools │ ├── era_dump -> pdata_tools │ ├── era_invalidate -> pdata_tools │ ├── era_restore -> pdata_tools │ ├── initqueue │ ├── insmodpost.sh │ ├── killall5 │ ├── kpartx │ ├── loginit │ ├── losetup │ ├── lsmod │ ├── lspci │ ├── lvm │ ├── lvm_scan │ ├── mdadm │ ├── mdadm_auto │ ├── mdcontainer_start │ ├── md_finished.sh │ ├── mdmon │ ├── mdraid-cleanup │ ├── mdraid_start │ ├── modprobe │ ├── partx │ ├── pdata_tools │ ├── pidof -> killall5 │ ├── poweroff -> reboot │ ├── reboot │ ├── rmmod │ ├── setpci │ ├── switch_root │ ├── thin_check -> pdata_tools │ ├── thin_dump -> pdata_tools │ ├── thin_repair -> pdata_tools │ ├── thin_restore -> pdata_tools │ ├── udevadm │ └── udevd ├── sys ├── sysroot ├── tmp ├── usr │ ├── bin │ ├── lib │ ├── lib64 │ ├── libexec │ ├── sbin │ └── share
※·kernel工作与配置文件
◎·Kernel的主要工作
·硬件探测(核心硬件的探测)
·装载驱动(有的驱动没有到initrd中找驱动)
·挂载根文件系统
·启动用户空间的第一个进程init
※·init工作与配置文件
◎·init主要的工作/etc/inittab(Centos 5)中的格式
1运行默认级别
2系统软件的运行环境脚本(/etc/rc.d/rc.sysinit)
·根据配置文件中的设定来设定主机名;
·打印欢迎信息;
·激活SELinux 和uedv;
·挂载所有定义在/etc/fastab文件中的文件系统;
·激活swap设备;
·检测根文件系统,并实现以读写方式重新挂载;
·设置系统时钟;
·根据/etc/sysctl.conf文件设定内核参数的值;
·激活LVM和RAID设备;
·加载额外的设备驱动程序;
·清理操作。
3不同级别启动不同脚本服务,启动不同的应用程序服务(/etc/rc.d/rc#.d/)
·相应级别下的对应的文件夹目录,S开头的全部启动,K开头的全部停止
4配置是否允许按下 ctrl+alt+del 就重新启动的配置项目
5配置关于UPS的选项
6启动终端 tty1 — tty6
7如果是启动图形界面,就会以相对应的程序启动图形化界面。
注意:(1)Centos 6的init程序为upstart,其配置文件为 /etc/init/*.conf;此些配置遵循upstart语法格式进行编程;
(2)Centos 6的服务控制事务实际上大多数并没有使用upstart脚本来进行控制,而依然使用的是sysv风格的 脚本。
原创文章,作者:linux_root,如若转载,请注明出处:http://www.178linux.com/44581
评论列表(1条)
一如既往的优秀,给点小建议,可以通过一个思维导图将整个开机启动流程展示在图片上。