从零手动安装 NetBSD 11:绕开 sysinst 的 MBR 分区实战
一篇技术博文记录了在 2012 年左右的 HP Pavilion 老机器上(使用 MBR 而非 UEFI 的 GPT 分区)从零手动安装 NetBSD 11.0 的完整过程。与使用官方 sysinst 安装器不同,作者退出安装器后用命令行手动完成磁盘分区、文件系统创建和系统安装,目的是理解操作系统内部机制,并提供最高灵活性来定制和解决常规安装可能遇到的问题。本文基于该博文,梳理手动安装的核心步骤。
准备安装镜像
$ wget https://cdn.netbsd.org/pub/NetBSD/NetBSD-11.0/images/NetBSD-11.0-amd64-install.img.gz
$ gunzip NetBSD-11.0-amd64-install.img.gz
$ sudo dd if=NetBSD-11.0-amd64-install.img of=/dev/<usb_device> bs=2m
要点:
<usb_device>是 U 盘设备名,使用整个磁盘(如 sdb)而非分区- 该操作会清空整个 U 盘,务必确认设备正确
- BIOS 中把 U 盘设为第一启动设备
退出 sysinst 获得手动环境
- 从 U 盘启动后进入 sysinst 安装程序
- 按 CTRL+C 退出 sysinst 得到 shell 提示符
- 之后可随时输入
exit或 ^D 返回安装器
键盘布局
非英语键盘可用 wsconsctl -w encoding=es 设置布局(示例为西班牙语)。注意 NetBSD 控制台只接受 ASCII 字符,"Ñ" 等字母不会显示,但布局正确。
启用网络与 SSH
为方便远程继续安装:
# /sbin/dhcpcd -d -n re0 # 从 DHCP 获取 IP 和网关
# service sshd onestart
- NetBSD 用驱动名而非 GNU/Linux 的 "eth" 命名:
re0表示 Realtek 以太网驱动 - 用
ifconfig查看接口和状态 - 创建本地用户(如 malatesta)加入 wheel 组,用于非特权操作和远程登录(该用户只存在于安装 U 盘系统中)
NetBSD 磁盘与分区模型
- 物理磁盘用驱动接口 + 整数表示,逻辑和原始设备在 /dev 下:
wd:IDE 驱动器(atabus),常规硬盘sd:SCSI 驱动器(scsibus),含 USB 盘cd:CDROM
sysctl hw.disknames列出当前磁盘- 示例:
wd0是 IDE 盘(安装目标)、cd0CDROM、sd0USB 盘、dk0 dk1是 sd0 的 "wedges"(GPT 分区)
MBR 与 disklabel
- 传统 BIOS 用 MBR 分区 schema,将分区属性写在物理盘第一个扇区
- MBR 限制物理分区数量
- NetBSD 在 MBR 之上使用 BSD disklabel 管理内部布局
安装流程概览(后续步骤)
手动安装剩余步骤包括:
- 在目标磁盘(wd0)上创建 MBR 分区
- 编写 BSD disklabel 定义内部布局
- 创建文件系统(newfs)
- 挂载并复制发行文件(base、comp、etc、games、man、misc、modules、tests、text 等集合)
- 安装引导代码、配置启动(boot.cfg)
- 设置 root 密码、时区、网络配置等系统配置
- 最终重启进入新系统
意义与启示
- 理解操作系统内部:手动安装揭示磁盘命名、MBR/disklabel 分层、文件系统创建和引导安装等通常被 sysinst 掩盖的机制
- 老硬件再利用:NetBSD 以可移植性和在旧机器上运行著称——2012 年的 MBR 电脑依然性能良好,翻新电脑获得第二生命,省钱且环保
- 灵活性:手动流程可定制并解决常规安装遇到的问题
总结
这篇 NetBSD 11 从零安装教程展示了绕开 sysinst 的手动安装路径:准备镜像(wget + gunzip + dd 写入 U 盘)→ 退出 sysinst 获得 shell → 设置键盘布局(wsconsctl)→ 启用网络和 SSH(dhcpcd、sshd onestart,注意 NetBSD 用 re0 这类驱动名)→ 理解磁盘模型(wd/sd/cd 驱动名、sysctl hw.disknames、MBR + BSD disklabel 分层)→ 分区、创建文件系统、复制发行集、安装引导、系统配置 → 重启。对想理解 NetBSD 内部机制、或在老 MBR 机器上做定制化安装的开发者,这份教程是完整参考。
来源:https://meanmicio.org/2026/09/06/netbsd-11-from-scratch/