linux系统:
kernel+rootfs(程序和glibc)
支持模块化 ko 内核对象
核心文件
cpio -tv 预览io文件
- ramdisk 辅助的伪根系统
- initramfs-3.10.0-862.el7.x86_64.img #安装os生成
mkinitrd /boot/initramfs-`uname -r`.img `uname -r
- vmlinuz-3.10.0-862.el7.x86_64
- lib/modules/ver-release
启动流程
1.加点自检
2.读取第一个启动设备的mbr的引导加载grub的启动信息
3.加载核心操作系统的核心信息,解压缩,尝试驱动硬件
4.核心执行init程序并获取默认的运行信息
5.init程序执行/etc/rc.d/rc.sysinit文件
6.启动核心的外挂模块
7.init运行的各个批处理文件
8.init执行/etc/rc.d/rc.local
9.执行/bin/login,等待用户登录
10.登录后开始以shell控制主机
grub功能
提供选择菜单加载用户指定内核,把内核专家内存 解压展开,并把系统控制权交给内核
-
grub0.x primary bootloader 446里面
-grub 1.5 mbr扇区后面,存放文件系统驱动,必须识别文件系统驱动—>boot对应的文件系统驱动
/dev/sda1 xfs 1014M 142M 873M 14% /boot
-
grub 2 /boot/grub 分区
-
总结:
stagel :mbr
stage1.5 :mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统
stage2 :磁盘分区/boot/grub/
-
kernel
探测可识别到的所有硬件设备
加载硬件驱动程序
ramdisk识别根文件系统
以只读方式挂载根文件系统
运行用户空间的第一个应用程序 /sbin/init
救援-initramfs
initramfs-3.10.0-862.el7.x86_64.img 文件丢失
- 1.光盘引导
- 2.救援模式
- 3.chroot /mnt/sysimage #切换根文件系统
- 4.cd /mnt/sysimg/boot
- - 5 生成initramfs
mkinitrd /boot/initramfs-`uname -r`.img `uname -r
exit
exit
sync
reboot
救援-vmlinux
1.光盘引导
2.救援模式
3.cp run/media/repo/vmlinuz-3.10.0-862.el7.x86_64 /mnt/sysimage/vmlinuz-``uanme -r
系统初始化流程
post(开机自检)---bios--bootloader(MBR)--kernel(ramdisk)----rootfs[挂载根文件系统(只读)]---init(systemd)
运行级别:
为了系统的运行或维护等目的而设定的机制, 0-6:7个级别
0 关机 shutdown
1 单用户模式–无须认证,维护模式 root用户
2 多用户模式 带网络功能但不会启动nfs
3 多用户模式 正常完全模式–只会启动shell不启动桌面
4 预留模式
5 多用户模式 完全功能模式,会启动图形界面
6 重启模式
kernel初始化
1.设置主机名
2.设置欢迎信息
3.激活udev和selinux
4.挂载/etc/fstab文件定义的文件系统
5.检查根文件系统,并以读写方式重新挂载
6.设置系统时钟
7.激活swap
8.根据/etc/sysctl.comf文件设置内核参数
9.激活lvm和raid
10.加载额外的设备驱动
11.清理
rc脚本
意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本
k*:要停止的服务 k##* 优先级 数字越大 被依赖的服务先关闭
s*:要启动的服务 s##* 优先级 数字越小 被依赖的服务先启动
rc脚本:接受一个运行级别的参数
[root@localhost ~]# ls /etc/rc.d/
init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local
脚本框架
for srv in /etc/rc.d/rc#.d/k*;do
$srv stop
done
for srv in /etc/rc.d/rc#.d/s*;do
$srv start
done
init
配置文件 /etc/inittab
/etc/rc.d/rc.sysinit 初始化
/etc/init.d/* (/etc/rc.d/init.d/*)脚本执行方式
chkconfig命令
管控/etc/init.d/下的所有服务脚本在各级别下的启动或关闭状态
chkconfig --list
chkconfig --add 添加
chkconfig --del 删除
chkconfig --level name 默认级别 2345
- 正常级别下,最后启动的一个服务s99local没用连接至/etc/init.d 而是连接在/etc/rc.d/rc.local
如果需要开机自动运行的脚本文件可直接放置到此文件中
-
用户空间的启动流程
/sbin/init(/etc/init.tab)
设置默认运行级别—运行系统初始化脚步,完成系统初始化–关闭对应级别停止和开启的服务–设置登录终端–启动
启动流程详细
post----boot(bios)---bootloader(MBR)--kernel(ramdisk)--rootfs--swtichroot--/sbin/init---/etc/inittab(/etc/init/*.config)---设定系统默认级别--系统初始化脚本rc.sysinit---关闭或启动对应级别的服务-----启动终端(shell或图形终端)
init程序:systemd,配置文件 /usr/lib/systemd/system/,/etc/systemd/system/
完全兼容 sysv脚本 因此service命令依然可用,建议使用systemctl
grub2详解
配置文件:/boot/grub/grub.conf <—/etc/grub.conf
stage2及内核等通常放置于一个基本磁盘分区
grub 1修复
#dd if=/dev/zero of=/dev/sda bs=1 count=446 破坏
- 1.chroot /mnt/sysimage
- 2.grub2-install /dev/sda #不依赖
hexdump -C /dev/sda -n512 -v
交互式修复,依赖/etc/grub 里面的文件
grub
root (hd0,0)
setup(hd0)
grub1.5
-
1.chroot /mnt/sysimage
-
2.grub2-install /dev/sda #不依赖
vim /ect/grub2.cfg
linux16 /vmlinuz-3.10.0-862.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0
rhgb 图形化 quiet不显示内核加载流程
修复grub.cfg文件
grub> kernel /vmlinuz-3.10.0-862.el7.x86_64
grub> initrd /initramfs-3.10.0-862.el7.x86_64.img
如何识别磁盘文件
hd#,#
hd# 磁盘编号
# 磁盘分区编号
grub 交互式
help 获取帮助命令
find
root (hd#,#)设置根设备
kernel 设定本次启动时用到的内核文件
initrd 设定为选定的内核提供额外文件的ramdisk
boot 引导启动选定的内核
如果/boot/下文件全部没有,可以在救援模式下安装kernel
rpm -ivh /mnt/cdrom/Packages/kernel-x --root=/mnt/sysimage --force
/boot/grub.conf
grub2-install /dev/sda
配置项
default 默认项启动
timeout 超时时间
splashimage
hiddenmenu 隐藏菜单
password 菜单编辑认证
title 定义菜单标题
root (hd#,#) grub查找stage2级kernel文件所在的设备分区,为grub的根
kernel /vmlinux-x.x. 启动的内核
initrd /initramfs-x.x 内核匹配的ramfs
单用户模式
1.编辑grub菜单(选定,然后使用e编辑)
2.在选定的kernel后面附加 1,s,S或single都可以
3.在kernel所在行,输入b命令
fstab 修复 (df -Th)
1.挂载 / 到/dev/sda2
2.swap
3.重新启用救援模式
/sbin/init修复
-
1.从其他机器scp拷贝 前提网络可达 ,重启
-
2.chroot /mnt/sysimage
rpm2cpio /misc/cd/packages/upstart-x
Centos 流程
post---->bios---->bootloader-mbr(grub)---->kernel(ramdisk)---->rootfs(switch root)---->/sbin/init(/etc/inittab)---->默认运行级别---->系统初始化(rc.sysinit)---->关闭启动服务---->启动终端(图像界面)