linux 开机启动流程:

1。按电源按钮

    补充:计算机机箱例的主要硬件有:主板、硬盘、光驱、CPU、内存、显卡、声卡、网卡

2。使用BIOS程序初始化和检测硬件

    BIOS     基本输入输出系统

    CMOS   半导体金属氧化物

    检测CPU、内存、显卡、硬盘、和各种芯片并进行设置

    查找启动介质(本地硬盘、光驱i、U盘、PXE芯片远程启动)

   加载BIOS程序,获取启动顺序,找到第一个启动设备;

     一开机,马上按 ‘ Del ‘键(台式机),虚拟机是按 ‘ F2 ‘键,笔记本是按 ‘ F1 ’或‘ F2 ‘键(视机器而定),服务器是按 ‘  ’键  

           有硬盘引导(HDD)、光盘镜像引导(CD-ROM)、USB设备引导(USB)、网络引导(PXE)

3。装载引导程序MBR(0面0道1扇区,共512字节)和grub引导

    引导程序       446字节

    磁盘分区       64字节

    结束标识       2字节

    加载stage1,stage1通常位于MBR中,用于装载stage2

    加载stage1.5,用于识别文件系统

    加载stage2,grub的核心程序

    注意:stage1.5和stage2文件位于/boot/grub目录下

    使用/boot/grub/grub.conf 配置文件加载linux内核

   读取第一启动设备的MBR区信息,里面有GRUB、LILO引导程序;

       MBR里的引导加载程序bootloader会读取分区表,找到(主)引导分区所在的位置,加载linux内核

               mbr和superblock的关系?

          stage1 --->stage2-->加载文件系统驱动,就可以认识/boot分区里的文件了。

4。内核引导

    加载linux内核vmlinuz,vmlinuz是一个gzip压缩文件,加载时需要使用gzip解压

    加载initrd*.img,init*.img,通常是加载USB,LVM,RAID,SCSI等设备模块和磁盘接口的驱动程序

    system.map,系统参数的对应表

    加载核心、核心开始驱动硬件;(linux内核和p_w_picpath镜像)

     bios里也有很多驱动的,它会认识很多硬件。如果主板上的电池没有电了,cmos里的参数和数据会丢失,但是每次开机会加载缺省(默认)的设置

      加载了grub.conf文件后,找到了内核文件,然后加载vmlinuz-2.6.18-194.el5,内核文件里有一些基本的驱动和程序。

     initrd /initrd-2.6.39.4.img  

      将initrd-2.6.39.4.img ,从内存中拿出一部分空间出来当硬盘使用(ramdisk),然后将initrd-2.6.39.4.img 文件解压缩到ramdisk里,

      形成一个临时的根目录,里面包含了/etc,/bin,/lib,/dev,/sbin目录。/lib下有很多的模块驱动。

配置文件:/etc/groub.conf,/etc/fstab,/etc/inittab

5。系统的初始化和引导   (需要运行的一些脚本程序)

    运行/sbin/init 程序进行初始化(使用配置文件/etc/inittab和/etc/init目录系下的文件)

    /etc/inittab 设置默认启动级别

        * 运行/etc/rc.sysinit

                @ 获取网络环境

                @初始化硬件

                @设置主机名

                @设备映射器及相关初始化

                @初始化LVM

                @文件系统检测

                @启用磁盘配额和更新配额

                @挂载设备(根据/etc/fstab配置文件进行挂载)

                @清除开机过程中所产生的垃圾文件

                @启用交换分区

                @将信息写入/var/log/dmesg文件

         * 运行/etc/rc.local     \\记录开机时要做的事情

         * 按照设定的级别启动相关的服务,使用/etc/rc*.d 目录下的程序启动服务,此处 * 表示0-6的7个启动运行级别

                /etc/rc.d/rc*.d 目录下的文件由启动状态(S 表示启动,K 表示不启动)、启动顺序  和启动服务程序三部分组成

                

         用户登录

                * 运行/sbin/mingetty 登录程序

                       用户登录(输入用户名和密码)-->使用/etc/passwd和/etc/shadow检测正确性

                       -->运行/etc/profile,~/.bash_profile,~/.bashrc,/etc/bashrc

                       

         进入用户桌面,运行相应的桌面程序(gdm gnome桌面,kde kde桌面,xdm 启动x windows)

 

6。执行/sbin/init程序,产生init进程;

7。init执行/etc/rc.d/rc.sysinit文件;

8。启动核心的外挂模块/etc/modeprobe.conf;

9。init执行相应运行级别的scripts;

10。init执行/etc/rc.d/rc.local;

===============

解压查看initrd-2.6.18-194.el5.img文件:

# cd /boot/

# mkdir /tmp/boot

# cp initrd-2.6.18-194.el5.img /tmp/boot

# cd /tmp/boot

# ls

initrd-2.6.18-194.el5.img

# file initrd-2.6.18-194.el5.img 

initrd-2.6.18-194.el5.img: gzip compressed data, from Unix, last modified: Thu Jul 12 12:04:10 2012, max compression

# gunzip initrd.img

]# ls

initrd-2.6.18-194.el5.img  initrd.img

# file initrd.img 

initrd.img: ASCII cpio archive (SVR4 with no CRC)

# cpio -iv

…………………(省略)…………………

# ls

bin  etc   initrd-2.6.18-194.el5.img  lib   sbin  sysroot

dev  init  initrd.img                 proc  sys

# cd lib

# ls            有ext3文件系统的驱动模块

ata_piix.ko      dm-mod.ko          ext3.ko    ohci-hcd.ko

dm-log.ko        dm-raid45.ko       firmware   scsi_mod.ko

dm-mem-cache.ko  dm-region_hash.ko  jbd.ko     sd_mod.ko

dm-message.ko    ehci-hcd.ko        libata.ko  uhci-hcd.ko

=======================================

11。执行/bin/login程序,等待用户登录。

==========================

 当处在字符界面(运行级别 3)时,在终端中输入 init 5 (或输入 start x ),则可以重新进入图形界面(即运行级别 5 ) 

[root@teacher raid-lvm]# init 5

进入运行级别5(图形界面,前提条件是gnome或者kde图形套件已经安装)

init 0  关机

init 6 重新启动

init 3 进入文件界面

[root@teacher raid-lvm]# start x (启动图形界面X程序)

[root@teacher raid-lvm]# vim /etc/inittab 

[root@teacher raid-lvm]# init 5

[root@teacher raid-lvm]# runlevel   查看运行级别

N 5

在/etc/fstab里挂载,用 blkid 命令查看需要挂载的磁盘的UUID号:

# blkid /dev/sda3

/dev/sda3: UUID="c91c42d9-bbcb-4d3b-abf1-57943c05ee90" TYPE="swap" 

练习:

1)在系统开机时自动设置别名rm=‘rm -fr’

# vim ~/.bashrc

alias rm='rm -fr'

2)如果忘记密码,怎么办?要求进入单用户模式将root用户密码删除

e  -->选第二项-->e -->1-->b -->

# passwd -d root

3)将系统的默认级别设置为3

# vim /etc/inittab

id:3:initdefault:

4)将/boot所在的分区挂载从/etc/fstab文件里面删除,然后重启计算机进行恢复

# df -Th

# vim /etc/fstab

手动编辑即可

5)将/etc/fstab文件删除,然后重启计算机进行恢复       (下面两种情况,注意要在/etc/selinux/config里面的SELINUX关闭的情况下重启)

在备份了情况下(cp或dd备份)

# dd if=/etc/fstab of=/Desktop/fstab.bak bs=512 count=1

# rm -rf /etc/fstab

# reboot

>插入光驱进入营救模式>……

>:

bash-4.1# fdisk -l     \\查看磁盘情况,找到/boot所在分区/dev/sda3

# mkdir /back      

# mount /dev/sd3 /back    \\将/boot所在分区/dev/sda3挂载到新建/back目录下

# df -Th

# cd /back

# cd Desktop

# dd if=fstab.conf of=/back/etc/fstab bs=512 count=1

# cd /back/etc

# cp fstab /etc/

# exit            \\在营救模式下进入其他主目录,需要用exit退出

# reboot

在没有进行备份的情况下:

# rm -rf /etc/fstab

# reboot

>插入光驱进入营救模式>……

>:

bash-4.1# fdisk -l     \\查看磁盘情况,找到/boot所在分区/dev/sda3

# mkdir /back      

# mount /dev/sda3 /back    \\将/boot所在分区/dev/sda3挂载到新建/back目录下

# df -Th

# cd /back/etc

# vi fstab                            \\营救模式中不能够使用vim,只能用 vi 

手动编辑里面的内容

:wq退出># blkid /dev/sda3 >>/back/etc/fstab     \\查找/dev/sda3的UUID号并追加到/back/etc/fstab 里,其他的磁盘一样的操作

# vi /back/etc/fstab 

手动编辑内容,并将刚才追加进的UUID号进行复制,粘贴,如下:

UUID=00d6bc1f-da72-4935-a69f-d79416b512fb     /                       ext4    defaults        1 1

UUID=e407d3ee-cf6b-4378-9af7-d64bbb20ce5c    /boot                   ext4    defaults        1 2

UUID=c91c42d9-bbcb-4d3b-abf1-57943c05ee90    swap                    swap    defaults        0 0

:wq

# cp fstab /etc/

# exit

# reboot

lvchange -ay  逻辑卷名        \\激活

# vim /etc/fstab  -- 开机自动挂载本地镜像

/root/桌面/king/soft/rhel6-x86_64.iso        /yum   iso9660 loop       0       0

# mount -a  -- 手动挂载/etc/fstab里面的选项