For the complete documentation index, see llms.txt. This page is also available as Markdown.

OpenBSD 引导过程

概要

OpenBSD 的引导过程简洁明了,文档完备,注重可靠性、清晰度与安全性。整个引导机制分为若干阶段,从固件(如 BIOS 或 UEFI)开始,依次执行启动脚本,最终进入多用户模式。本章逐一介绍各阶段,包括引导加载程序、内核初始化以及早期用户态进程。

引导阶段概览

OpenBSD 系统的引导过程通常依次经过以下阶段:

  1. 固件初始化(BIOS 或 UEFI)

  2. 引导加载程序执行(boot(8)

  3. 内核加载与初始化

  4. 通过 init(8) 初始化用户态

  5. 多用户启动脚本(rc(8)

各阶段相互独立,便于系统恢复与故障排查时灵活处理。

固件初始化

系统通电后,固件(BIOS 或 UEFI)初始化硬件并执行开机自检(POST)。随后固件扫描可引导介质,将控制权交给一级引导加载程序。该程序位于主引导记录(MBR)或 EFI 系统分区(ESP),具体位置取决于系统架构与配置。

在基于 UEFI 的 x86 系统上,加载程序通常安装于:

EFI\BOOT\BOOTX64.EFI

在传统 BIOS 系统上,引导加载程序写入 MBR 与 OpenBSD disklabel。

引导加载程序(boot(8)

OpenBSD 采用多级引导加载程序,由若干程序组成:

  • biosboot:BIOS 系统的一级引导加载程序。

  • pxeboot:用于 PXE 网络引导的加载程序。

  • bootefi:UEFI 系统的 EFI 引导加载程序。

  • boot:最终级引导加载程序,位于根文件系统中的 /boot

boot 程序负责定位并加载 OpenBSD 内核。它提供用户界面与有限的命令环境,支持引导时配置。

在引导提示符(boot>)下,用户可指定其他内核或传递选项。例如:

上述命令进入单用户模式。若要引导旧版内核:

若不作任何输入,短暂超时后即加载默认内核(/bsd)。

内核初始化

内核加载后,初始化硬件,配置设备驱动,并以只读方式挂载根文件系统。此阶段输出的信息来自设备检测与子系统初始化。

随后内核尝试运行初始进程,通常是 /sbin/init

若内核无法定位或执行 init(8),将触发 panic 并停机,或根据引导设置进入调试器(ddb(4))。

init(8) 与单用户模式

init(8) 是首个用户态进程,依次执行以下步骤:

  • 读取 /etc/ttys 配置终端。

  • 若传入 -s 选项,或上次关机未正常完成,init 进入单用户模式

  • 单用户模式下,根 shell 直接在控制台启动,不启用网络与多用户服务。

单用户模式用于系统维护,例如修复文件系统或从错误配置中恢复。

若要从单用户模式进入多用户模式:

多用户初始化

进入多用户模式后,init 执行 /etc/rc 脚本。该脚本完成必要的启动任务,包括:

  • 检查并挂载文件系统(fsckmount

  • 配置网络(hostname.ifdhcpleased 等)

  • 通过 rcctl(8) 启动系统守护进程

  • 应用 sysctl(8)wsconsctl(8) 设置

  • 运行日常维护脚本(dailysecurity 等)

/etc/rc 的输出记录到 /var/run/rc.log

终端登录通过 ttys(5) 实现:在已配置的虚拟控制台或串口上启动 getty(8)

引导时配置

用户可中断引导加载程序,以修改引导参数、选择其他内核或进入单用户模式。

-s:单用户模式

使用 -s 引导即进入单用户模式,便于修复故障或进入恢复 shell。

-a:询问根设备

-a 选项让内核提示用户指定根设备、交换设备及文件系统类型。

根文件系统无法自动判定时使用该选项。

-v:详细模式

-v 选项启用内核详细输出,在硬件初始化过程中提供更多信息。

-d:进入调试器

内核编译时若包含调试支持,-d 会在引导早期进入内核调试器(ddb(4))。

指定其他内核

若要加载非默认的 /bsd 内核,需提供完整路径。

系统升级后回退到已知可用的内核时常采用此法。

应急恢复与备用内核

OpenBSD 安装时会保留备用内核 /bsd.old/bsd.sp。当主内核配置错误或与系统不兼容时,可使用这些备用内核。

以单用户模式引导旧版内核:

若引导失败,可使用 install78.img 等安装介质引导,并进入 shell 模式手动恢复。

引导加载程序配置与超时

可通过 /etc/boot.conf 文件自定义引导加载程序行为。boot 程序读取该文件,用于自动选择内核或配置超时时间。

/etc/boot.conf 示例:

上述配置将超时设为 5 秒,并引导默认内核。

关键文件与工具

文件
用途

/bsd

默认内核

/bsd.mp

多处理器内核(SMP 系统默认)

/bsd.sp

单处理器内核

/bsd.old

上次升级前的备份内核

/boot

最终级引导加载程序

/etc/boot.conf

引导加载程序配置

/etc/rc

多用户模式启动脚本

/etc/ttys

终端配置

/etc/fstab

文件系统挂载配置

关机流程

OpenBSD 的关机流程由 init(8) 主导,通过 shutdown(8)reboot(8)halt(8) 触发。shutdown(8) 带上相应参数后,系统按受控顺序终止所有用户态活动,确保安全停机。

调用 shutdown(8) 后,依次执行以下步骤:

  1. init(8) 若存在 /etc/rc.shutdown 脚本,则尝试执行。该脚本可在关机前停止额外服务或执行清理任务。

  2. 向所有进程发送 TERM 信号,请求其正常退出。

  3. 短暂等待后,向仍存活的进程发送 KILL 信号。

  4. 卸载文件系统并刷新系统缓冲区。

  5. 系统根据关机模式重启或断电。

若硬件支持,要立即断电

重启系统:

也可使用:

注意:直接调用上述命令需为 root 用户或属于 operator 组。

operator 组成员资格可通过 vipw(8)chpass(1) 配置,详见账户管理章节。

shutdown(8) 支持调度未来关机时间并向已登录用户发出警告。多用户模式下停机或重启应优先使用该命令,可避免数据丢失,确保系统状态一致。

关机与重启事件记录到 /var/log/messages。若上述流程正常完成,下一次启动时的内核时间戳会反映这是一次干净关机。

最后更新于