centos6开机启动流程理论

centos6开机启动流程理论篇

硬件启动流程

硬件启动流程 - 1)打开电源

硬件启动流程 - 2)BIOS

BIOS:Basic Input and Output System,主板ROM(只读)上内置的一段程序,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和程序启动自举程序等。

RAM:CMOS互补金属氧化物半导体,保存各项参数的设定。RAM掉电易失,因此主板中有电池供电,使得RAM保存各项参数设定不丢失。

BIOS - ①post

POST:Power-On-Self-Test,加电自检是BIOS的主要功能部分。主要完成对CPU、主板、内存、硬盘、键盘、接口等硬件的检查

BIOS - ②确定启动设备

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

系统启动自举程序:通过约好的固定位置寻找操作系统。根据BIOS设置的启动顺序,检查驱动器(硬盘,光盘,U盘,网络)

a、如果硬盘是启动项,读取硬盘第一个扇区(MBR,512字节)到内存
b、控制区转给MBR中的BootLoader

BIOS - ③MBR

(MBR的前446字节)BootLoader:引导加载器,专用于引导操作系统

  • Windows:ntloader,仅是启动OS
  • Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
       LILO:LInux LOader
       GRUB: GRand Unified Bootloader
         GRUB 0.X: GRUB Legacy, GRUB2(centos7开始使用GRUB2)

GRUB引导阶段

centos6的grub是0.97版本,grub的核心功能:启动时找到操作系统;可以用来引导启动各种操作系统。

[root@centos6 ~]#rpm -ql grub
/boot/efi/EFI/redhat
/boot/efi/EFI/redhat/grub.efi
/boot/grub              (文件夹)
/sbin/grub
/sbin/grub-crypt       (生成grub口令,sha512加密)
/sbin/grub-install     (生成/boot/grub下的对应的文件grub.conf文件除外)
/sbin/grub-md5-crypt   (生成grub口令,md5加密)
/sbin/grub-terminfo

GRUB - stage1

stage1 :大小512字节 - 对应于MBR中BootLoader中的内容(前446字节)

GRUB - stage1.5

stage1_5: mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

GRUB - stage2

stage2:磁盘分区(/boot/grub/),进入/boot后先进入grub目录,通过grub/grub.conf文件定位内核文件名

/boot/grub/grub.conf文件的格式
此文件表示boot为根
    root (hd0,0) --定义根,hd0表示第一个硬盘,0表示第一个分区,即sda1
        因此内核文件表示的路径:
    kernel /vmlinuz..内核文件文件名   内核参数 root=真正硬盘的根
        设置内核参数时quiet作用:内核加载此参数不显示,硬件识别过程不显示
        若/boot未单独分区时:kernel /boot/vmlinuz..内核文件

注意: kernel 要先于initrd 被加载因此文件格式顺序如下:

default=#: 设定默认启动的菜单项;落单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径
password [--md5] STRING: 启动菜单编辑认证
hiddenmenu:隐藏菜单
title TITLE:定义菜单项“标题”, 可出现多次
root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件
password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证

当yum仓库被禁用时,临时启用yum仓库:
yum --enablerepo=elrepo-kernel install 

内核引导阶段

思考:内核加载之后首先寻找 / ,但是内核文件中不具备加载根文件系统的驱动模块,而根文件系统的驱动模块存放在(locate ext4.ko:/usr/lib/modules/2.6.32-754.el6.x86_64/kernel/fs/ext4/ext4.ko),而此目录却存放于 / 之上,如何解决根文件系统的驱动模块?

解决:initramfs-2.6.32-754.el6.x86_64.img
此文件模拟了 / ,同时还有各个文件系统的驱动模块。加载内核之后,会读取ramdisk文件然后解压,加载至内核,这样就构成了一个小型的Linux,解决了根文件系统的驱动模块就可以去加载真正的 / 。

内核的组成部分:

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


ramdisk:辅助的伪根系统
  CentOS5:/boot/initrd-VERSION-release.img
  CentOS6,7:/boot、initramfs-VERSION-release.img


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

内核引导阶段

①探测可识别到的所有硬件设备
②加载硬件驱动程序(借助于ramdisk加载驱动)
③以只读方式挂载根文件系统
④运行用户空间的第一个应用程序:/sbin/init

系统初始化阶段

运行用户空间的第一个应用程序:/sbin/init后读取其配置文件

读取/sbin/init程序的配置文件/etc/inittab文件,其中/etc/inittab/文件中的定义:centOS6将配置文件拆成多个文件

配置文件/etc/inittab文件

id:runlevel:action:process

id:一行的唯一标识,什么都行,不影响配置生效
runlevels:定义了操作所使用的运行级别
action:指定了要执行的特定操作
   wait: 切换至此级别运行一次
   respawn:此process终止,就重新启动之
   initdefault:设定默认运行级别;process省略
   sysinit:设定系统初始化方式
process:定义了要执行的进程

开机启动的模式:

0关机
1单用户模式(root自动登录), single, 维护模式
2多用户模式,启动网络功能,但不会启动NFS;维护模式
3多用户模式,正常模式;文本界面
4预留级别;可同3级别
5多用户模式,正常模式;图形界面
6重启

系统初始化阶段 - 1)/etc/inittab

id:3:initdefault:

定义系统默认开机启动模式

系统初始化阶段 - 2)/etc/rc.d/rc.sysinit

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

(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作

系统初始化阶段 - 3)加载开机启动的服务

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

/etc/rc.d/rc#.d 根据运行级别启动对应的/etc/rc.d/rc#.d目录下的服务

S开头 start
K开头 stop

/etc/rc.local 加载用户自定义服务

/etc/inittab 中的其他选项:

ca::ctrlaltdel:/sbin/shutdown -t3 -r now
    ctrl+alt+del 换机快捷键,建议禁用,防止误操作
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
    断电时保证系统正常关机
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
    一定时间内掉电又来电时取消关机

1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
...<登录终端>

x:5:respawn:/etc/X11/prefdm -nodaemon 
    <启动图形界面>

启动终端

根据运行级别启动登录终端

图形终端 runlevel 5
字符终端 执行/sbin/mingetty

验证登录:

*/etc/nologin(默认没有)此文件存在,禁止普通用户登录名单,空文件禁止所有普通用户登录
/etc/usertty 对文件作出附近访问限制,不存在该文件没有限制
/etc/securetty:登记的终端才允许使用,没有文件任何终端都可以登录
/etc/issue 登录前提示信息
/etc/passwd && /etc/shadow:验证用户和口令

登录成功:

屏幕输出:
/var/log/lastlog 输出最近一次登录信息
/var/spool/mail/用户名 检查用户是否有新邮件
/etc/motd/ 登录后提示信息

加载环境变量: /etc/profile --> .bash_profile --> .bash_login --> .profile

centos6服务开机启动设置方法

方法一 - 开机启动服务脚本

服务启动脚本放置于/etc/rc.d/init.d/目录中,其中/etc/rc.d/rc#.d/K* 或者/etc/rc.d/rc#.d/S* 是etc/rc.d/init.d/目录下对应的软链接

  • chkconfig命令:更新和查询系统服务的运行级别信息

  • chkconfig可以将/etc/rc.d/init.d/目录下的服务脚本添加至/etc/rc.d/rc#.d/

  • service命令可以调用/etc/rc.d/init.d/目录下的服务脚本

# chkconfig:   345 95 5   (-表示任何模式均不开机启动)
# description:  
其中服务脚本需要写明上面两行 (95表示开机启动序号S95  5表示K5)
其中开机启动次序为ls  /etc/rc.d/rc#.d/S* 的次序,
手动添加的服务脚本应该选择考虑开机服务的依赖性,使用系统中未使用的数字编号

[root@centos6 init.d]#chkconfig --add testsr.sh 
[root@centos6 init.d]#chkconfig --level 345 testsr.sh on
[root@centos6 init.d]#chkconfig --list | grep testsr.sh
testsr.sh      	0:off	1:off	2:off	3:on	4:on	5:on	6:off
[root@centos6 init.d]#ll /etc/rc.d/rc*.d/*test*
lrwxrwxrwx 1 root root 19 Jul 21 12:11 /etc/rc.d/rc0.d/K03testsr.sh -> ../init.d/testsr.sh
lrwxrwxrwx 1 root root 19 Jul 21 12:11 /etc/rc.d/rc1.d/K03testsr.sh -> ../init.d/testsr.sh
.....

方法二 - 在/etc/rc.d/rc.local中添加需要启动的服务

  • 如果开机有需要启动的服务/命令/脚本等可以添加在rc.local文件中,Centos7也支持此功能(默认7上rc.local没有执行权限)。
在2345模式中均是S开头,/etc/rc.d/rc.local不是服务脚本,此脚本将在最后执行。
[root@centos6 ~]#ll /etc/rc.d/rc*.d/*local
lrwxrwxrwx. 1 root root 11 Jul 17 15:53 /etc/rc.d/rc2.d/S99local -> ../rc.local
lrwxrwxrwx. 1 root root 11 Jul 17 15:53 /etc/rc.d/rc3.d/S99local -> ../rc.local
lrwxrwxrwx. 1 root root 11 Jul 17 15:53 /etc/rc.d/rc4.d/S99local -> ../rc.local
lrwxrwxrwx. 1 root root 11 Jul 17 15:53 /etc/rc.d/rc5.d/S99local -> ../rc.local 

xinetd管理的服务

瞬态服务:某些不频繁使用的服务,此类服务设为开机启动占用资源,但是偶尔有可能又会被人使用,因此xinetd服务代理启动,根据需要唤醒对应的服务,又称非独立服务。

  • xinetd服务监控瞬态服务,瞬态服务并不启动,当有访问时,xinetd将访问的服务唤醒,提供服务。xinetd称为超级守护进程。

  • /etc/xinetd.d/此目录下为xinetd服务监控的服务的配置文件

telnet 服务:监听端口tcp:23
    ~]#yum install telnet-server -y
    ~]#chkconfig --list
 ......   
    xinetd based services:
    .....
	rsync:         	off
	tcpmux-server: 	off
	telnet:        	off <off 表示xinetd服务也不能激活>
    ~] chkconfig  telnet on  
        <也可以使用修改配置文件方式修改/etc/xinetd.d/目录下对应的服务文件>

~]#lsof -i :23
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
xinetd  2674 root    5u  IPv6  14686      0t0  TCP *:telnet (LISTEN)
~]#ss -tnlp
users:(("xinetd",2674,5))  :23  23端口由xinetd监控
    有人访问时,唤醒Telnet服务



  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值