13.系统启动
1. 系统启动流程
1.1 启动阶段详解
| 阶段 | 组件 | 功能说明 |
|---|---|---|
| 1 | BIOS | - 硬件自检(POST) - 读取CMOS设置 - 检测启动设备顺序 - 加载MBR中的BootLoader |
| 2 | MBR | - 512字节(启动代码+分区表) - 包含第一阶段BootLoader - 标识活动分区 |
| 3 | BootLoader | - 阶段1: MBR中的初始代码 - 阶段1.5: 文件系统识别 - 阶段2: 加载内核(/boot/grub/) |
| 4 | 内核 | - 硬件检测与初始化 - 加载驱动模块 - 挂载根文件系统 - 启动init进程(PID=1) |
| 5 | init进程 | - 根据/etc/inittab初始化系统 - 启动运行级别对应服务 - 生成所有后续进程 |
1.2 inittab 文件格式
1 | id:runlevels:action:process |
主要action类型
| action | 说明 |
|---|---|
| boot | 系统启动时执行,不等待完成 |
| bootwait | 系统启动时执行,等待完成 |
| ctrlaltdel | 捕获Ctrl+Alt+Del组合键 |
| initdefault | 设置默认运行级别 |
| once | 进入运行级别时执行一次 |
| respawn | 进程终止后自动重启 |
| sysinit | 系统初始化脚本 |
| wait | 进入运行级别时执行并等待 |
1.3 运行级别管理
标准运行级别
| 级别 | 说明 |
|---|---|
| 0 | 关机 |
| 1/S | 单用户模式 |
| 2 | 多用户无NFS |
| 3 | 完整多用户模式 |
| 4 | 自定义 |
| 5 | 图形界面 |
| 6 | 重启 |
服务管理脚本
1 | /etc/init.d/service [command] |
| 命令 | 作用 |
|---|---|
| start | 启动服务 |
| stop | 停止服务 |
| restart | 重启服务 |
| reload | 重载配置 |
| status | 查看状态 |
服务自启动管理
RedHat系(chkconfig):
1 | chkconfig [选项] 服务名 [on|off] |
| 选项 | 说明 |
|---|---|
| –list | 显示服务状态 |
| –level | 指定运行级别 |
| –add | 添加服务 |
| –del | 删除服务 |
Debian系(update-rc.d):
1 | update-rc.d [选项] 服务名 [commands] |
| 选项 | 说明 |
|---|---|
| -n | 模拟执行 |
| -f | 强制操作 |
| remove | 删除链接 |
1.4 Upstart 事件驱动
主要命令:
1 | initctl [command] job |
| 命令 | 功能 |
|---|---|
| start | 启动作业 |
| stop | 停止作业 |
| restart | 重启作业 |
| status | 查看状态 |
| list | 列出所有作业 |
配置文件位置:
1 | /etc/init/*.conf |
2. GRUB 引导加载器
2.1 GRUB Legacy vs GRUB2
| 特性 | GRUB Legacy | GRUB2 |
|---|---|---|
| 版本 | 0.9x | 1.9x |
| 配置文件 | menu.lst | grub.cfg |
| 生成方式 | 直接编辑 | update-grub |
| 分区表示 | (hd0,0) | hd0,msdos1 |
2.2 GRUB Legacy 配置
/boot/grub/menu.lst 示例:
1 | timeout 5 |
常用命令:
1 | grub> root (hd0,0) # 设置根分区 |
2.3 GRUB2 配置
/etc/default/grub 关键参数:
| 参数 | 说明 |
|---|---|
| GRUB_DEFAULT | 默认启动项 |
| GRUB_TIMEOUT | 菜单超时 |
| GRUB_CMDLINE_LINUX | 内核参数 |
生成配置:
1 | update-grub |
2.4 内核启动参数
| 参数 | 作用 |
|---|---|
| root=/dev/sda1 | 指定根分区 |
| ro/rw | 只读/读写挂载 |
| init=/bin/bash | 指定初始化程序 |
| single | 单用户模式 |
| mem=1024M | 限制内存大小 |
查看当前参数:
1 | cat /proc/cmdline |
3. 其他引导加载器
3.1 LILO 配置
/etc/lilo.conf 示例:
1 | boot=/dev/sda |
应用配置:
1 | lilo -v |
3.2 SYSLINUX 系列
| 类型 | 文件系统 | 用途 |
|---|---|---|
| SYSLINUX | FAT | USB启动 |
| ISOLINUX | ISO9660 | 光盘启动 |
| EXTLINUX | ext2/3/4 | 硬盘启动 |
| PXELINUX | 网络 | 网络启动 |
PXE启动环境搭建:
- 安装必要服务:
1 | yum install dhcp tftp-server syslinux |
- 配置DHCP:
1 | filename "pxelinux.0"; |
- 准备TFTP目录:
1 | cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ |
4. 系统恢复方法
4.1 救援模式操作
- 使用安装介质启动
- 进入救援模式
- 挂载原系统:
1 | chroot /mnt/sysimage |
- 修复引导:
1 | grub-install /dev/sda |
4.2 常见修复场景
| 问题 | 解决方案 |
|---|---|
| MBR损坏 | dd if=/usr/share/syslinux/mbr.bin of=/dev/sda |
| GRUB损坏 | grub-install /dev/sda |
| 文件系统错误 | fsck -y /dev/sda1 |
| 密码重置 | init=/bin/bash 启动后修改密码 |
5. 启动优化技巧
- 并行启动:
1 | vim /etc/init/rc-sysinit.conf |
- 禁用不需要的服务:
1 | chkconfig --list | grep 3:on |
- 使用readahead:
1 | service readahead-early restart |
- SSD优化:
在/etc/fstab添加:
1 | noatime,discard |