26.2 OpenBSD 系统安装
在了解 OpenBSD 项目的基本概述后,本节将详细介绍 OpenBSD 系统的安装流程,从镜像下载到自定义分区设置,为后续系统配置与使用奠定基础。
下载镜像
以 OpenBSD 7.7、AMD64 架构为例,请访问 https://cdn.openbsd.org/pub/OpenBSD/7.7/amd64 获取系统镜像。
若是刻录 U 盘安装,请下载 install77.img(同时支持 UEFI 和 BIOS);若是用于虚拟机体验,请下载 install77.iso。
ISO 镜像同样支持 UEFI 和 BIOS 启动。
警告
截至 OpenBSD 7.7,请勿使用 Ventoy 1.1.05 引导实体机安装,否则会卡在文件集选择阶段。
安装过程(UEFI)
本节将介绍在 UEFI 环境下安装 OpenBSD 系统的详细步骤。
技巧
OpenBSD 安装程序实际上调用的是位于 distrib/miniroot/install.sub 的脚本。该安装脚本高度耦合,截至写作时,有三千两百余行。
使用 install77.iso,并开启 VMware 虚拟机的 UEFI 功能。
Welcome to the OpenBSD/amd64 7.7 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i # 此处的 i 是用户键入的,下同输入 i,按 回车键,开始安装。
选择键盘布局,按 回车键,选择默认的美国键盘即可。
系统主机名可以选择较短的名称,将来主机名会显示为 ykla 这样的形式。
上面将列出系统所识别的网卡。
此步骤用于选择网络连接。为避免不必要的麻烦,请尽量选择有线网络。可先输入 ?,详细了解网络名称后再选择。如本例中 em0 为有线网络,vlan0 是虚拟 VLAN 接口。
后续配置均可直接按 回车键 确认。
设置 root 账号密码,输入后回车确认(密码不会显示在屏幕上)。
再次输入一遍 root 账号密码,按 回车键 确认。
按 回车键 确认,启用 SSH 服务。
启用 xenodm 以运行 X Window System。
设置普通用户的用户名。
用户全名,可随意输入或者按 回车键 默认。
为该账号设置密码(密码不会显示在屏幕上)。按 回车键 确认。
再次输入该用户名的密码。按 回车键 确认。
输入 yes 按 回车键 确认,以允许 root 登录 ssh。
输入 Asia(亚洲),按 回车键 确认。
输入 Shanghai(注意 S 为大写字母),按 回车键 确认。
按 回车键,不加密磁盘。
输入 ? 可查看硬盘:
这一步是选择要将系统安装在哪一块硬盘。按 ? 列出识别的所有硬盘。请务必记住所有的盘符。然后输入需要安装的位置,如这里选择 sd0。输入 sd0 回车。
回车,选择使用 GPT 分区表。
这里直接按回车键,选择系统默认分区。
警告
由于默认情况下,自动分区的存储空间分配不够合理,使用该方式时可能无法安装桌面环境。
技巧
文末附有自定义分区设置,供参考。
直接按回车键,选择 cd0,即使用安装介质作为软件源。
直接按回车键。
此处可输入 -game* 以取消选择 game77.tgz,其余保持选中状态;也可以直接按 回车键。
警告
即使不使用桌面环境,也建议勾选
xserv77.tgz,否则部分软件可能无法正常运行。
此后开始安装系统。约 5 分钟后,系统会显示如下提示:
警告
如果不希望在
fw_update阶段卡住,请在按 回车键 前拔掉网线,断开网络连接。
系统已成功安装,重启后即可进入新系统。
警告
如果不希望遇到报错
ssh(fail): no hostkeys available, invalid format,请在重启前恢复网络连接。
附录:自定义分区
本附录详细介绍 OpenBSD 的自动分区机制,并提供手动分区的方法供参考。
OpenBSD 自动分区的源代码分析
OpenBSD 默认的自动分区实际调用的是 sbin/disklabel/editor.c 文件中的相关函数。
根据 sbin/disklabel/extern.h 头文件中的宏:
我们再看结构体 struct space_allocation:
若磁盘总大小满足,先依次按最小大小为所有指定分区进行初次分配,则在初次分配中,先将 / 分区指定 150 MB,然后按照权重 5% 对剩余磁盘空间进行二次分配,二次分配后的 / 不会超过最大大小限制 1 GB。即无论磁盘多大,/ 大小的硬限制始终为 1 GB,上述代码最早可追溯到 2009 年。
注意到,最后超过最大权重限制的分区都会被授予以下分区:
若磁盘总大小大于等于 2.38 GB(含):
/home若磁盘总大小介于 700 M(含)到 2.38 GB 之间(不含):swap
思考题
在实际使用中,
/分区很快就会被填满,而/home几乎完全为空。并且原生的文件系统不支持磁盘的再分配,如缩减分区,调整顺序。你认为这种设计的根本缺陷在哪?请尝试改正并通过邮件列表向 OpenBSD 项目提交改进建议。
实际执行计算的是同 sbin/disklabel/editor.c 文件内的函数 allocate_space(),其中 if (xtrablks < sa[i].minsz) 表明先验证磁盘总大小是否满足初次分配的最小要求。从结构体 alloc_big[]、alloc_medium[]、alloc_small[] 最后到 alloc_stupid[] 依次降级计算。
函数 allocate_partition() 则执行实际写入。
思考题
请分析在 UEFI 下,OpenBSD 自动生成的
EFI分区在哪个位置?
自动安装的分区如下:
以人类可读格式显示 sd0 磁盘的磁盘标签信息:
400 G 硬盘自动分区如下:
执行手动分区
了解自动分区的机制后,可以根据实际需求执行手动分区,以更合理地分配磁盘空间。
在系统分区阶段,选择 C(Custom),即“自定义设置”。
p m(注意之间的空格)
输入 p m(注意之间的空格)来显示硬盘。其他选项如下表:
p m
查看分区大小
A
自动分区
a
增加分区
d
删除分区
z
删除全部分区
q
确认分区
假设磁盘容量为 80 GB,可规划分区为:EFI 260 MB、/ 75 G、其余空间分配给 swap。
顺序不可动,否则无法启动!必须先分一个 /,再分 swap。基本思路:自动分区 → 删去 i 分区以外的分区 → 分 / → 分 swap
使用 d 删除现有的分区,但会保留 i 分区这个 EFI 分区(OpenBSD 7.5 及以上,7.5 以下请逐个删除除 MSDOS 以外的所有分区)
查看当前分区状态:
设置 75 GB 的 / 分区:
设置交换分区,把剩余空间都给交换分区:
然后查看当前分区状态:
需要注意的是,在 size 一栏中未输入具体数值而直接按 回车键,表示将上一步剩余的全部容量分配给该分区,即 swap 分区。
配置完毕,记得输入 q 确认。
回车确认写入新的分区标签。
至此,分区配置完成。
从 release 升级到 stable 或 current
除了标准的 release 版本外,OpenBSD 还提供了 stable 和 current 版本供高级用户选择。本节介绍如何从 release 版本升级到这些版本。
OpenBSD 的版本分为三类:release、stable 和 current。release 是官方正式发布的稳定版本,每六个月发布一次;stable 是在 release 基础上应用安全补丁的版本;current 是开发版本,包含最新的功能但可能不稳定。
OpenBSD 不建议从 release 升级到 current,建议直接使用 快照版本(即预构建的 current)。这是因为 current 版本的 ABI 变动频繁,从 release 直接升级可能遇到兼容性问题。
经过测试,如果直接从 release 升级到 current 可能会遇到问题,例如:
获取 current 版本源码的步骤:
获取 7.3 -stable 版本源码的步骤:
从源码编译和升级系统的步骤:
参考文献
OpenBSD Project. Anonymous CVS[EB/OL]. (2024-03-25)[2026-03-25]. https://www.openbsd.org/anoncvs.html. OpenBSD 官方 CVS 匿名访问指南,提供代码仓库获取方法。
OpenBSD Project. FAQ - Building the System from Source[EB/OL]. (2024-03-25)[2026-03-25]. https://www.openbsd.org/faq/faq5.html. 详细说明从源码编译 OpenBSD 系统的步骤与配置。
OpenBSD Project. release — building an OpenBSD release[EB/OL]. (2024-03-25)[2026-03-25]. https://man.openbsd.org/release. OpenBSD 官方手册页,介绍发布版本构建流程。
课后习题
在 QEMU 中安装 OpenBSD CURRENT,使用自定义分区(仅 / 和 swap),记录安装过程并验证系统能否正常启动,分析这种极简分区方案的适用场景与限制。
检出 OpenBSD CURRENT 源码,修改
sbin/disklabel/editor.c中的alloc_big数组,将 / 分区最大限制从 1 GB 调整为 10 GB,重新编译 disklabel 工具并在测试环境中验证其效果。从 OpenBSD -release 版本通过源码升级到 -stable,记录整个升级过程中遇到的问题(如 _shutdown 用户组缺失等),并分析为什么 OpenBSD 团队选择不保持向下兼容的设计决策及其对用户的约束。
最后更新于