Linux系统启动流程(1)
1.开机启动顺序:POST-->BIOS-->MBR-->Kernel-->/sbin/init
POST:开机上电自检
BIOS:主要选择以哪种介质启动
MBR:找到硬盘MBR主引导记录,加载前446个字节bootloader
Kernel:启动内核,并加载调用initrd(此文件在系统安装时,存有硬盘等硬件驱动程序)
init:打开主进程init,启动/etc/inittab,/etc/rc.d/rc.sysinit等文件
2.bootloader主引导器解释
bootloader(MBR)分为LILO: LInux LOader 和 GRUB: GRand Unified Bootloader
而GRUB:分为2个阶段Stage1: 存在MBR当中
Stage1_5: 识别文件系统
Stage2: /boot/grub/* 硬盘基础访问分区
2.1./boot/grub/grub.conf文件启动设定解释
default=0 #设定默认启动的title的编号,从0开始
timeout=5 #等待用户选择的超时时长,单位是秒
splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz #grub的背景图片
hiddenmenu #隐藏菜单
password redhat #编辑grub时明文设定grub密码
password --md5 $1$Omcgl$JY881OgTYbHRD/HHGLHzK/. #编辑grub时的加密密码
title Red Hat Enterprise Linux Server (2.6.18-308.el5) #操作系统名称,可自由修改
root (hd0,0) #内核文件所在的设备;所有类型硬盘一律hd开头
kernel /vmlinuz-2.6.18-308.el5 ro root=LABEL=/ rhgb quiet #内核文件路径及内核参数
initrd /initrd-2.6.18-308.el5.img # ramdisk文件路径
password --md5 $1$Omcgl$JY881OgTYbHRD/HHGLHzK/ #启动内核时的加密密码
2.2.如果grub stage1第一阶段损坏,修复过程
方法1.当知道grub stage1损坏,但未重启系统时
grub 输入grub命令
grub> root (hd0,0) 指定硬盘上第一个分区为grub分区即boot分区
grub> setup (hd0) 指定硬盘上安装grub
方法2.: grub-install --root-directory=/或boot目录分区的父目录 指定硬盘
如:grub-install --root-directory=/ /dev/sda
2.3.如果grub stage2第二阶段损坏,重启系统后:
grub> root (hd0,0) 指定boot分区
grub> find (hd0,0)/ 按tab键看是否有kernet和initrd等文件即确认/boot分区状况
grub> kernel /vmlinuz-XXX-XXX 指定kernel文件路径
grub> initrd /initrd-XXX-XXX 指定initrd文件路径
grub> boot 重启
2.4.chroot:切换根目录
格式: chroot 根路径 [命令]
chroot /tmp/root [/bin/bash]
ldd命令:显示二进制文件所依赖的共享库
格式:ldd 二进制文件路径
chroot /bin/bash
实例:利用chroot切换根目录,至少能运行ls与cd命令
mkdir /tmp/root
mkdir /tmp/root/bin
mkdir /tmp/root/lib
cp /bin/bash /bin/ls /tmp/root/bin/
ldd /bin/bash 显示bash所依赖的库文件
ldd /bin/ls 显示ls所依赖的库文件
cp /lib/* /tmp/root/lib/ 将上面指定的库文件复制到/tmp/root/lib/下面
chroot /tmp/root/ 切换根目录
pwd 查看当前目录
ls 检查ls命令是否能执行
cd /lib 切换到lib目录
总结:切换成功,ls,cd命令都OK,由于touch没有像ls等一样把文件复制过来,所有不能执行成功
3./etc/inittab系统运行级别解释
3.1. 运行级别:0-6
0:halt 关机
1: single user mode, 相当于windows安全模式 表示有1,s,S,single
2:multi user mode, 没有 NFS 功能
3: multi user mode, 文本模式&正常模式
4:reserved 保留自定义
5: multi user mode, 图形化界面
6: reboot 重启
格式:id:runlevels:action:process
id:3:initdefault:
id: 标识符
runlevels: 运行哪个级别
action: 哪种情况下运行
process: 要运行程序
si::sysinit:/etc/rc.d/rc.sysinit
initdefault: 设定默认运行级别
sysinit: 系统初始化
wait: 等待级别切换至此级别时执行
respawn: 一旦程序终止,会重新启动
3.2.查看运行级别命令:
runlevel:
who -r
3.3查看内核release号命令:
uname -r
3.4./etc/inittab的任务:
1、设定默认运行级别;
2、运行系统初始化脚本;
3、运行指定运行级别对应的目录下的脚本;
4、设定Ctrl+Alt+Del组合键的操作;
5、定义UPS电源在电源故障/恢复时执行的操作;
6、启动虚拟终端(2345级别);
7、启动图形终端(5级别);
4./etc/rc.d/rc.sysinit文件解释
1、激活udev和selinux;
2、根据/etc/sysctl.conf文件,来设定内核参数;
3、设定时钟时钟;
4、装载键盘映射;
5、启用交换分区;
6、设置主机名;
7、根文件系统检测,并以读写方式重新挂载;
8、激活RAID和LVM设备;
9、启用磁盘配额;
10、根据/etc/fstab,检查并挂载其它文件系统;
11、清理过期的锁和PID文件;
5./etc/rc.d/init.d/*服务脚本文件 及 /etc/rc.d/rc{0-6}.d/*下以S或K开头的文件解释
5.1.查看/etc/rc.d/init.d/*的文件
# chkconfig: runlevels SS KK
当chkconfig命令来为此脚本在rc{0-6}.d目录创建链接时,
runlevels表示默认创建为S*开头的链接,
-表示没有级别默认为S*开头的链接;
除此之外的级别默认创建为K*开头的链接;
S后面的启动优先级为SS所表示的数字;K后面关闭优先次序为KK所表示的数字;
# description: 用于说明此脚本的简单功能; \, 续行
chkconfig命令:如果省略级别指定,默认为2345级别;
chkconfig --list: 查看所有独立守护服务的启动设定;
chkconfig --list 服务名称 查看指定独立守护服务的启动设定;
chkconfig --add 服务名称 添加指定的守护进程
chkconfig --del 服务名称 删除指定的守护进程
chkconfig [--level 运行级别] 服务名称 {on|off}
5.2./etc/rc.d/rc.local:系统最后启动的一个服务或脚本
一般来说简单服务或命令脚本可追加至rc.local文件
5.3.守护进程的类型:
独立守护进程:独立运行
超级守护进程,包含一个或多个瞬时守护进程:不需要关联至运行级别
典型代表为xinetd:
6.实例:创建一个独立守护进程服务脚本mylinux,系统启动之后,mylinux运行级别仅为3和5
6.1: cd /etc/rc.d/init.d/ 切换至系统脚本守护进程目录
6.2: vim mylinux 增加如下自定义脚本
#!/bin/bash
#以下红色两段必须要写,否则当添加至守护进程时,提示此脚本进程不支持chkconfig
# chconfig: 345 66 33
# description: mylinux is text service.
STATUS() {
if [ -e /var/lock/subsys/mylinux ]; then
echo "Running"
else
echo "Stop..."
fi
}
case $1 in
start)
echo "Starting"
touch /var/lock/subsys/mylinux
;;
stop)
echo "Stopping"
rm -rf /var/lock/subsys/mylinux &> /dev/null
;;
restart)
echo "Restarting"
;;
status)
STATUS
;;
*)
echo "`basename $0` {start|stop|restart|status}"
;;
esac
6.3: chkconfig --add mylinux 添加mylinu守护进程
chkconfig mylinux off 关闭mylinux守护进程所有运行级别
chkconfig --level 35 mylinux on 仅开启mylinux守护进程运行在级别3和5
chkconfig --list mylinux 查看mylinu守护进程运行级别开关情况