核心文件:/boot/vmlinuz-####-release(linux内核文件)
/boot/initramfs-####-release.img(用于识别挂载根的文件系统)
模块文件:/lib/modules/####-release(启动需要的驱动程序和程序)
centos6启动流程
1.加载BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导\加载程序(grub)的BOOT文件系统 1st\1.5st
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 2nd
4.核心执行init程序,并获取默认的运行信息/etc/inittab
5.init程序执行/etc/rc.d/rc.sysinit系统初始化脚本
6.启动核心的外挂模块
7.init执行运行的各个批处理文件(scripts)/etc/rc.d/rc#.d/
8.init执行/etc/rc.d/rc#.d/99local
9.执行/bin/login程序,等待用户登录
10.登录之后开始以Shell控制主机
MBR:
446:bootloader, 64:分区表, 2:55AA
GRUB:
primary boot loader:
1st 加载MBR446
1.5st 加载扇区中文件系统驱动
secondary boot loader:
2nd 读取BOOT里面的文件 kernel:自身初始化
探测可识别到的所有硬件设备
加载硬件驱动程序(借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
/boot/grub/grub.conf 启动菜单
default=# 默认启动项
timeout=# 停留时间
splashimage= 启动菜单背景图片
hiddenmenu 默认隐藏菜单
password --md5 启动菜单密码
title 启动菜单选项
root /boot的所在硬盘分区
kernel 加载内核路径(ro:表示只读,root=:所在硬盘的UUID,quiet:不显示内核加载信息)
initrd 加载init文件
系统启动流程
init程序的类型:
SysV:init,centos5之前
配置文件:/etc/inittab
Upstart:init,centos6
配置文件:/etc/inittab,/etc/init/*conf
Systemd:systemd,Centos7
配置文件:/usr/lib/systemd/system
/etc/systemd/system
init读取初始化文件内容包括:/etc/inittab
初始运行级别 id:#:initdefault
系统初始化脚本 /ect/rc.d/rc/sysinit
对应运行级别的脚本目录 l#:#:wait:/etc/rc.d/rc #
捕抓某个关键字顺序 # Trap CTRL-ALT-DELETE
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
定义哪个模式是图形界面
id:#:initdefault
运行级别:为系统运行或维护等目的设定;0-6:7个基本
0:关机
1:单用户模式
2:多用户模式;维护模式
3:多用户模式,文本界面
4:预留级别;可同3级别
5:多用户模式,图形界面
6:重启
默认级别:3,5
切换级别:init #
查看级别:runlevel;who -r
/etc/rc.d/rc.sysinit:系统初始化脚本,内容包括
1)设置主机名
2)设置欢迎信息
3)激活udev和selinux
4)挂载/etc/fstab文件中定义的文件系统
5)检测根文件系统,并以读写方式重新挂载根文件系统
6)设置系统时钟
7)激活swap设备
8)根据/etc/syscrl.conf文件设置内核参数
9)激活lvm及software raid设备
10)加载额外设备的驱动程序
11)清理操作
/etc/rc.d/rc#.d/(软链接,指向:/etc/init.d/):决定服务开机启动与否
K开头的:开机关闭
K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖程度越低的服务
S开头的:开机启动
S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖程度越高的服务
(先数字后字母)
chkconfig命令
查看服务在所有级别的启动或关闭设定情况:
chkconfig --list name
开启或关闭服务
chkconfig --level ## name on/off ##表示级别;没定义level默认2345
添加:
chkconfig --add name
删除:
chkconfig --del name
修改指定的链接类型:
ntsysv:定义或查看开机启动服务
以/var/lock/subsys/下文件判断开机是否已启动
/etc/rc.d/rc#.d/99local 开机自动运行文件,centos7需要添加执行权限
创建服务启动脚本
1)在/etc/init.d/name下创建脚本(例子1)
2)chkconfig --add name
service --status-all 查看所有服务的当前状态
centos6:
瞬态服务(非独立服务)被xinetd进程所管理
非独立服务闲置时,xinetd代替非独立服务监听;当非独立服务使用后,监听者变回非独立服务
配置文件:/etc/xinetd.d/name
centos7:
不分独立和非独立服务,统一由systemd代替,所有服务由它监听
例子1:
服务启动脚本
#!/bin/sh
#chkconfig: 345 96 3
#description:
. /etc/init.d/functions
case $1 in
start)
[ -f /var/lock/subsys/name ] && action "name is started"
touch /var/lock/subsys/name
action "name is starting"
;;
stop)
rm -f /var/lock/subsys/name
action "name is stopped"
;;
status)
[ -f /var/lock/subsys/name ] && echo "name is starting" || echo "name is stopped"
;;
*)
echo "Usage:service name start|stop|status"
;;
esac
实验1:initramfs-3.10.0-123.9.3.el7.x86_64.img 损坏,修复
1.进入光盘Rescue模式
2.chroot /mnt/sysimage
3.mkinitrd /boot/initramfs-`uname -r`.img `uname -r`
4.sync
5.sync
6.exit
7.exit
8.reboot
实验2:vmlinuz-3.10.0-123.9.3.el7.x86_64 损坏,修复
1.进入光盘Rescue模式
2.挂载光驱mount
3.cp /run/install/repo/isolinux/vmlinuz /mnt/sysimage/boot/vmlinuz-`uname -r`
4.sync
5.sync
6.exit
7.exit
8.reboot
实验3:启动服务故障,系统无法正常启动
1.进入单用户模式
2.chkconfig name off
实验4:grub第1阶段被破坏(现象:无法识别硬盘引导)
grub第1.5阶段被破坏(现象:卡在“_”,无法进入系统)
1.进入救援模式
2.chroot /mnt/sysimage
3.grub-install /dev/sda
4.sync
或
用直接使用grub交互式命令(hd0,0表示第1个硬盘第1个分区)
grub>root (hd0,0)
grub>setup (hd0)
注意:一旦修复过grub后,/boot/grub/里面的文件都是启动必要文件
实验5:initrd与kenrnel启动顺序反了(现象:Error 19)
1.按“e”
2.按“d”
3.按“o”
4.输入“initrd /initramfs-2.6.32-696.el6.x86_64.img”
实验6:grub第2阶段被破坏(现象:开机停留在"grub>"界面)
输入:grub>kernel /vmlinuz-2.6.32-696.el6.x86_64 root=/dev/sda2 *****root后面是boot所在的父目录
grub>initrd /initramfs-2.6.32-696.el6.x86_64.img
实验7:boot文件损坏(boot是独立分区)(现象:开机停留在"grub>"界面)
1.进入救援模式
2.挂载光盘 mount /dev/sr0 mnt/cdrom
3.重新安装内核 rpm -ivh /mnt/cdrom/Pachages/kernel-2.6.rpm --root=/mnt/sysimage/ --force
4.chroot /mnt/sysimage
5.grub-install /dev/sda
6.vi /boot/grub/grub.conf
default=0
timeout=3
title linux
kernel /vmlinuz-2.6-32 root=/dev/sda2 *****如果boot不是独立分区,应写上boot的路径,root后面是boot所在的父目录
initrd /initramfs-2.6-32.img *****如果boot不是独立分区,应写上boot的路径
实验8:fstab和boot损坏 (标准分区) (现象:Error 15)
1.救援模式
2.查看分区 fdisk -l
3.逐个挂载查看分区内容,找到对应分区并创建fstab文件
mkdir /mnt/rootfs
mount /dev/sda2 /mnt/roofs
4.vi /mnt/roofs/etc/fstab *****创建分区挂载文件
/dev/sda2 / ext4 defaults 0 0 *****挂载根
/dev/sda1 /boot ext4 defaults 0 0 *****挂载boot
/dev/sda5 swap swap defaults 0 0 *****挂载swap
5.reboot
6.重新按实验7步骤操作
实验9:fstab和boot损坏 (逻辑卷) (现象:Error 15)
1.救援模式
2.lvs 查看逻辑卷分区
3.vgchange -ay 激活逻辑卷
4.lvscan 查看逻辑卷状态
5.mkdir /mnt/rootfs
6.mount /dev/VolGroup/lv_root /mnt/rootfs
7.执行实验8第三步往后的操作
实验10:init进程损坏 (现象:提醒“no job control in this shell”)
1.救援模式
2.配置IP地址
3.chroot /mnt/sysimage/
4.scp 192.168.1.1:/sbin/init /sbin/ *****从相同版本服务器复制过来
或者
1.救援模式
2.挂载光盘 mount /dev/sr0 mnt/cdrom
3.chroot /mnt/sysimage/
4.rpm2cpio /mnt/cdrom/Pachages/upstart-0.6.rpm | cpio -idv /sbin/ *****重新解包init,5版本:SysV包,7版本:Systemd