> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/man/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/uefi.8.md) 中描述。

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

本小节余下部分仅讨论引导块。[loader(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/ddb.4.md)）。

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

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

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

**`-n`** 在调用 [loader(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/loader.8.md) 之前忽略按键中断引导。

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

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

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

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

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

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

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

使用 **/boot.config** 文件为引导块代码设置默认配置选项。有关 **/boot.config** 文件的更多信息，请参见 [boot.config(5)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/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)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man4/ddb.4.md), [boot.config(5)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man5/boot.config.5.md), [make.conf(5)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man5/make.conf.5.md), [mount.conf(5)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man5/mount.conf.5.md), ttys(5), [boot0cfg(8)](/man/man8/boot0cfg.8.md), btxld(8), [config(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/config.8.md), efibootmgr(8), efivar(8), [gpart(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/gpart.8.md), [gptboot(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/gptboot.8.md), [gptzfsboot(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/gptzfsboot.8.md), [halt(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/halt.8.md), [loader(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/loader.8.md), nextboot(8), [reboot(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/reboot.8.md), [shutdown(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/shutdown.8.md), [uefi(8)](https://github.com/FreeBSD-Ask/freebsd-man-sc/blob/main/man8/uefi.8.md), zfsbootcfg(8)

## 缺陷

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

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/man/man8/boot_i386.8.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
