Linux系统初始化流程:系统初始化相关基础知识
内核简介
内核的功能
- 进程管理:通过task_struct, scheduler 实现
- 内存管理
- I/O管理:中断以及中断处理
- 文件系统管理:ext3,ext4,xfs 等
- 驱动程序
- 安全相关:SELinux,各种加密库
- 通用软件,平台相关软件
内核设计流派
单内核:单一体系结构
- linux 为单一内核
- 模块化设计:核心+外围功能性模块
- 外围模块:,ko结尾的 kernel object。通常在/lib/modules 下面的各目录中
- 内核支持动态装在模块
- 微内核:多内核子系统 (windows, solaris)
fork() 用户空间内核的管理:
- init :负责用户空间进程的管理
- init :PID 为1,第一个用户空间的任务
- 所在目录: /sbin/init:
系统初始化流程
- POST:硬件开机自检,探测硬件设备,初始化内存,CPU等。
- BIOS:按照bios中的分区启动顺序启动
MBR (Master Boot Record):读取主引导记录
- Boot loader ( 446 bytes ):用于加载内核并读取分区信息的程序
- Partition Table ( 64 bytes ):分区记录
- SA:MBR有效标志位
kernel 装载:
- bootloader 装载boot所在分区的内核到内存中,bootloader只有基本磁盘分区文件系统驱动,只能识别基本分区
- initrd (centos5) /initramfs (centos6 ):内存模拟根文件系统,读取并装载真正根文件系统所需要的驱动
- 真正根文件系统成功识别后,替换掉临时根文件系统
init :真正根文件系统挂载成功后,init将开始运行初始化用户空间的程序与服务
SysV 风格:Centos5 的init脚本
- 串行话:需按照依赖关系顺序初始化进程,A-B-C
- 前一个进程初始化完成后,才能初始化后一个
Upstart :由ubuntu 研发
- dbus:可以在前一个进程启动一部分时就开始下一个进程启动
- 速度比SysV快
- SystemD :参考so x的初始化过程,速度更快
系统运行级别
linux系统包含 0-6 共7个运行级别
- 0:关机
- 1:单用户模式,直接以root用户登陆,用户破译密码
- 2:多用户模式,不支持NFS文件系统
- 3:完全多用户模式,文本shell
- 4:预留级别
- 5:完全多用户模式,图形shell
- 6:重启
SysV 风格的/sbin/init的配置文件, /etc/inittab, 每一行指定一种操作
id:3:initdefault:
- id
- runlevels:设置在哪些运行级别下执行此操作,不写为所有级别
action:[ACTION_CMD] 动作,指定如何进行操作的操作
- initdefault:设置默认运行级别,无需定义操作
- sysinit:指定系统初始化脚本例如:si::sysinit:/etc/rc.d/rc.sysinit
- wait:等到系统切换到次级别时运行一次
- ctrlaltdel:指定组合件所执行的命令
- respawn:当制定操作进程被关闭后立即再从启一次
- process :操作,具体运行的程序
init 命令的主要任务
init 的主要任务:
- 设置默认运行级
- 指定系统运行的初始化脚本
启动指定级别下要启动的服务,开关闭需要停止的服务
- /etc/init.d/:服务脚本所在位置
/etc/rc.d/rcN.d (0-6)/ :不同级别下要操作的服务文件夹
- S## 需要在##开启
- K## 需要在##关闭
- /etc/init.d/:服务脚本所在位置
- 定义组合键CtrlAltDel的动作
初始化字符终端,对应设备为
- /dev/tty#, /dev/ttyS#, /dev/console, /dev/pts/#
- 调用:login->/etc/issue
- 启动图形中断:x-windows
系统初始化脚本的 /etc/rc.d/rc.sysinit
- 设置主机名
- 打印欢迎信息
- 激活SELinux和udev
- 激活swap
- 挂载/etc/fstab定义的本地文件系统
- 检测根文件系统并对其以读写方式重新挂载
- 设置系统时钟
- 装载键盘映射
- 根据/etc/sysctl.conf设置内核参数
- 激活RAID和LVM设备
- 清理操作
MBR ( Master Boot Record)中bootloader介绍
MBR 中的 bootloader 程序
- LILO:LInux LOder 早起的bootloader :不能引导位于1024 Cylinder 以后分区中的os逐渐过时
GRUP:GRand Unified Bootloader ,启动时候有两个阶段
- 1st stage:位于MBR中, 为了引导2nd stage
- 1.5st stage :位于boot基本磁盘分区中国,为识别内核文件所在的文件系统识别和拓展
2nd stage :位于boot基本磁盘分区GRUB的引导程序
- boot分区大小:CentOS5 100M, Centos6 200M
- 所在目录: /boot/grub/ stage2的配置文件,grub.conf
Grub的功能:
- 选择启动的内核或系统, 可以隐藏选择界面
- 提供交互式接口,e 进入编辑模式
基于密码保护
- 启动内核映像时:定义在配置文件中相应的title下
- 传递参数(进入编辑模式时):定义在全局字段中
- 选择启动的内核或系统, 可以隐藏选择界面
grub接口:
- title:操作系统或者内核的标题
- root:设置内核文件所在的分区作为grub的跟,无论硬盘是什么,都以hd#.#表示
- kernel :定义要使用的内核文件,后面可以附加传递
- initrd:指定为内核提供额外驱动等功能的ram disk或ram fs
init 运行级别参数传递,级别为1时为单用户模式,用户密码修改
- 表示方法: 1,s,single,S
- 单用户模式几乎不会启动任何服务,且不需要用户登录,但是会执行/etc/rc.d/rc.sysinit脚本;
- 如是连/etc/rc.d/rc.sysinit文件也不加载,则传递 emergency
单用户启动后,无需身份认证,直接root,此时可以进行设置密码的操作
- 表示方法: 1,s,single,S
grub的配置文件,grub.conf 语法格式
root (hd0,0)
(Device,Part) :
Device 在grub中,统统以hd开头,并紧跟一个数字做各磁盘设备的标记,从0开始编号
Part 代表分区,从0开始编号
kernel :指定内核文件以及传递给内核的参数
内核文件位置:/vmlinux (这里的根是boot目录)
参数:ro root=/path/to/DEVICE quiet
initrd : 文件:通常为cpio归档,并使用gzip压缩;通常以.img作为文件名后缀;
/initrafs (这里的根是boot目录)grub 的安装,如果MBR中签446bytes 损坏,则需要修复bootloader,通常需要系统启动盘,在紧急救援模式下进行,需要版本对应。以下以手工破坏MBR为例 演示,重启后,系统已经无法挂载
第一种方式:插入系统光盘后以紧急救援模式启动,如果分区信息没有损坏原系统根目录会自动挂在到/mnt/sysimagechroot /mnt/sysimage
grub-install --root-directory=/ /dev/sda
这里的--root-directory 变量应该指向boot目录的上一层目录, 后面接需要安装bootloader的硬盘设备
第二种方式:直接进入grub命令行接口进行安装
chroot /mnt/sysimage
grub ## 进入grub 命令行接口
root (hd#,#)
setup (hd#)
quit