《UNIX/Linux系统管理技术手册-读书笔记-第二章
1. 引导过程总览
| 知识内容 |
作用/任务 |
| 引导(booting):计算机“自己把自己启动起来”的完整流程。 |
理解系统启动各阶段,便于定位启动失败的原因。 |
| 引导四大阶段:①加载引导代码 → ②加载内核 → ③运行启动脚本/守护进程 → ④维护进程与状态。 |
知道每个阶段做什么,故障时能判断出问题出在哪个环节。 |
| 现代变化:UEFI取代传统BIOS,systemd取代传统init,云/容器化改变引导管理模式。 |
适应新环境(云实例、容器),不再依赖物理控制台。 |
2. 系统固件(BIOS vs UEFI)
| 知识内容 |
能做什么 |
| 传统BIOS:使用MBR(主引导记录),引导块仅512字节,只能加载第二阶段引导程序。 |
理解老旧系统引导机制,处理MBR损坏或分区表问题。 |
| UEFI:使用GPT分区表,能直接读取FAT文件系统,从EFI系统分区(ESP)加载引导目标(可以是内核或引导程序)。 |
支持更大磁盘、更安全引导(Secure Boot)、无需隐匿引导块。 |
| efibootmgr:用户空间工具,可查看/修改UEFI引导顺序和引导项。 |
efibootmgr -v查看当前引导配置;efibootmgr -o 0004,0002修改引导顺序。 |
| UEFI变量可写:rm -rf / 可能删除UEFI变量,永久损坏固件配置。 |
操作UEFI系统时谨慎,避免灾难性误操作。 |
实操要点:新硬件用UEFI+GPT,老硬件/虚拟机可能仍是BIOS+MBR。云环境通常抽象了固件层,无需关心。
3. 引导装载程序(Boot Loader)
| 知识内容 |
能做什么 |
| 引导装载程序任务:①识别并加载内核;②提供交互式菜单选择内核/OS;③传递内核启动参数。 |
多系统引导、内核版本切换、传递调试/恢复参数。 |
GRUB2(主流Linux默认):理解常见文件系统,从/boot/grub/grub.cfg读取配置。 |
引导Linux系统,菜单选择内核版本,故障时进入单用户/紧急模式。 |
grub.cfg:由grub-mkconfig或update-grub自动生成,内核升级后自动更新。 |
不要手工编辑grub.cfg(会被覆盖);通过/etc/default/grub和/etc/grub.d/定制。 |
GRUB交互式命令:boot、linux、reboot、search等。 |
启动时按e编辑引导项,按c进入命令行,手动加载内核调试。 |
GRUB常用内核启动参数
| 参数 |
作用 |
single 或 -s |
进入单用户模式(rescue.target) |
systemd.unit=emergency.target |
进入紧急模式(更精简,不挂载文件系统) |
init=/bin/bash |
直接用bash作为init进程,跳过所有服务 |
root=/dev/xxx |
手动指定根设备 |
debug |
开启内核调试输出 |
实操要点:内核更新后老内核保留,引导菜单可回退。修改内核参数永久生效需编辑/etc/default/grub中的GRUB_CMDLINE_LINUX。
4. FreeBSD引导过程
| 知识内容 |
能做什么 |
| BIOS路线(boot0):多阶段引导链,MBR → boot0 → 卷引导记录 → loader。 |
理解FreeBSD在传统BIOS下的引导方式,使用boot0cfg调整。 |
UEFI路线:ESP分区中的/boot/bootx64.efi → loader.efi。 |
UEFI环境下直接引导FreeBSD;ESP损坏时用dd恢复镜像。 |
loader.conf:引导装载程序的配置文件(Forth脚本),位于/boot/loader.conf。 |
设置引导超时、传递内核参数、修改引导画面等;不要改/boot/defaults/loader.conf。 |
loader交互式命令:ls、unload、load、boot。 |
引导时按ESC进入loader提示符,手动加载其他内核(如load /boot/kernel/kernel.old)。 |
5. 系统管理守护进程(init / systemd)
5.1 init的职责与实现
| 知识内容 |
能做什么 |
| PID 1(init):内核启动后的第一个用户态进程,负责启动/停止服务、切换操作模式。 |
所有进程的祖先进程,系统管理的根基。 |
| 运行模式:单用户(最小服务)、多用户(命令行)、图形化(GUI)。 |
不同场景下切换系统运行状态。 |
| 三种主流init实现:①传统SysV init(串行,依赖shell脚本);②BSD init(简单,/etc/rc);③systemd(现代,并行,依赖管理)。 |
知道不同系统的管理方式:Linux主流systemd,FreeBSD用BSD init。 |
5.2 systemd详解(重点)
systemd是当前Linux发行版的标准init实现,集成了服务管理、日志、登录管理等。
| 概念 |
是什么 |
能做什么 |
| 单元(Unit) |
systemd管理的实体:服务(.service)、套接字(.socket)、挂载点(.mount)、目标(.target)、计时器(.timer)等。 |
统一管理系统资源,不只是服务。 |
| 单元文件位置 |
/usr/lib/systemd/system(软件包提供,勿改)、/etc/systemd/system(本地定制,优先级高)、/run/systemd/system(临时)。 |
知道去哪里查看和覆盖服务配置。 |
| systemctl |
通用管理命令,类似Git的子命令风格。 |
管理服务的启动/停止/启用/禁用/状态查看/日志查看。 |
systemctl常用子命令速查
| 子命令 |
功能 |
systemctl list-units --type=service |
列出当前活动服务 |
systemctl list-unit-files --type=service |
列出所有已安装服务单元文件及状态 |
systemctl start/stop/restart <unit> |
立即启动/停止/重启服务 |
systemctl enable/disable <unit> |
设置/取消开机自启 |
systemctl status <unit> |
查看服务状态+最近日志 |
systemctl isolate <target> |
切换运行模式(如multi-user.target) |
systemctl get-default / set-default |
查看/设置默认启动目标 |
systemctl daemon-reload |
重新加载所有单元文件(修改配置后执行) |
systemctl edit <unit> |
创建覆盖文件,定制服务配置(推荐方式) |
systemctl mask/unmask <unit> |
彻底冻结/解冻服务(比disable更强) |
单元文件核心语法
| 区块 |
配置项 |
作用 |
[Unit] |
Description |
描述信息 |
|
After / Before |
执行顺序控制(非依赖) |
|
Wants / Requires |
依赖关系(Wants软依赖,Requires硬依赖) |
|
Conflicts |
互斥关系 |
[Service] |
Type |
服务类型(simple/forking/oneshot等) |
|
ExecStart / ExecStop / ExecReload |
启动/停止/重载命令 |
|
PIDFile |
PID文件路径(Type=forking时必需) |
|
KillMode / KillSignal |
终止行为控制 |
|
PrivateTmp |
隔离/tmp,增强安全 |
[Install] |
WantedBy / RequiredBy |
在哪个目标下启用(对应enable命令) |
覆盖文件定制服务(不修改原包文件)
# 推荐方式:使用systemctl edit
sudo systemctl edit nginx.service
# 在编辑器中写入覆盖内容
[Service]
ExecStart=
ExecStart=/usr/sbin/nginx -c /usr/local/nginx.conf
# 保存后执行
sudo systemctl daemon-reload
sudo systemctl restart nginx.service
systemd目标(Target) vs 传统运行级
| 传统运行级 |
systemd目标 |
说明 |
| 0 |
poweroff.target |
关机 |
| 1, s, single |
rescue.target |
单用户模式(救援) |
| — |
emergency.target |
紧急模式(更精简,不挂载文件系统) |
| 2, 3, 4 |
multi-user.target |
多用户命令行模式 |
| 5 |
graphical.target |
图形化多用户模式 |
| 6 |
reboot.target |
重启 |
systemd日志(journald)
| 知识内容 |
能做什么 |
| journald:systemd内置日志框架,收集内核+服务所有消息。 |
统一日志查看,不再需要翻/var/log下多个文件。 |
| journalctl:日志查看命令。 |
journalctl全量查看;journalctl -b查看本次引导日志;journalctl -b -1看上次引导;journalctl -u nginx只看特定服务。 |
持久化存储:编辑/etc/systemd/journald.conf设置Storage=persistent。 |
保留历史引导日志,便于事后排查。 |
6. FreeBSD init与启动脚本
| 知识内容 |
能做什么 |
BSD init:不支持运行级,执行/etc/rc进入完全引导状态。 |
理解FreeBSD启动流程。 |
rc.conf:主配置文件,位于/etc/rc.conf;/etc/defaults/rc.conf为默认值(勿改)。 |
设置服务是否开机自启(如sshd_enable="YES")。 |
rc.d脚本:位于/etc/rc.d/(系统)和/usr/local/etc/rc.d/(第三方软件)。 |
启动脚本标准位置,由rcorder排序执行。 |
| service命令:实时管理服务。 |
sudo service sshd stop停止服务;onestart/onestop忽略rc.conf配置强制操作。 |
7. 重新引导与关机
| 命令 |
功能 |
halt |
关闭系统(写入日志、杀进程、回写缓存、挂起内核) |
halt -p |
关闭系统并切断电源 |
reboot |
重新引导系统 |
shutdown |
定时关机+向登录用户发警告(多用户时代产物,现已较少用) |
云系统注意:AWS的Stop/Reboot/Terminate含义不同。Terminate会删除实例及其根磁盘(除非启用终止保护)。优先通过OS内部halt/reboot关机,控制台操作需谨慎。
8. 系统无法引导的应对策略
8.1 三种恢复方法
| 方法 |
适用场景 |
| 回退到已知良好状态(备份/快照恢复) |
最快,云环境首选,物理机需有近期全盘镜像 |
| 单用户/救援/紧急模式 |
能进入引导装载程序,但正常引导失败 |
| 挂载到另一系统检查 |
引导阶段早期就失败,或需要修复根文件系统 |
8.2 单用户模式(rescue.target)
| 操作 |
方法 |
| 进入方式 |
GRUB启动时编辑内核参数,添加single、-s或systemd.unit=rescue.target |
| 紧急模式(更精简) |
systemd.unit=emergency.target,不挂载文件系统,适合fsck修复 |
| 重新挂载根为读写 |
mount -o rw,remount /(Linux);FreeBSD需指定设备 |
| 退出继续引导 |
exit或Ctrl+D |
单用户模式会提示输入root密码——如果你忘了root密码,这个方法无效,需用方法3(挂载到另一系统)。
8.3 FreeBSD单用户
- 引导菜单选"Boot Single User";
- 或选"Escape to loader prompt"进入loader命令行环境。
8.4 云系统恢复(AWS为例)
| 步骤 |
操作 |
| 1 |
在相同可用区启动恢复实例(同一基础镜像) |
| 2 |
停止(非终止)故障实例 |
| 3 |
将故障实例的EBS卷分离 → 挂载到恢复实例 |
| 4 |
登录恢复实例,挂载卷,执行修复(修改配置、fsck、替换内核等) |
| 5 |
卸载卷 → 从恢复实例分离 → 重新挂回故障实例 → 启动 |
哲学:云服务器是“牛”不是“宠物”——出问题就用备份替换,而不是费时费力抢救。但恢复能力仍然需要掌握,尤其是关键数据未分离的场景。
9. 本章核心命令速查表
| 命令 |
用途 |
efibootmgr -v |
查看UEFI引导配置 |
efibootmgr -o 0004,0002 |
修改UEFI引导顺序 |
systemctl status/start/stop/restart |
服务管理 |
systemctl enable/disable |
开关开机自启 |
systemctl isolate multi-user.target |
切换到多用户模式 |
systemctl get-default/set-default |
查看/设置默认引导目标 |
systemctl edit <unit> |
创建覆盖文件定制服务 |
systemctl daemon-reload |
重载单元文件 |
journalctl -b -u nginx |
查看本次引导中nginx服务的日志 |
halt -p / reboot |
关机/重启 |
mount -o rw,remount / |
单用户模式下重新挂载根为读写 |
总结:第2章的核心是引导全链路(固件→引导装载程序→内核→init/systemd→服务)和故障恢复能力。重点掌握:
- systemd的systemctl/journalctl——日常服务管理必用;
- GRUB内核参数(single/emergency)——救系统于水火;
- 云环境恢复流程——虚拟化时代必备技能;
- 理解UEFI vs BIOS差异——新老硬件通吃。