1、centos5,6启动流程
centos系统启动流程
linux系统的组成部分:内核+根文件系统
内核:进程管理,内存管理,网络协议栈,文件系统,驱动程序,安全功能
运行的系统环境可分为两层:内核空间,用户空间
用户空间:应用程序(进程或线程)
内核空间:内核代码(系统调用)
内核设计流派:
单内核设计:把所有功能集成与同一个程序。 linux
微内核设计:每种功能使用一个单独的子系统实现。window,solaris
linux内核特点:
(1)支持模块化:支持模块运行时动态装载或卸载。 .ko(kernel object,/lib/mudules/)
(2)组成部分:
核心文件:/boot/vmlinuz-version-release ,内核安装多个,会有多个核心文件。
ramdisk:辅助的伪根系统CentOS 5: /boot/initrd-VERSION-release.img,CentOS6,7: /boot/initramfs-VERSION-release.img
(内核加载完成后,需要加载跟,必须加载/lib/modules/下驱动,所以要将伪根(initramfs-2.6.32-642.el6.x86_64.img)编译进内核。initrd变成initramfs,就是避免双缓存,从而提升速度的。centos6可以通过:mkinitrd initramfs-`uname -r`.img `uname -r`创建)
模块文件:/lib/modules/version-release ,模块如,文件系统,网络等等
centos系统(mbr类的)的启动流程:
(1) POST:Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘、CD-ROM光驱等硬件情况的检测。
ROM:BIOS,Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自 检程序和系统启动自举程序等。
RAM:CMOS互补金属氧化物半导体,保存各项参数的设定
(2) bootloader: 引导加载器,引导程序,按次序查找引导设备,第一个有引导程序的设备为本次启动设备bootloader.
widows:ntloader
linux:功能丰富,提供菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
LILO: linux loader (手机上跑的)
GRUB: GRandUnified Bootloader :(1)GRUB 0.X :GRUB Legacy (2) GRUB 1.X :GRUB2
MBR: 512bytes,446bytes:bootloader,64bytes:fat(各分区信息),2:bytes:55aa有效信息。
dd if=/dev/sda of=/root/mbr bs=1 count=512; hexdump -C -v /dev/sda可以查看前512字节
GRUB:
bootloader:1st stage
partitionfilesystem dirver ,1.5 stage,为bootloader后,/dev/sda 2-30个扇区(sector)
partitions : /boot/grub 2nd stage , grub.conf —>root=uuid为根的分区
(3)kernel加载内核
自身初始化:(1)探测可识别到的所有硬件设备
(2)加载硬件驱动程序:(有可能会借助于randisk加载驱动
内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk–> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut initramfs-2.6.32-642.el6.x86_64.img
)
(3) 以只读方式挂载根文件系统;
(4) 运行用户控件的第一个应用程序:/sbin/init
init程序的类型:
centos 5: sysV init ,配置文件: /etc/inittab
centos 6 : upstart , 配置文件 : /etc/inittab(为了兼容5遗留的) , 更主要的是/etc/init/*.conf
centos 7 : systemd ,配置文件: /etc/systemd/system/
系统初始化流程(内核级别):post–>BootSequence(bios)–>Bootloader(mbr)–>kernel(借助ramdisk加载根文件系统)–>rootfs(readonly)–>/sbin/init
/sbin/init centos
运行级别 ( /etc/inittab ) :为系统运行或维护等目的而设定;0-6: 7个级别
0:关机 1:单用户模式(root自动登录), single, 维护模式 (开机–>esc–>a–>1–>进去系统–>修改密码)
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式 3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别 5:多用户模式,完全功能模式;图形界面 6:重启
默认级别:3, 5
切换级别:init#。 关机:init 0 字符操作界面:init 3 进入图形界面:init 5 重启系统:init 6
查看级别:runlevel; who -r
centos5,6启动(已redhat5.8为例)
配置文件:/etc/inittab
每行定义一种action以及与之对应的process
action:walt:等待切换至此任务所在的戒备时只需一次
respawn:次任务终止时,就自动冲洗启动之
initdefault:设定默认运行级别,此时,process省略,如上图
sysinit:系统初始方式,此处一般为只读/etc/rc.d/rc.sysinit脚本
例如:
id:3:initdefault:
si : sysinit :/etc/rc.d/rc.sysinit
lo:3:wait:/etc/rc.d/rc 3
意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务
K* : 要停止的服务; K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,然后关闭被依赖的
S*:要启动的服务,数字越小,越是优先启动,被依赖的服务先启动,而依赖的服务后启动。
rc脚本:接受一个运行级别数字为参数
脚本框架:
for srv in /etc/rc.d/rc$.d;do for srv in /etc/rc.d/rc#.d;do
$srv stop $srv start
done done
/etc/init.d/*(/etc/rc.d/init.d/*)目录为服务脚本 执行方式:
#/etc/rc.d/init.d/srv_scripts {start|stop|restart|status}
# service srv_scripts {start|stop|restart|status}
/etc/rc.d/initd/目录手动添加程序服务后,可用chkconfig创建运行级别
/etc/rc.d/initd/目录脚本格式
chkconfig命令 :管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;
chkconifg 服务 –add:服务受chkconfig控制
chkconfig 服务 –del : 服务不受chkconfig控制
chkconfig –list :查看各运行级别下服务启动情况
chkconfig –list 特定服务 :查看特定服务各运行级别下服务启动情况
修改指定的连接类型
chkconfig [–level levels] name <on| off| reset> (–level levels):为指定的运行级别,如果不指,则默认为2,3,4,5
rc.local: 开机就执行的脚本,可以将开机需要执行的命令放入/etc/rc.d/rc.local文件,这个文件在
rc2.d,rc3.d,rc4.d,rc5.d目录中,有对应的软连接,而且数字是最后的
注意:正常级别下,最后启动的一个服务S99local没有连接至/etc/init.d下的摸个脚本,而是连接至/etc/rc.d/rc.local的脚本,
不变或不需要写为服务脚本的程序期望能开机自动运行时,直接放在与此脚本文件中即可。
tty1:2345 :respawn:/usr/sbin/mingetty tty6 启动虚拟终端的
(1)mingetty会调用login程序
(2)打开虚拟终端的程序除了mingetty之外,还有诸如getty等;
系统初始化脚本:/etc/rc.d/rc.sysinit
(1)设置主机名
(2)设置欢迎信息
(3)激活udev和selinux
(4)挂载/etc/fstab文件中定义的所有文件系统。
(5)检查根文件系统,并以读写方式重新挂载根文件系统
(6)设置系统时钟
(7)根据/etc/sysctl.conf文件的设置,来设定内核参数。
(8)激活lvm及软raid设备
(9)激活swap设备
(10)加载额外设备的驱动程序
(11)清理操作
总结(用户控件的启动流程) :/sbin/init(/etc/inittab)
设置默认运行级别–>运行系统初始化脚本,完成系统初始–>关闭对应级别下面要停止的服务,启动对应级别下需要开的服务–>设置登录终端–>启动图形终端
centos6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。
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控制主机。
centos6启动
init程序:upstart,单依然为/sbin/init,其配置文件/etc/init/*.conf,/etc/inittab(仅用于定义默认运行级别)
/etc/init/rc.conf init-system-dbus.conf
注意:*.conf为upstart风格的配置文件
centos7启动
init程序:systemd,配置文件/usr/lib/systemd/system/*, /etc/systemd/system/*
systemctl {start|stop|status|restart} 服务[.service] [.service]可省
完全兼容sysV脚本机制;因此service命令依然可用
centos5,6破解口令
(1)开机按e,进入grub界面
(2)在quiet后写1,按回车键,进入single模式
(3)进入系统后修改root密码,在reboot即完成密码修改。
1、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”
[root@localhost ~]# chmod u+x cpmessage.sh
[root@localhost ~]# crontab -l
* * * * 0,2,4 /root/cpmessage.sh
[root@localhost ~]# cat /root/cpmessage.sh
#!/bin/bash
#auther:xiong
cp /var/log/messages /logs/message-`date +%Y%m%d`
2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
[root@localhost ~]# crontab -l
* */2 * * * /root/cpmeminfo.sh
[root@localhost ~]# cat cpmeminfo.sh
#!/bin/bash
#auther:xiong
cat /proc/meminfo | grep -E "S|M" >> /tmp/meminfo.txt
[root@localhost ~]#
原创文章,作者:maoxiong,如若转载,请注明出处:http://www.178linux.com/44766