- CentOS 5和6的启动流程
- 服务管理
- Grub管理
一.Linux组成
(1)Linux: kernel+rootfs——内核及其他应用程序组成
ldd /bin/ls——查看执行的命令是否调用了静态库或是动态库
kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安
全功能
rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件
(2)内核设计流派:
单内核(monolithic kernel):Linux 把所有功能集成于同一个程序
ls /boot
微内核(micro kernel):Windows, Solaris 每种功能使用一个单独子系统实
(3)内核
- Linux内核特点: 支持模块化:.ko(内核对象)——驱动模块
如:文件系统,硬件驱动,网络协议等 支持内核模块的动态装载和卸载
组成部分: 核心文件:/boot/vmlinuz-VERSION-release- ramdisk:辅助的伪根系统 ——存放在该initramfs-2.6.32-696.el6.x86_64.img系统文件中
作用:解决开机启动的中间顺序问题。
在开机启动时,首先要进入/boot中,来启动vmlinuz-VERSION-release,
但是由于/boot的文件系统类型是ext4,它的驱动模块存放在/lib/modules/2.6.32-696.el6.x86_64/kernel/fs/ext4/ext4.ko,而如果想要调用该库文件就必须要进入内核进行加载,所以进入了一个死循环阶段。
因此加入ramdisk来解决该问题,在initramfs-2.6.32-696.el6.x86_64.img文件中,存有ext4.ko驱动,这样就可驱动/boot/,来加载内核,从而进入根目录,执行接下来的动作- CentOS 5: /boot/initrd-VERSION-release.img
- CentOS 6,7: /boot/initramfs-VERSION-release.img ——"initramfs-2.6.32-696.el6.x86_64.im"
模块文件:/lib/modules/VERSION-release
locate ext4.ko
实现功能模块化,将硬件的相关功能功存放在模块中,而不是内核中
二.CentOS6启动流程
- 启动顺序
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程序,等待用户登录 1
0.登录之后开始以Shell控制主机
(1) POST
- Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。
负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接 口、键盘、CD-ROM光驱等硬件情况的检测。
按顺序检查由哪个硬件来驱动引导计算机的开启:硬盘、u盘、光盘、网卡都可以来引导计算机的开启,一般情况下用硬盘来引导- ROM:BIOS,Basic Input and Output System,保存着有关计 算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和 系统启动自举程序等。
- RAM:CMOS互补金属氧化物半导体,保存各项参数的设定 按次序查找引导设备,第一个有引导程序的设备为本次启动设备
bootloader: 引导加载器,引导程序
centos6——
windows: ntloader,仅是启动OS
Linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内 核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把 系统控制权移交给内核 LILO:LInux LOader GRUB: GRand Unified Bootloader GRUB 0.X:
GRUB Legacy, GRUB2
centos7——
(2)MBR
第一阶段
这一部分的grub驱动无法驱动/boot,因为它的文件类型是ext4,其驱动模块 etx4.ko的大小为633k
一部分grub文件存放在MBR的前446字节中,用来驱动——bootloader
,
所以无法驱动。- 第1.5阶段
在MBR中的512字节后续空间中,存在一个1.5阶段,来解决ext4.ko的驱动问题,也就说,先通过grub来解决挂载/boot的问题,然后进入下一阶段来解决挂载根的问题第2阶段
在第1.5阶段加载内核后,进入该阶段来挂载根,cat grub.conf
根的启动文件系统程序存在于initramfs-2.6.32-696.el6.x86_64.img这个文件中,而该文件系统又存在于/boot 中,也就是说先启动/boot,才能启动根。
(3)ramdisk:
- 内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件 访问,并加载相应的硬件驱动
ramdisk --> ramfs 提高速度 ——该方式直接访问文件体系统上的数据,而不需要先进入磁盘中,再访问文件系统
CentOS 5: initrd ——模拟磁盘
工具程序:mkinitrd
CentOS 6,7: initramfs ——模拟文件系统
工具程序:mkinitrd, dracut——用来修复initramfs文件
rm -f initramfs-2.6.32-696.el6.x86_64.img ——删除该文件
或者删除直接重启,进入就救援模式来修复
mkinitrd initramfs-2.6.32-696.el6.x86_64.img——修复该文件
系统初始化: POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) -> init(systemd)
二.系统启动流程
(一)init程序的类型:
- SysV: init, CentOS 5之前
配置文件:/etc/inittab
*Upstart: init,CentOS 6
配置文件:/etc/inittab, /etc/init/.conf
默认模式可以更改,将5改变成其他数字,那么开机就会进入修改后的模式中。
**Systemd:systemd,
CentOS 7 配置文件:/usr/lib/systemd/system /etc/systemd/system
(二)启动流程
/sbin/init CentOS6之前
5:多用户模式,正常模式;图形界面 ——默认开机会进入该模式下,但也可以手动修改
运行级别:为系统运行或维护等目的而设定;0-6:7个级别
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
例如将5改成3,那么开机就会自动进入3模式,也就是字符界面模式
6:重启 ——如果将默认模式改为6,那么开机机会重启,始终无法进入界面。
修复方案时:在重启机器时,按a键进入修改模式,然后输入1进入单用户模式,打开配置文件——/etc/inittab,将默认模式改回5或3模式,然后init3或5重新进入界面
默认级别: 3, 5
切换级别:init # ——在图形界面中输入init 3就会进入字符界面
查看级别:runlevel ; who -r
(三)init初始化
(1)init读取其初始化文件:/etc/inittab
(2)初始运行级别(RUN LEVEL)
(3)系统初始化脚本
(4)对应运行级别的脚本目录
(5)捕获某个关键字顺序
(6)定义UPS电源终端/恢复脚本
(7)在虚拟控制台生成getty
(8)在运行级别5初始化X11
(四)CentOS 5的inittab文件
配置文件:/etc/inittab
每一行定义一种action以及与之对应的process id:runlevel:action:process
- action:
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之 initdefault:设定默认运行级别;process省略 sysinit:设定系统初始化方式,此处一般为指定 /etc/rc.d/rc.sysinit ca::ctrlaltdel:/sbin/shutdown -t3 -r now :在字符界面中,按以上三个键会重启机器
id:3:initdefault:默认进入3模式
si::sysinit:/etc/rc.d/rc.sysinit:开机会先运行该初始化脚本,无论在哪个模式,都会先运行脚本
l0:0:wait:/etc/rc.d/rc 0——进入0模式,就会运行rc0.d脚本
l1:1:wait:/etc/rc.d/rc 1——进入1模式,就会运行rc1.d脚本
l6:6:wait:/etc/rc.d/rc 6——进入6模式,就会运行rc6.d脚本
(五)CentOS 6 /etc/inittab和相关文件
- /etc/inittab 设置系统默认的运行级别 id:3:initdefault:
示例: 破解CentOS5和6的root口令
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
或者重启机器,在开机界面进入单用户模式,就可以直接进入界面,相当于破解了root密码,登陆后可以通过passwd直接修改新的密码,破解了原来的root密码,这种方法无法通过远程来实现
(六)启动流程顺序
- /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) 清理操作
说明:
rc N --> 意味着读取/etc/rc.d/rcN.d/
K: K##:##运行次序;数字越小,越先运行;数字 越小的服务,通常为依赖到别的服务
S: S##:##运行次序;数字越小,越先运行;数字 越小的服务,通常为被依赖到的服务
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
K与S的排列顺数:数字的优先级高于字母,注意按数字排列最大为99,而不是100
(七)chkconfig命令
chkconfig命令
查看服务在所有级别的启动或关闭设定情形: chkconfig [--list] [name]
添加: SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
修改指定的链接类型 chkconfig [--level levels] name <on|off|reset> --level LLLL: 指定要设置的级别;
chkconfig --add name
删除: chkconfig --del name
省略时表示2345 ——chkconfig --level atd on,不写模式,自动默认开启2345模式
ntsysv命令
例子:
chkconfig --level 5 atd off——关闭5模式的atd功能
此时查看ls K*
重新开启——chkconfig --level 5 atd on
ls S*
小练习
在/etc/init.d中编辑一个服务
vim testsrv
1 #!/bin/bash
2 #chkconfig:2345 96 07——必须写明,2345代表在这些模式下,开启testsrv功能,96代表开启编号为96 07代表关闭时的编号,相当于创建了一个软连接
3 #description service testsrv 在五中必须加入描述,六中可写可不写
4 . /etc/init.d/functions——调用脚本
5 case $1 in
6 start)
7 touch /var/lock/subsys/testsrv
8 action " testsrv is start..." :
9 ;;
10 stop)
11 rm -f /var/lock/subsys/testsrv
12 action "testsrv is stopped" /bin/true
13 ;;
14 restart)
15 rm -f /var/lock/subsys/testsrv
16 action "testsrv is stopped " /bin/true
17 touch /var/lock/subsys/testsrv
18 action "testsrv is start..." :
19 ;;
20 status)
21 [ -f /var/lock/subsys/testsrv ] && echo "testsrv is running"|| echo "testsrv is stopped"
22 ;;
23 *)
24 echo "usage : testsrv start|stop|restart|status"
25 ;;
26 esac
写完脚本后,通过chkconfig --add testsrv 加入列表中
删除选项——chkconfig --del testsrv
(八)xinetd服务
servce 命令:手动管理服务
service 服务 start|stop|restart service --status-all
瞬态(Transient)服务被xinetd进程所管理
进入的请求首先被xinetd代理 ,它只是监听,并不是代替工作,唤醒非独立文件后,由非独立文件来进行工作
配置文件:
/etc/xinetd.d/<service> 与libwrap.so文件链接
/etc/xinetd.conf——会影响所有的非独立文件,属于总的配置服务
用chkconfig控制的服务: chkconfig tftp on——开启该服务
或者在 vim /etc/xinetd.d/tftp 将disable=no 改为yes,来开启服务
修改之后通过service xinetd testart 来是修改文件生效
注意:正常级别下,最后启动一个服务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在指定运行级别脚本后运行 •
可以根据情况,进行自定义修改