GVKun编程网logo

CentOS6启动流程(centos6启动过程)

14

想了解CentOS6启动流程的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于centos6启动过程的相关问题,此外,我们还将为您介绍关于2.centos5,6启动流程、Cenos5和Cent

想了解CentOS6启动流程的新动态吗?本文将为您提供详细的信息,我们还将为您解答关于centos6启动过程的相关问题,此外,我们还将为您介绍关于2.centos5,6启动流程、Cenos 5和Centos 6 启动流程和故障恢复、CentOS 5,6 系统启动流程详解、Centos 5,6的启动流程的新知识。

本文目录一览:

CentOS6启动流程(centos6启动过程)

CentOS6启动流程(centos6启动过程)

 

  为什么把这位的参考放在前面,主要是这位大佬的流程图太详细了。虽说不一定要了解这么详细,但还是很佩服啊。不多说,上图(在新标签中打开图片)

分享图片

  下面开始简单的了解一下CentOS6的启动流程吧。

 第一步、硬件启动阶段

分享图片

  简单说一下这一步的流程:打开电源;POST自检;BIOS逐一排查设备启动顺序;如果是硬盘启动,读取硬盘的MBR的BootLoader。(这里默认MBR分区,暂不考虑GPT分区)

  这里主要有三个需要了解的地方BIOS启动顺序、MBR和BootLoader。BIOS启动顺序大部分人应该都知道,我就不赘述了。

(1).MBR

  MBR(Main Boot Record),是硬盘的0柱面,0磁道、1扇区(第一个扇区),称为主引导扇区,也称为主引导记录。它由三部分组成:主引导程序(BootLoader)、硬盘分区表DPT(disk Partition table)和硬盘有效标志(55AA)。

  注:硬盘默认一个扇区大小为512字节。

  第一部分,主引导程序(BootLoader)占446个字节,负责从活动分区中装载,并运行系统引导程序。

  第二部分,硬盘分区表DPT占64个字节,有4个分区表项,每个分区表项占16个字节,硬盘中分区有多少以及每一个分区的大小都记录在其中。

  第三部分,硬盘有效标志,占2个字节,固定为55AA。如果这个标志位0xAA55,就认为这个是MBR。

(2).BootLoader

  不同的系统有不同的主引导程序(BootLoader)。Windows使用的是NTLDR(NT Loader,Windows NT系列操作系统)、Bootmgr(Boot Manager,Windows Vista,7,8,10),Linux一般使用的是grub(也叫grub legacy)和grub2。

  CentOS6一般使用的是grub。GRUB(GRand Unified Bootloader)是一个来自GNU项目的多操作系统启动程序。

第二步、GRUB引导阶段

分享图片

 

  简单说一下这一步的流程:GRUB程序加载执行并引导kernel(内核)程序,其中有三个阶段。

  grub引导阶段的文件都在/boot/grub/目录下

(1).Stage1阶段

  这一阶段其实执行的就是系统安装时预先写入到MBR的Bootloader程序。它的任务仅是读取(加载)硬盘的0柱面,0磁道,2扇区的内容(/boot/grub/stage1)并执行。

?
1
2
[[email protected] ~]# ll /boot/grub/stage1
-rw-r--r--. 1 root root 512 Mar 13  2018 /boot/grub/stage1

  这一阶段,使硬件初始化,为Stage2准备RAM空间(内存空间),读取Stage2到RAM空间(应该涉及到了Stage1.5阶段)。就是Stage1.5阶段或Stage2阶段的入口,引导进入Stage1.5阶段或Stage2阶段。

  另外,这一阶段并没有识别文件系统的能力。  

(2).Stage1.5阶段

  这一阶段是Stage1阶段和Stage2阶段的桥梁,具有识别分区文件系统的能力,此后grub程序便有能力去访问/boot/grub/stage2,并将其读取到内存执行。

?
1
2
3
4
5
6
7
8
[[email protected] ~]# ll -h /boot/grub/stage2   //大于512字节了
-rw-r--r--. 1 root root 124K Mar 21  2018 /boot/grub/stage2
[[email protected] ~]# ls /boot/grub/*stage1_5   //有各种文件系统格式
/boot/grub/e2fs_stage1_5     /boot/grub/minix_stage1_5
/boot/grub/fat_stage1_5      /boot/grub/reiserfs_stage1_5
/boot/grub/ffs_stage1_5      /boot/grub/ufs2_stage1_5
/boot/grub/iso9660_stage1_5  /boot/grub/vstafs_stage1_5
/boot/grub/jfs_stage1_5      /boot/grub/xfs_stage1_5

(3).Stage2阶段

  这一阶段会(初始化本阶段需要用到的硬件,检测系统的内存映像,)解析grub的配置文件/boot/grub/grub.cnf,根据配置文件加载内核镜像到内存中,通过initrd程序建立虚拟根文件系统,最后调用(转交)内核

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[[email protected] ~]# cat /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/mapper/vg_centos6-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default =0   //设置默认启动项为第一个内核
timeout=5   //菜单项等待选项时间为5秒
splashimage=(hd0,0)/grub/splash.xpm.gz   //菜单背景图片
hiddenmenu   //隐藏菜单
//这里有时候会有passwrod参数,意思是进入急救模式(单用户模式)的密码是多少,可以是明文密码,可以是加密密码
//例如password --md5 $1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/,这代表进入急救模式的password经过MD5加密,加密密码为$1$1S9Xy$1MuGZSoPc2vAtkW.jvz0X/
title CentOS 6 (2.6.32-642.el6.x86_64)   //菜单项名称
         root (hd0,0)   //grub查找stage2文件及kernel文件所在设备分区,grub的根。第一块硬盘的第一个分区
         //启动的内核
         kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/vg_centos6-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_centos6/lv_swap crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_centos6/lv_root  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
         initrd /initramfs-2.6.32-642.el6.x86_64.img   //内核匹配的ramfs文件,img是镜像文件

第三步、内核引导阶段

分享图片

  简单说一下这一步的流程:通过内存中的虚拟根文件系统,加载驱动,然后切换到真正的根文件系统,并执行/sbin/init程序。

第四步、init初始化阶段(又叫系统初始化阶段)

分享图片

  简单说一下这一步的流程:/sbin/init程序会读取/etc/inittab文件确认运行级别,然后执行/etc/rc.d/rc脚本,根据确认的运行级别启动对应/etc/rc.d/rc#.d/目录下的服务(#为0~6),与此同时执行系统初始化脚本/etc/rc.sysinit(软链接,指向/etc/rc.d/rc.sysinit),还会加载/etc/rc.local(软链接,指向/etc/rc.d/rc.local文件)用户自定义服务(脚本)。

  这里有个有意思的地方,/etc/rc.d/目录下的文件几乎在上一次都有相应的软链接(也就是/etc/目录下),唯一没有的/etc/rc.d/init.d/目录又似乎与/etc/init.d/目录完全相同

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[[email protected] ~]# ls -ld /etc/rc*
lrwxrwxrwx.  1 root root    7 Mar 13  2018 /etc/rc -> rc.d/rc
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx.  1 root root   10 Mar 13  2018 /etc/rc6.d -> rc.d/rc6.d
drwxr-xr-x. 10 root root 4096 Feb 18 02:17 /etc/rc.d
lrwxrwxrwx.  1 root root   13 Mar 13  2018 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx.  1 root root   15 Mar 13  2018 /etc/rc.sysinit -> rc.d/rc.sysinit
[[email protected] ~]# ls /etc/rc.d/
init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit
rc      rc1.d  rc3.d  rc5.d  rc.local
[[email protected] ~]# diff -ruNa /etc/rc.d/init.d/ /etc/init.d/

(1)./etc/inittab文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[[email protected] ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONfigURATION HERE WILL HAVE NO EFFECT ON YOUR SYstem.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers,or how
# upstart works,see init(5),init(8),and initctl(8).
#
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser,without NFS (The same as 3,if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

  这个文件直接看最后一行的那个数字就好了,我这里是5,就代表启动级别是5。

  另外,还需要了解下系统的启动级别:

    0  关机

    1  单用户模式、维护模式、急救模式,都可以

    2  多用户模式,但没有网络

    3  完整的多用户模式

    4  预留级别,暂时没用,不用考虑

    5  图形界面,XWindows

    6  重启

(2)./etc/rc.d/rc#.d/目录

  在启动时执行的/etc/rc.d/rc脚本,会调用/etc/rc.d/rc#.d/目录下的文件

?
1
2
3
4
5
6
7
8
[[email protected] ~]# ls /etc/rc.d/rc5.d/
K01smartd        K50dnsmasq     K73winbind         K88sssd          S01sysstat       S12rsyslog         S24nfslock           S26udev-post       S82abrt-ccpp
K02oddjobd       K50xinetd      K74ntpd            K89netconsole    S02lvm2-monitor  S13cpuspeed        S24rpcgssd           S28autofs          S82abrtd
K05wdaemon       K60nfs         K75ntpdate         K89rdisc         S08ip6tables     S13irqbalance      S25blk-availability  S50bluetooth       S90crond
K10psacct        K61nfs-rdma    K75quota_nld       K92pppoe-server  S08iptables      S13rpcbind         S25cups              S50kdump           S95atd
K10saslauthd     K69rpcsvcgssd  K76ypbind          K95firstboot     S10network       S15mdmonitor       S25netfs             S55sshd            S99certmonger
K15htcacheclean  K71cgred       K84wpa_supplicant  K95rdma          S11auditd        S22messagebus      S26acpid             S70spice-vdagentd  S99local
K15httpd         K72cgconfig    K87restorecond     K99rngd          S11portreserve   S23NetworkManager  S26haldaemon         S80postfix

  K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭

  S开头的文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动

  这些文件其实都是软链接,指向的都是/etc/rc.d/init.d/目录下的文件

?
1
2
[[email protected] ~]# ll /etc/rc.d/rc5.d/K01smartd
lrwxrwxrwx. 1 root root 16 Mar 13  2018 /etc/rc.d/rc5.d/K01smartd -> ../init.d/smartd

第五步、启动终端

分享图片

  最后一步就是用户登录了,没什么说的。

2.centos5,6启动流程

2.centos5,6启动流程

wKioL1Mb-qTBc13RABEw7PlXo9A353.jpg

centos5,6启动流程:

1.post
2.grub

  • 2.1stage1 mbr 446
  • 2.2stage1.5 mbr后面的27 sectors
  • 2.3stage2 /boot/grub

3.核心文件:/boot/vmlinuz-VERSION-release
4.伪根系统:/boot/initramfs-VERSION-release.img
5.mount /
6./sbin/init /etc/inittab N
7./etc/rc.d/rc.sysinit
8./etc/rcN.d/K
9./etc/rcN.d/S

10./etc/rc.d/rc.local
11.mingetty login
12.windows

timg.jpg

文字描述

1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.核心执行init程序,并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机

分步解析

1.加载BIOS,开机自检(post)----->寻找第一个可启动设备

image

2.读取GRUB(主引导程序)----->读取第一个可启动设备的第一个扇区

  • primary boot loader:
    • 1---stage1)MBR 446 stage1

      1.png


      1.png

    • 2---stage1.5 )识别相应的文件系统,从而加载stage2文件-----stage1与stage2的桥梁

      1.png

  • secondary boot loader
    • 2---stage2)引导菜单 /boot/grub/grub.conf

      image

第1和第2总结

  1. BIOS将控制权交给硬盘的主引导区,即MBR
  2. MBR中的bootloader(stage1)通过内置的地址加载stage1_5
  3. bootloader通过stage1_5的内容,将分区中的stage2加载
  4. stage2此时就可以在文件系统中将grub.conf文件加载,让用户看到选项界面。

3.执行内核文件:/boot/vmlinuz-VERSION-release

1.png

4.加载伪根系统:/boot/initramfs-VERSION-release.img

为挂载/提供模块

1.png

5.以只读方式挂载根文件系统(mount /)

1.png


2.png

6.运行第1个应用程序(用户空间),初始化

/sbin/init(变成一个用户进程)根据/etc/inittab配置文件来执行相应的脚本进行初始化

1.png


2.png


3.png

7.init执行系统初始化脚本:/etc/rc.d/rc.sysinit

1.png


1.png

8. init执行指定运行级别的脚本(停止类)

/etc/rcN.d/K*(按顺序停止每个服务)

1.png


2.png

9. init执行指定运行级别的脚本(开始类)

/etc/rcN.d/S*(按顺序开始每个服务)

1.png

10.在2、3、5模式下会执行的脚本

/etc/rc.d/rc.local

1.png


1.png

11.等待用户登录

/sbin/mingetty
1)命令行登录
2)图形化登录

1.png


1.png


***

timg.jpg

Cenos 5和Centos 6 启动流程和故障恢复

Cenos 5和Centos 6 启动流程和故障恢复

Cenos 5和Centos 6 启动流程和故障恢复

掌握Linux启动的过程是很重要的,可以让我们在系统故障时进行排查,判断是具体哪个阶段出现问题,从而修复,而不是只能重装系统。

 我们需要了解几个相关名词及其含义

 inux 内核英文叫kernel,提供进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能。 

核心文件: /boot/vmlinuz-VERSION-release 


ramdisk:辅助的伪根系统 


CentOS 5: /boot/initrd-VERSION-release.img 


CentOS 6,7: /boot/initramfs-VERSION-rel5ase.img 


模块文件: /lib/modules/VERSION-release5 

Centos6 启动如下几步:

一:第一阶段:硬件引导启动

              1.加载 加载BIOS的硬件信息,获取第一个启动设备 POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对cpu、主板、内存、键盘、 CD-ROM光驱等硬件情况的检测。 
               2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息。 
 MBR总共512字节,前446byte 是bootloader ,之后64byte是硬盘分区表,最后两个字节是55AA 。 bootloader 是第一阶段启动项

                                bootloader 作用:

                                 1.提供启动菜单

                                 2.加载内核

                                 3.将引导转交给其他的Boot Loader

二:第二阶段:Grub启动引导阶段

 

分享图片

三:第三阶段:内核引导阶段

 探测可识别到的所有硬件设备

 加载硬件驱动程序(可能借助于ramdisk加载驱动)

 以只读方式挂载根文件系统

 运行用户空间的第一个应用程序:/sbin/init

四:第四阶段:init初始化

Init程序的类型

         1)SysV: init,CentOS 5之前

配置文件:/etc/inittab

          2)Upstart: init,CentOS6

配置文件:/etc/inittab,/etc/init/*.conf

           3)Systemd:systemd,CentOS 7

配置文件:/usr/lib/systemd/system  /etc/systemd/system

 

Centos 5:运行级别:为系统运行或维护等目的而设定;0-6:7个级别

0:关机

1:单用户模式(root自动登录),single,维护模式

2:多用户模式,启动网络功能,但不会启动NFS;维护模式

3:多用户模式,正常模式;文本界面

4:预留级别;可同3级别

5:多用户模式,正常模式;图形界面

6:重启 默认级别:3,5

切换级别:init# 查看级别:runlevel;who -r

 

4.1 init程序执行/etc/rc.d/rc.sysinit文件 


4.2 启动核心的外挂模块 


4.3 init执行运行的各个批处理文件(scripts) 


4.4 init执行/etc/rc.d/rc.local 


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

五:系统启动

  系统完后启动

启动故障分析

  1:模拟删除MBR表

 

dd if=/dev/zero of=/dev/sda bs=1 count=512 将MBR表清空

 

重启

此时我们不能进入到系统中,因为没有了Stage1的引导。

修复:重启进入救援模式

通过命令 chroot /mnt/sysimage 切换到真正根目录下。

 

  然后执行grub-install /dev/sda    等待完后后 重启 ,就恢复了

 

这种方法同样适用于1.5阶段故障

 

 

2 。模拟删除整个/boot分区

我们先看看分区下的文件

 

分享图片

 

 里面除了grub 文件夹外的文件都是安装kernel 时候自动生成的。 当整个boot 分区丢失后,我们同样先进入救援模式,同样先执行 

chroot /mnt/sysimage 命令切换到平时的根目录下

,然后挂载光盘,之后安装光盘里的内核文件,

命令rpm -ivh /mnt/Packages/kernel-2.6.32-696.e16x86_64.rpm –force

 

然后我们在grub 文件夹下新建grub.conf 文件 

[[email protected]9 boot]#cat grub/grub.conf 
root (hd0,0) 写明/boot分区的位置 hd0 表示第一个硬盘,0 表示第一个分区。 
default=0 0表示默认启动 
timeout=5 表示5秒后自动运行 
title linux1 一个名称,叫什么无所谓,但是要有 
kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2 
initrd /initramfs-2.6.32-696.el6.x86_64.img 

做完之后退出,然后重启机器就可以正常恢复了!

CentOS 5,6 系统启动流程详解

CentOS 5,6 系统启动流程详解

一、linux 组成介绍

1.linux 组成:

Linux: kernel+rootfs(根文件系统)

kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

rootfs: 程序和glibc

库:函数集合,function,调用接口(头文件负责描述)

过程调用: procedure,无返回值

函数调用: function

程序:二进制执行文件

2.内核设计流派:

单内核(monolithic kernel): Linux

把所有功能集成于同一个程序

微内核(micro kernel): Windows,Solaris

每种功能使用一个单独子系统实现

3. Linux内核特点:

支持模块化: .ko(内核对象)

如:文件系统,硬件驱动,网络协议等

支持内核模块的动态装载和卸载

组成部分:

核心文件:/boot/vmlinuz-VERSION-release(出厂时,直接从光盘中拷贝而得)

ramdisk:辅助的伪根系统

(包含各类驱动,以供启动时加载真正的根文件系统)

/boot/initramfs-######.img (系统安装之时才会生成)

e23bb6978458453397f31764d16dc60f.jpgPHP/upload/image/20160911/1473579988883551.jpg">

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

centos 6.8-initramfs-2.6.32-642.el6.x86_64.img 简析:

315917dbfc364fe1927a0cc50e384af6.jpgPHP/upload/image/20160911/1473580017765649.jpg">

(initramfs-2.6.32-642.el6.x86_64.img 以gzip格式压缩,解压时候,需要在尾部添加.gz后缀)

解压后:

a0681fc8d1d04b84ba883327b2192b41.jpgPHP/upload/image/20160911/1473580050761893.jpg">

使用cpio 解压: ( cpio -id < initramfs-2.6.32-642.el6.x86_64.img.cpio)

1a39ed0610614f7e866e249cec8effc7.jpgPHP/upload/image/20160911/1473580070680863.jpg">

initramfs 作为临时伪根文件系统,有类似于根的各类所需文件、驱动,可供启动时候加载真正的根文件系统

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

CentOS 5:/boot/initrd-VERSION-release.img

修复:

救援模式下,

chroot /mnt/sysimage

cd /boot

mkinitrd initrd-`uname -r`.img `uname -r` (centos5 )

(第二个uname -r ,是作为initrd 的参数)

exit


CentOS6,7:/boot/initramfs-VERSION-release.img

修复:(centos 6 )

救援模式下,

chroot /mnt/sysimage

cd /boot

mkinitrd initramfs-`uname -r`.img `uname -r` (centos6)

exit

(centos 7 需要进入grub 修复:)


模块文件: /lib/modules/VERSION-release

命令补充: lsmod 查看加载的模块;

moinfo 查看指定模块信息

modprobe 加载模块;

rmmod / modprobe -r 卸载模块

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

二、linux 系统启动流程详解:

1. Centos 6启动流程

27b38a54c18c47e1939b71bc855584ff.jpgPHP/upload/image/20160911/1473580231730780.jpg">

2. centos6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备。

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3.加载核心操作系统的核心信息,核心开始解压缩,(加载initramfs.img)并尝

试驱动所有的硬件设备。

4.核型执行init程序并获取运行信息。

5.Init执行/etc/rc.d/rc.sysinit文件。

6.启动核心的外挂模块(/etc/modprobe.conf)。

7.Init执行运行的各个批处理文件(scripts).

8.Init执行/etc/rc.d/rc.local. (出现登陆界面)

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

10.登录之后开始以Shell控制主机。

3. 启动流程详解:

系统整体初始化流程:

POST �> BootSequence (BIOS) �>

Bootloader(MBR) �>(进入/boot) kernel(ramdisk) �> rootfs(只读) ―

> init( systemd)


POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部

分。负责完成对cpu、主板、内存、硬盘子系统、显示子系统、 串并行接

口、键盘、 CD-ROM光驱等硬件情况的检测。


ROM: BIOS, Basic Input and Output System,保存着有关计

算机系统最重要的基本输入输出程序,系统信息设置、 开机加电自检程序和

系统启动自举程序等。


RAM: CMOS互补金属氧化物半导体,保存各项参数的设定

按次序查找引导设备,第一个有引导程序的设备为本次启动设备


bootloader: 引导加载器,引导程序 (MBR第一个扇区)

windows: ntloader,仅是启动OS

Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内

核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把

系统控制权移交给内核

LILO: LInux LOader(早期)

GRUB: GRand Unified Bootloader

GRUB 0.X: GRUB Legacy, GRUB2


MBR:

446: bootloader,64: 分区表,2: 55AA

(446字节内可寻找到bootloader所在盘区)

GRUB:(grub 目录下,存放着各阶段的备份文件)

primary boot loader :

1st stage�》 加载bootloader

1.5 stage�> 进入/boot目录,加载vmlinux,initramfs

secondary boot loader :

2nd stage, 读取分区根文件系统


kernel:

自身初始化:

探测可识别到的所有硬件设备

加载硬件驱动程序(可能借助于ramdisk加载驱动)

以只读方式挂载根文件系统

运行用户空间的第一个应用程序: /sbin/init


4.init程序的类型:

SysV: init,CentOS 5之前

配置文件: /etc/inittab

Upstart: init,CentOS 6

配置文件: /etc/inittab,/etc/init/*.conf

Systemd: systemd,CentOS 7

配置文件: /usr/lib/systemd/system

/etc/systemd/system

ramdisk:

内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问

ramdisk �> ramfs 提高速度

CentOS 5: initrd,工具程序: mkinitrd

CentOS 6: initramfs, 工具程序: mkinitrd,dracut(实际调用文件)


5. 运行级别

运行级别配置路径:/sbin/init (CentOS 5 )

(/etc/inittab 下可以定义默认启动界面A)


运行级别:为系统运行或维护等目的而设定; 0-6: 7个级别

0:关机

1:单用户模式(root自动登录),single,维护模式

2: 多用户模式,启动网络功能,但不会启动NFS;维护模式

3:多用户模式,正常模式;文本界面

4:预留级别;可同3级别

5:多用户模式,正常模式;图形界面

6:重启

默认级别: 3,5

切换级别: init #

查看级别: runlevel ;who -r


6.init 初始化过程详解

1) init 初始化流程:

init读取其初始化文件:/etc/inittab

初始运行级别(RUN LEVEL)

系统初始化脚本

对应运行级别的脚本目录

捕获某个关键字顺序

定义UPS电源终端/恢复脚本

在虚拟控制台生成getty

在运行级别5初始化X

2) CentOS5的inittab文件详解:

配置文件路径: /etc/inittab


―――――――――――――――――――――――――――-

Centos 5.4 ―�/etc/inittab:

# inittab This file describes how the INIT process should set up

# the system in a certain run-level.

#

# Author: Miquel van Smoorenburg,<miquels@drinkel.nl.mugnet.org>

# Modified for RHS Linux by marc Ewing and Donnie Barnes

#

# Default runlevel. The runlevels used by RHS are:

# 0 � halt (Do NOT set initdefault to this)

# 1 � Single user mode

# 2 � Multiuser,without NFS (The same as 3,if you do not have networking)

# 3 � Full multiuser mode

# 4 � unused

# 5 � X11

# 6 � reboot (Do NOT set initdefault to this)

#

id:5:initdefault:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r Now

# When our UPS tells us power has Failed,assume we have a few minutes

# of power left. Schedule a shutdown for 2 minutes from Now.

# This does,of course,assume you have powerd installed and your

# UPS connected and working correctly.

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in,cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown

Cancelled"

# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5

x:5:respawn:/etc/X11/prefdm -nodaemon

―――――――――――――――――――――――――――

centos 6―�/etc/inittab:

# Default runlevel. The runlevels used are:

# 0 � halt (Do NOT set initdefault to this)

# 1 � Single user mode

# 2 � Multiuser,if you do not have networking)

# 3 � Full multiuser mode

# 4 � unused

# 5 � X11

# 6 � reboot (Do NOT set initdefault to this)

#

id:5:initdefault:

――――――――――――――――――――――――――――――



每一行定义一种action以及与之对应的process

id:runlevel:action:process

id:它是每个登记项的标识符,用于唯一标识每个登记项,不能重复

runlevels:系统的运行级别,表示process的action要在哪个级别下运行,该段中可以定义多个运行级别,

各级别之间直接写不用分隔符;如果为空,表示在所有的运行级别运行。Linux的运行级别有:

0:表示关机

1:表示单用户模式,在这个模式中,用户登录不需要密码,默认网卡驱动是不被

加载,一些服务不能用。

2:表示多用户模式,NFS服务不开启

3,表示命令行模式

4,这个模式保留未用

5,表示图形用户模式

6,表示重启系统


action:表示对应登记项的process在一定条件下所要执行的动作。

具体动作有:

respawn:当process终止后马上启动一个新的

wait:当进入指定的runlevels后process才会启动一次,并且到离开这个

runlevels终止

initdefault:设定默认的运行级别,即我们开机之后默认进入的运行级别,

不能是0,6

sysinit:系统初始化,只有系统开机或重新启动的时候,

这个process才会被执行一次

powerwait:当init接收到电源失败信号的时候执行相应的process,

并且如果init有进程在运行,会等待这个进程完成之后,再执行相应的process

powerfail:当init接收到电源失败信号的时候执行相应的process,并且如果

init有进程在运行,不会等待这个进程完成,它会直接执行相应的process

powerokwait:电源已经故障,但是在等待执行对应操作的时候突然来电了就执行对应

的process

powerfailNow:当电源故障并且init被通知UPS电源已经快耗尽执行相对应的process

ctrlaltdel:当用户按下ctrl+alt+del这个组合键的时候执行对应的process

boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,

也不重新启动该进程

bootwait:只有在引导过程中,才执行该进程,并等待进程的结束;当该进程死亡时,

也不重新启动该进程

off:如果process正在运行,那么就发出一个警告信号,等待20秒后,

再通过杀死信号强行终止该process。如果process并不存在那么就忽略该登记项

once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个

登记项;当该进程死亡时,init也不重新启动该进程

process:表示启动哪个程序或脚本或执行哪个命令等


―――――――――――――――――――――――――――――�

centos 5.4 �/etc/inittab内容示例:

id:3:initdefault: # 定义默认运行级别

si::sysinit:/etc/rc.d/rc.sysinit # 系统初始化脚本

l0:0:wait:/etc/rc.d/rc 0 # 对应不同运行级别的启动脚本

l1:1:wait:/etc/rc.d/rc 1…

l6:6:wait:/etc/rc.d/rc 6

ca::ctrlaltdel:/sbin/shutdown -t3 -r Now #定义快捷键操作

# 按下快捷键3秒后重启系统

――――――――――――――――――――――――――――――



3) CentOS6/etc/inittab和相关文件

(CentOS6中,已经不再定义其他内容,进有默认开机启动流程,转用下列脚本来完成

原有执行操作)

/etc/inittab

设置系统默认的运行级别

id:3:initdefaut:

/etc/init/control-alt-delete.conf # 定义快捷键操作

/etc/init/tty.conf #tty 终端配置脚本

/etc/init/start-ttys.conf #登录脚本

/etc/init/rc.conf #运行级别配置脚本

/etc/init/prefdm.conf #定义级别5中的图形界面启动的脚本


4) /etc/rc.d/rc.sysinit

/etc/rc.d/rc.sysinit:在所有运行级别下,init 依赖/rc.sysinit进行系统初始化

作用:

(1) 设置主机名

(2) 设置欢迎信息

(3) 激活udev和selinux

(4) 挂载/etc/fstab文件中定义的文件系统

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作


5)rc 脚本

说明: rc N �> 意味着读取/etc/rc.d/rcN.d/下脚本

(服务若在指定模式下为开启,在对应级别的rc#.d 中,为S开头,反之为K开头)

(K/S后以字符顺序排列)

(目录下全部文件均为软链接,源为init.d下的对应脚本)

K*: K##*: ##运行次序;数字越小,越先运行;数字

越小的服务,通常为依赖到别的服务

S*: S##*: ##运行次序;数字越小,越先运行;数字

越小的服务,通常为被依赖到的服务

s|k 开头脚本内容示例:

for srv in /etc/rc.d/rcN.d/K*; do

$srv stop

done

for srv in /etc/rc.d/rcN.d/S*; do

$srv start

done

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

三、chkconfig命令

chkconfig命令

(设置开启 | 关闭状态后,会在对应级别中生成 s| k 开头的服务文件)

查看服务在所有级别的启动或关闭设定情形:

chkconfig [�list] [name]

添加:(可添加自编服务脚本)

1.SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)

(无需在结尾添加.sh)

2.服务脚本内容示例:

6e63376f88014baaa411a633fba108e0.jpgPHP/upload/image/20160911/1473581212185397.jpg">

#!/bin/bash

# chkconfig: LLLL nn mm

#LLLL 表示初始在哪个级别下启动, -表示都不启动

nn : 启动顺序号(建议自编服务号为较大数字)

mm : 关闭时的顺序号

3.chmod +x …..

4.chkconfig �add service_name

5.service ## start 即可测试添加服务脚本

删除:

chkconfig �del name

修改指定的链接类型

chkconfig [�level levels] service_name <on|off|reset>

�level LLLL: 指定要设置的级别;省略时表示2345

eg:

chkconfig �level 5 atd on | off


ntsysv命令 :(交互式服务调整,一次只能进入一个模式,默认为当前模式)

�level=# 可进入指定模式下调整

1d206eb76d63431d98235540f00bb615.jpgPHP/upload/image/20160911/1473581309629038.jpg">


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

四、xinetd管理服务与自定义服务

(xinetd: 超级守护进程 , 7已经取消,仅在5、6中还存在)

配置文件: /etc/xinetd.conf

瞬态( Transient)服务(非独立服务,不可独立工作)被xinetd进程所管理:

启动|关闭: 由xinetd 检查chkconfig中对应服务配置,管理其自启动状态

工作(监听): 依赖于xinetd运行,对应服务的请求,首先被xinetd代理监听,

xinetd收到请求才唤醒对应服务

chkconfig �list 中 xinetd 管理的瞬态服务项目:

1473581462615305.jpgPHP/upload/image/20160911/1473581462615305.jpg">


修改服务自启动:/etc/xinetd.d/<service>:

修改disable 即可

1473581462970469.jpgPHP/upload/image/20160911/1473581462970469.jpg">

或者使用chkconfig 开启也可以。

与libwrap.so文件链接

用chkconfig控制的服务:

chkconfig tftp on


service 命令:手动管理服务

service 服务 start|stop|restart

service �status-all

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

五、/etc/rc.d/rc.local脚本

注意:正常级别下,最后启动一个服务S99local没有链接至

/etc/rc.d/init.d一个服务脚本,而是指向了

/etc/rc.d/rc.local脚本

不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且

又想开机时自动运行的命令,可直接放置于

/etc/rc.d/rc.local文件中

/etc/rc.d/rc.local在指定运行级别脚本后运行

可以根据情况,进行自定义修改


centos 5―tty 终端配置(/etc/inittab中的内容)

1:2345:respawn:/usr/sbin/mingetty tty1

2:2345:respawn:/usr/sbin/mingetty tty2

6:2345:respawn:/usr/sbin/mingetty tty6

mingetty会自动调用login程序

x:5:respawn:/etc/X11/prefdm -nodaemon

六、破解root口令

启动菜单�》 按“a”�> 输入: 1|S |s |single �>进入单用户模式(root) ,此模式下,直接以root身份登录,

且无需输入密码,使用passwd命令即可修改密码

Centos 5,6的启动流程

Centos 5,6的启动流程

一般情况下X86架构平台的启动流程:

1.POST:Power-on Self Testing,加电自检

保证硬件的正常操作,从而能够正确的使用各种硬件

2.BootSequence(程序的启动顺序)

决定到底从何种设备加载操作系统内核;通常可选的设备包括:光驱,硬盘,U盘,网络接口;

按照给定的顺序,依次查找各个设备,第一个被找出有引导程序(BootLoader)即为本次启动要用到的设备;

Bootloader:引导程序,引导加载器

GRUB:GRand Uniform BootLoader 全球统一引导加载器;

Centos 6以前的都是

GRUB 0.x:legacy GRUB

Centos 7:

GRUB 1.x:grub2


grub提供的功能:

1.为用户提供了一个可供选择的菜单,菜单以列表的方式列举了各个可以引导启动的操作系统内核;

2.可以将用户选定内核核心文件装载到RAM中,并予以解压缩,展开之后,将系统的控制权交给内核;

3.可以提供交互式的命令行接口;

4.通过私密口令来保证菜单和内核启动属性的安全性;


3.内核

自身初始化:

1)探测所有能被谁别到的所有的硬件设备;

2)加载硬件的驱动程序,有可能要借助于ramdisk/ramfs加载驱动程序;

3)以只读的方式挂载根文件系统;

4)在根文件系统中查找并运行第一个用户空间中的应用程序:/sbin/init

4.Init

init程序:

运行级别(Run-level);为了系统的运行和维护等目的而设置的管理机制;所有的管理类操作都必须依靠shell脚本实现;

七个运行级别:

0 - 关机

1 - 单用户模式,无需密码认证,维护和调试;

2 - 多用户模式,不会启动NFS,维护模式;

3 - 完全的多用户模式,不包含图形界面,只能使用CLI;

4 - 预留级别,目前无特殊使用目的;但其设置习惯上与运行级别3保持相同;

5 - 完全多用户模式,默认激活GUI和CLI;默认使用GUI;

6 - 重启


查询当前运行级别:

# who -r

# runlevel

修改运行级别:

实时修改:

init [0-6]

永久修改:

修改init的配置文件:/etc/inittab

id:#:initdefault:


/etc/inittab文件的主要作用:

1.在整个系统初始化的过程中决定执行那些操作;

启动或关闭那些后台服务;

如何进行系统初始化;

在验证用户身份无误之后,如何为用户提供登录提示界面;

当备用电源失效或重新生效之后,如何指挥系统操作;

定义了"Ctrl+Alt+Delete"组合键被同时按下时,系统将采取的行为;


/etc/rc.d/rc.sysinit的主要作用:

1.设置主机名;

2.设置启动时的欢迎信息;

3.激活udev和SELINX;

4.挂载/etc/fstab/文件中定义的所有有效的文件系统;

5.激活swap设备;

6.检测rootfs,并重新以读写的方式挂载rootfs;

7.设置系统时间

8.根据/etc/sysctl.conf/设置内核参数;

9.激活lvm和软件RAID等高级逻辑设备;

10.加载额外的设备驱动程序;

11.完成初始化之后的清理工作;


/etc/rc.d/rc脚本的主要作用:

1.根据特定的运行级别启动或关闭对应目录中的系统服务进程;

K*:要停止的系统服务进程

S*:要启动的系统服务进程


根据for循环遍历的顺序,数字的大小将绝定脚本被执行的先后顺序;

2.rc脚本可以接受一个运行级别的数字表示作为参数;

3.有rc脚本关联的/rc.d/rc#.d中的文件其实是链接文件,其链接目标路径为:/etc/rc.d/init.d目录中的各服务管理脚本;


/etc/rc.d/rc.local

是在init程序引导用户空间进程的过程中,所执行的最后一个脚本;因此不便于或不需要写在系统服务相关的脚本中内容,但又期望可以开机运行的功能,可以直接写在此脚本中;


打印登录提示符:/sbin/mingetty $TTY

mingetty程序会调用login程序,打开虚拟终端;除了mingetty之外,诸如getty等之类的程序也可以完成此类生成虚拟控制台的功能;


如果默认的运行级别为5,则需要/etc/x11/preform脚本打卡图形用户界面终端;


无论哪个程序或脚本,最后都会给用户打印一个登录提示符;


小结:CentOS 5、6:

1.内核启动流程:

POST(BIOS) --> BootSequence(BIOS) --> Bootloader(GRUB) --> vmlinuz(initrd|initramfs) --> rootfs(ro) --> /sbin/init


2.用户空间启动流程:

/sbin/init --> /etc/inittab(/etc/init/*.conf) --> 设置默认的运行级别 --> /etc/rc.d/rc.sysinit,完成系统初始化 --> /etc/rc.d/rc,关闭或启动相应的运行级别下的各系统服务 --> Ctrl+Alt+Delete组合热键功能 --> UPS电源失效或恢复之后的操作 --> /etc/rc.d/rc.local脚本 --> 生成登录界面,打印登录提示符

今天关于CentOS6启动流程centos6启动过程的介绍到此结束,谢谢您的阅读,有关2.centos5,6启动流程、Cenos 5和Centos 6 启动流程和故障恢复、CentOS 5,6 系统启动流程详解、Centos 5,6的启动流程等更多相关知识的信息可以在本站进行查询。

本文标签: