linux启动流程
2020-12-16 00:55:01 26 举报
AI智能生成
centos6启动流程
作者其他创作
大纲/内容
硬件启动阶段
Power on打开电源
BIOS
POST: power on self test开机自检
初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等
确定启动设备
启动设备:硬盘、网络、U盘、光盘
如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节
控制权交给bootloader
MBR
MBR512字节
1.446字节bootloader
启动加载器bootloader
windows: ntloader仅仅启动os
GRUB: GRand Unified Bootloader, CentOS 6 GRUB 0.97: GRUB Legacy, CentOS 7 以后使用
GRUB 2.02
GRUB 2.02
2.64字节分区信息
16字节x4 partitions
3.55aa标志位表示分区是否有效
grub启动阶段
stage1
1.446字节bootloader
这是二进制的0101,写在MBR分区的前446字节。
单纯为了找到1.5阶段生成的bootloader上
stage1.5
第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统 来读取config文件加载内核。MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfs ext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader
1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。
能够识别启动分区文件系统
grub访问/boot下的stage2的文件,将stage2载入内存并执行
stage2
分区文件/boot/grub/
解析/boot/grub/grub.conf
显示操作系统启动菜单与背景图片,并提供交互式接口
a内核参数
e编辑模式用于编辑菜单
c命令模式,交互式接口
设置等待秒数
加载内核镜像到内存
为菜单提供了保护机制,为编辑启动菜单进行认证
为启用内核或操作系统进行认证
为启用内核或操作系统进行认证
通过/boot/initrd开头文件建立虚拟文件系统
转交控制权给内核
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=3 console serial
title CentOS (2.6.32-642.6.2.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-642.6.2.el6.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 panic=5 rd_NO_LUKS rd_NO_LVM LANG=C rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 panic=5 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /boot/initramfs-2.6.32-642.el6.x86_64.img
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=3 console serial
title CentOS (2.6.32-642.6.2.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-642.6.2.el6.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 panic=5 rd_NO_LUKS rd_NO_LVM LANG=C rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /boot/initramfs-2.6.32-642.6.2.el6.x86_64.img
title CentOS 6 (2.6.32-642.el6.x86_64)
root (hd0,0)
kernel /boot/vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/vda1 console=ttyS0 console=tty0 panic=5 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /boot/initramfs-2.6.32-642.el6.x86_64.img
default=#: 设定默认启动的菜单项;落单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径
password [--md5| --encrypt] STRING: 启动菜单编辑认证
hiddenmenu:隐藏菜单
title TITLE:定义菜单项“标题”, 可出现多次
root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件
password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/XPM_FILE:菜单背景图片文件路径
password [--md5| --encrypt] STRING: 启动菜单编辑认证
hiddenmenu:隐藏菜单
title TITLE:定义菜单项“标题”, 可出现多次
root (hd#,#):查找stage2及kernel文件所在设备分区;为grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件
password [--md5|--encrypted ] STRING: 启动选定的内核或操作系统时进行认证
内核引导阶段
调用虚拟根文件系统initramfs中的init
加载驱动模块,初始化系统中各设备并做相关配置,包括cpu io 存储设备
加载并切换真正的根文件系统(grub.conf中root=指定)
协助内核呼叫/sbin/init程序 这个也可以在grub.conf中指定
系统初始化阶段
/etc/inittab
runlevel查看获取用户运行级别
0关机
1单用户模式root用户登陆 用于破解root密码之类的操作 single, 维护模式
2多用户模式,启动网络功能,但不会启动NFS;维护模式
3多用户模式,正常模式;文本界面
4预留级别;可同3级别
5多用户模式,正常模式;图形界面
6重启
系统初始化脚本功能/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)清理操作
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10)加载额外设备的驱动程序
(11)清理操作
加载系统服务
/etc/rc.d/rc
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
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
加载系统服务:定义/etc/rcN.d/下所有文件 其实是/etc/init.d/下脚本文件的软链接
S开头文件:要启动的服务(脚本),从01开始启动,数字越小越优先启动
K开头的文件:要停止的服务(脚本),从01开始关闭,数字越小越优先关闭
用户自定义服务:/etc/rcN.d/下rc.local文件
centos6有执行权限 用户自定义服务可以写在里面 而不用写# chkconfig: 345 9 1 这样的备注
centos7 8没有执行权限 用户自定义服务可以写在里面 而不用写# chkconfig: 345 9 1 这样的备注
启动终端
/sbin/mingetty打开六个纯文本终端
验证登陆
/etc/nologin
在此文件中用户不允许登陆
/etc/passwd /etc/shadow 验证密码和shell和家目录
登陆成功
加载环境变量
屏幕输出
/var/spool/mail 查新邮件
/var/log/lastlog输出最后一次登陆信息
0 条评论
下一页