想了解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的启动流程吧。
第一步、硬件启动阶段
简单说一下这一步的流程:打开电源;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启动流程
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
文字描述
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)----->寻找第一个可启动设备
2.读取GRUB(主引导程序)----->读取第一个可启动设备的第一个扇区
- primary boot loader:
1---stage1)MBR 446 stage1
2---stage1.5 )识别相应的文件系统,从而加载stage2文件-----stage1与stage2的桥梁
- secondary boot loader
- 2---stage2)引导菜单 /boot/grub/grub.conf
- 2---stage2)引导菜单 /boot/grub/grub.conf
第1和第2总结
- BIOS将控制权交给硬盘的主引导区,即MBR
- MBR中的bootloader(stage1)通过内置的地址加载stage1_5
- bootloader通过stage1_5的内容,将分区中的stage2加载
- stage2此时就可以在文件系统中将grub.conf文件加载,让用户看到选项界面。
3.执行内核文件:/boot/vmlinuz-VERSION-release
4.加载伪根系统:/boot/initramfs-VERSION-release.img
为挂载/提供模块
5.以只读方式挂载根文件系统(mount /)
6.运行第1个应用程序(用户空间),初始化
/sbin/init(变成一个用户进程)根据/etc/inittab配置文件来执行相应的脚本进行初始化
7.init执行系统初始化脚本:/etc/rc.d/rc.sysinit
8. init执行指定运行级别的脚本(停止类)
/etc/rcN.d/K*(按顺序停止每个服务)
9. init执行指定运行级别的脚本(开始类)
/etc/rcN.d/S*(按顺序开始每个服务)
10.在2、3、5模式下会执行的脚本
/etc/rc.d/rc.local
11.等待用户登录
/sbin/mingetty
1)命令行登录
2)图形化登录
***
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 系统启动流程详解
一、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 (系统安装之时才会生成)
PHP/upload/image/20160911/1473579988883551.jpg">
=============================================================================================================
centos 6.8-initramfs-2.6.32-642.el6.x86_64.img 简析:
PHP/upload/image/20160911/1473580017765649.jpg">
(initramfs-2.6.32-642.el6.x86_64.img 以gzip格式压缩,解压时候,需要在尾部添加.gz后缀)
解压后:
PHP/upload/image/20160911/1473580050761893.jpg">
使用cpio 解压: ( cpio -id < initramfs-2.6.32-642.el6.x86_64.img.cpio)
PHP/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启动流程
PHP/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.服务脚本内容示例:
PHP/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=# 可进入指定模式下调整
PHP/upload/image/20160911/1473581309629038.jpg">
=====================================================================================================================================
四、xinetd管理服务与自定义服务
(xinetd: 超级守护进程 , 7已经取消,仅在5、6中还存在)
配置文件: /etc/xinetd.conf
瞬态( Transient)服务(非独立服务,不可独立工作)被xinetd进程所管理:
启动|关闭: 由xinetd 检查chkconfig中对应服务配置,管理其自启动状态
工作(监听): 依赖于xinetd运行,对应服务的请求,首先被xinetd代理监听,
xinetd收到请求才唤醒对应服务
chkconfig �list 中 xinetd 管理的瞬态服务项目:
PHP/upload/image/20160911/1473581462615305.jpg">
修改服务自启动:/etc/xinetd.d/<service>:
修改disable 即可
PHP/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的启动流程
一般情况下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的启动流程等更多相关知识的信息可以在本站进行查询。
本文标签: