> For the complete documentation index, see [llms.txt](https://man.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://man.bsdcn.org/man8/boot_i386.8.md).

# boot(8)

`boot` — 系统引导过程

## 名称

`boot`

## 描述

**电源故障和崩溃恢复。** 通常，系统会在上电或崩溃后自行重启。系统会自动对文件系统进行一致性检查，若检查未失败，系统将恢复多用户操作。

**冷启动。** 传统 i386 PC 会先尝试从软盘驱动器 0（有时称为驱动器 A:）启动，若失败则从硬盘驱动器 0（有时称为驱动器 C:，或 BIOS 中的驱动器 0x80）启动。某些 BIOS 允许你更改此默认顺序，并可能将 CD-ROM 驱动器也作为启动设备。

当代 PC 使用 UEFI 固件而非 BIOS 进行启动。该过程在 [uefi(8)](/man8/uefi.8.md) 中描述。

系统采用三阶段引导。控制权从引导块（引导的第一和第二阶段）传递给第三阶段引导程序 [loader(8)](/man8/loader.8.md)。此第三阶段对引导过程的控制比引导块更为精细，因为引导块受限于在给定磁盘或 slice 上占据的有限固定空间。

本小节余下部分仅讨论引导块。[loader(8)](/man8/loader.8.md) 程序另有单独文档说明。

引导块加载完成后，你应看到类似以下的提示符：

```sh
>> FreeBSD/x86 BOOT
Default: 0:ad(0,a)/boot/loader
boot:
```

自动引导会尝试从软盘或硬盘的 `a` 分区加载 **/boot/loader**。此引导过程可通过在 `boot:` 提示符下键入任意字符来中止。此时，可接受以下输入：

**`?`** 给出默认引导设备根目录中文件的简短列表，作为可用引导文件的提示。（`?` 也可作为路径的最后一段，此时将列出相关子目录的内容。）

**`bios_drive`**`:`**`interface`**`(`**`unit`**`[,`**`slice`**`,]`**`part`**`)` **`filename`** \[`-aCcDdghmnPprsv`] \[`-S` `speed`] 指定引导文件和标志。

**`bios_drive`** BIOS 所识别的驱动器号。0 表示第一个驱动器，1 表示第二个驱动器，以此类推。

**`interface`** 从其启动的控制器类型。注意，由于使用 BIOS 服务加载引导文件镜像，控制器必须具有 BIOS 支持。支持的接口有：

* `ad` — WD100\[2367] 或类似控制器上的 ST506、IDE、ESDI、RLL 磁盘
* `fd` — 5 1/4 英寸或 3 1/2 英寸高密度软盘
* `da` — 任何受支持的 SCSI 控制器上的 SCSI 磁盘

**`unit`** 所用接口上驱动器的单元号。0 表示第一个驱动器，1 表示第二个驱动器，以此类推。

**\[`slice`,** ]`part`\*\* 磁盘 BSD 部分内的分区字母。参见 bsdlabel(8)。按惯例，只有 `a` 分区包含可引导镜像。若使用切片磁盘（“fdisk 分区”），任何 `slice`（1 表示第一个 slice，2 表示第二个 slice，以此类推）都可启动，默认值（未指定时）为活动 slice，否则为第一个 FreeBSD slice。若 `slice` 指定为 0，则从第一个 FreeBSD slice（也称为 “兼容性” slice）启动。

**`filename`** 要引导的文件路径名（相对于指定分区的根目录）。默认为 **/boot/kernel/kernel**。不支持符号链接（支持硬链接）。

**`[-aCcDdghmnPpqrsv]`** **`[-S`** **`speed`**`]` 引导标志：

**`-a`** 在内核初始化期间，询问要将哪个设备挂载为根文件系统。

**`-C`** 尝试从 CD-ROM 挂载根文件系统。

**`-c`** 此标志目前为空操作。

**`-D`** 以双控制台配置引导。在单控制台配置中，控制台将是内置显示器或串行端口，取决于下文 `-h` 选项的状态。在双控制台配置中，无论 `-h` 选项状态如何，内置显示器和串行端口都将同时成为控制台。

**`-d`** 尽早在内核初始化期间进入 DDB 内核调试器（参见 [ddb(4)](/man4/ddb.4.md)）。

**`-g`** 使用 GDB 远程调试协议。

**`-h`** 强制使用串行控制台。例如，如果你从内置控制台引导，可使用 `-h` 选项强制内核将串行端口用作其控制台设备。

**`-m`** 静默控制台，在引导期间抑制所有内核控制台输入和输出。

**`-n`** 在调用 [loader(8)](/man8/loader.8.md) 之前忽略按键中断引导。

**`-P`** 探测键盘。若未找到键盘，则自动设置 `-D` 和 `-h` 选项。

**`-p`** 在设备探测阶段，每附加一个设备后暂停。

**`-q`** 静默模式，除非自动引导失败或被禁用，否则不向控制台写入任何内容。此选项仅影响第二阶段引导块，要防止后续阶段写入控制台，需与 `-m` 选项组合使用。

**`-r`** 使用包含根文件系统的设备的静态配置默认值（参见 [config(8)](/man8/config.8.md)）。通常，根文件系统位于加载内核的设备上。

**`-s`** 引导至单用户模式；若控制台被标记为 “insecure”（参见 ttys(5)），则必须输入 root 密码。

**`-S`** `speed` 将串行控制台速度设置为 `speed`。默认为 115200，除非已在 [make.conf(5)](/man5/make.conf.5.md) 中设置 `BOOT_COMCONSOLE_SPEED` 并重新编译和安装引导块。

**`-v`** 在设备探测期间（及之后）显示详细信息。

使用 **/boot.config** 文件为引导块代码设置默认配置选项。有关 **/boot.config** 文件的更多信息，请参见 [boot.config(5)](/man5/boot.config.5.md)。

## 文件

**/boot.config** 引导块参数（可选）

**/boot/boot1** 第一阶段引导文件

**/boot/boot2** 第二阶段引导文件

**/boot/loader** 第三阶段引导程序

**/boot/kernel/kernel** 默认内核

**/boot/kernel.old/kernel** 典型的非默认内核（可选）

## 诊断

当发生与磁盘相关的错误时，第二阶段引导程序会使用 BIOS 返回的相同错误代码进行报告，例如 “Disk error 0x1 (lba=0x12345678)”。以下是这些错误代码的部分列表：

**0x1** 无效参数

**0x2** 未找到地址标记

**0x4** 未找到扇区

**0x8** DMA 溢出

**0x9** DMA 跨越 64K 边界

**0xc** 无效介质

**0x10** 不可纠正的 CRC/ECC 错误

**0x20** 控制器故障

**0x40** 寻道失败

**0x80** 超时

**注意：** 在较旧的机器上，或在其他不支持 EDD（磁盘包接口支持）的情况下，所有需要在引导阶段访问的引导相关文件和结构（包括内核）必须位于磁盘的 1023 柱面及以下（按 BIOS 所理解的几何结构）。当第二阶段引导程序报告 “Disk error 0x1” 时，通常意味着未遵守此要求。

## 参见

[ddb(4)](/man4/ddb.4.md), [boot.config(5)](/man5/boot.config.5.md), [make.conf(5)](/man5/make.conf.5.md), [mount.conf(5)](/man5/mount.conf.5.md), ttys(5), [boot0cfg(8)](/man8/boot0cfg.8.md), btxld(8), [config(8)](/man8/config.8.md), efibootmgr(8), efivar(8), [gpart(8)](/man8/gpart.8.md), [gptboot(8)](/man8/gptboot.8.md), [gptzfsboot(8)](/man8/gptzfsboot.8.md), [halt(8)](/man8/reboot.8.md), [loader(8)](/man8/loader.8.md), nextboot(8), [reboot(8)](/man8/reboot.8.md), [shutdown(8)](/man8/shutdown.8.md), [uefi(8)](/man8/uefi.8.md), zfsbootcfg(8)

## 缺陷

此 BSD 版本所使用的 bsdlabel 格式与其他架构的格式大不相同。

由于空间限制，`-P` 选项启动的键盘探测仅是测试 BIOS 是否检测到 “扩展” 键盘。如果连接的是 “XT/AT” 键盘（无 F11 和 F12 键等），探测将失败。
