linux操作系统启动流程
-
POST系统
X86平台硬件被设计成一旦通电会自动运行ROM中的程序,所以当主机加电时,CPU寻址ROM,使存放于ROM中的POST系统运行,该系统用于硬件自检,内容包括检查内存,I/O设备是否存在,显示设备是否存在等,如果正常,则进入下一步。 -
Boot Sequence
加电自检完成后,位于ROM中的BIOS系统运行,BIOS为基本输入输出系统,此时BIOS中的Boot Sequence会按次序查找各引导设备,其中第一个有bootloader(引导程序)的设备即为本次启动要用到的设备,BIOS会读取该设备的MBR,MBR即为Master Boot Record,大小为512bytes,其中前446bytes为bootloader,之后46bytes为分区表,后2bytes为魔术,当标记55AA时即表示MBR有效,否则无效。 -
BootLoader
现Linux用GRUB作为bootloader,GRUB分为两段,1st stage为bootloader,用于把第二阶段加载到内存从而完整实现更多功能,2nd stage 即为存放于内核中的/boot/grub,其中1.5stage可做为文件系统驱动,使文件系统中的2nd stage可以被识别。UEFI与GPT分区格式不同于MBR。 -
Kernel
通过GRUB会加载内核程序到内存中,首先内核会自身初始化,探测可识别到的所有硬件设备,在内存上划出临时根ramdisk,并转换为基于fs的文件系统来防止双缓冲,通过该系统加载硬件所需要的驱动。 -
rootfs
有了临时根,有了驱动,就可以以只读方式挂载硬件上的真正的根文件系统,使用只读方式是为了防止因内核BUG等原因造成破坏。 有了根文件系统,将会启动用户空间的第一个应用程序init程序,其中CentOS7使用Systemd作为第一个程序 -
init
init程序将读取/etc/inittab文件中的配置,根据运行级别,运行对应的脚本程序来开启或关闭对应的服务程序。其中系统初始化脚本为/etc/rc.d/rc.sysinit,该文件配置了
(1) 设置主机名;hostname
(2) 设置欢迎信息
(3) 激活udev和selinux;
(4) 挂载/etc/fstab文件中定义的所有文件系统;
(5) 检测根文件系统,并以读写方式重新挂载根文件系统; (之前是只读挂载)
(6) 设置系统时钟; (读取硬件时钟实现)
(7) 根据/etc/sysctl.conf文件来设置内核参数;
(8) 激活lvm及软raid设备;
(9) 激活swap设备;(fstab已包含)
(10) 加载额外设备的驱动程序;
(11) 清理操作;
- 运行级别:
分为7个级别,分别为0-6
0:关机, shutdown
1:单用户模式(single user),root用户,无须认证;维护模式;
2、多用户模式(multi user),会启动网络功能,但不会启动NFS(网络文件系统);维护模式;
3、多用户模式(mutli user),完全功能模式;文本界面;
4、预留级别:目前无特别使用目的,但习惯以同3级别功能使用;
5、多用户模式(multi user), 完全功能模式,图形界面;
6、重启,reboot
开机默认级别为:3或 5
grub启动引导程序配置及命令行接口详解
- grub的命令行接口
-
help: 获取帮助列表
-
help KEYWORD: 详细帮助信息
-
find (hd#,#)/PATH/TO/SOMEFILE:查找文件
-
root (hd#,#) 设定根设备
-
kernel /PATH/TO/KERNEL_FILE: 内核文件路径
- 内核通常为vmlinuz,z表示是压缩格式存放
- 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
- 例如:init=/path/to/init, selinux=0
-
initrd /PATH/TO/INITRAMFS_FILE:
- 设定为选定的内核提供额外文件的ramdisk;
- 需要与内核版本号完完全全匹配
-
boot: 引导启动选定的内核;
-
手动在grub命令行接口启动系统:
-
grub> root (hd#,#) grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE grub> initrd /initramfs-VERSION-RELEASE.img grub> boot
grub配置文件
-
配置文件:/boot/grub/grub.conf
配置项:- default=#: 设定默认启动的菜单项;落单项(title)编号从0开始;
- timeout=#:指定菜单项等待选项选择的时长;(超时时间,超时则选择默认菜单项)
- splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;xpm格式,只能使用14位色,默认的图片需要800*600分辨率才能显示,可以替换为更小的,使用gimp可以编辑图片
- hiddenmenu:隐藏菜单;
- password [--md5] STRING: 菜单编辑认证;设定认证方式,匹配才可以编辑
- title TITLE:定义菜单项“标题”, 可出现多次;
- root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
- kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
- initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
- password [--md5] STRING: 启动选定的内核或操作系统时进行认证;
-
grub-md5-crypt命令:生成要保护的密码串,将密码串贴到--md5 密码串,这要配置文件里的密码就不会明文暴露
- 进入单用户模式:
- (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);
- (2) 在选定的kernel后附加
- 1, s, S或single都可以;
- (3) 在kernel所在行,键入“b”命令;
实现kickstart文件制作与光盘镜像制作
kickstart文件的格式
- 命令段:
- 指定各种安装前配置选项,如键盘类型等;
- 必备命令
- 可选命令
- 程序包段:
- 指明要安装程序包,以及包组,也包括不安装的程序包;
- %packages 程序包段开始
- @group_name 安装的包组
- package 安装的包
- -package 不安装的,也可能因为依赖而被安装
- %end 程序包段结束
- 指明要安装程序包,以及包组,也包括不安装的程序包;
- 指定各种安装前配置选项,如键盘类型等;
- 脚本段:
- %pre:安装前脚本
- 运行环境:运行安装介质上的微型Linux系统环境;
- %post:安装后脚本
- 运行环境:安装完成的系统;
- %pre:安装前脚本
命令段中的必备命令:
authconfig:认证方式配置,本地认证配置,基于shadow
authconfig --enableshadow --passalgo=sha512
bootloader:定义bootloader的安装位置及相关配置,--append=补充参数
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
keyboard:设置键盘类型
keyboard us
lang:语言类型
lang zh_CN.UTF-8
part:分区布局;以及分区使用方式,默认被注释,默认单位mb,pv为固定前缀
part /boot --fstype=ext4 --size=500
part pv.008002 --size=51200
rootpw:管理员密码
rootpw --iscrypted $6$4Yh15kMGDWOPtbbW$SGax4DsZwDAz4201.O97WvaqVJfHcISsSQEokZH054juNnoBmO/rmmA7H8ZsD08.fM.Z3Br/67Uffod1ZbE0s.
timezone:时区
timezone Asia/Shanghai
clearpart:清除分区
clearpart --none
--drives=sda:清空磁盘分区;
volgroup:创建卷组
volgroup myvg --pesize=4096 pv.008002
logvol:创建逻辑卷
logvol /home --fstype=ext4 --name=lv_home --vgname=myvg --size=5120
生成加密密码的方式:生成4个字节8位16进制数为随机数
~]# openssl passwd -1 -salt `openssl rand -hex 4`
命令段中的可选命令:
install OR upgrade:安装或升级;
text:
安装界面类型,text为tui,默认为GUI,单独成行,不需要参数
network:配置网络接口,自动dhcp
network --onboot yes --device eth0 --bootproto dhcp --noipv6
firewall:防火墙
firewall --disabled
selinux:SELinux安全加强的策略库
selinux --disabled
repo:指明安装时使用的repository;
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
url: 指明安装时使用的repository,但为url格式;
url --url=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/
halt、poweroff或reboot:安装完成之后的行为;
参考官方文档:《Installation Guide》
定制kickstart文件:
# yum install system-config-kickstart
# system-config-kickstart
通过该程序界面可以配置上面所有选项
创建光盘镜像:
~]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/
网友评论