UP | HOME

启动引导器

Table of Contents

loader.conf 的功能定位与文件结构

根据 loader.conf(5) 手册页所述,loader.conf 是 FreeBSD 系统引导过程中的核心配置文件。该文件在引导加载程序 loader(8) 阶段被读取,用于指定要 启动的内核传递给内核的参数 以及需要 加载的附加模块 ,同时可设置 loader(8) 支持的所有变量

loader.conf(5) 相关的文件结构如下:

/
└── boot/ 操作系统引导过程中使用的程序和配置文件
     ├── loader.conf 用户定义设置
     ├── loader.conf.lua 使用 Lua 编写的用户定义设置(默认不存在)
     ├── loader.conf.d/ 用户定义设置的子目录(默认为空)
     │    ├── *.conf 拆分成多个文件的用户定义设置(默认不存在)
     │    └── *.lua 使用 Lua 编写并拆分成多个文件的用户定义设置(默认不存在)
     ├── loader.conf.local 机器特定设置,可覆盖其他配置文件中的设置(默认不存在)
     └── defaults/ 存放默认引导配置文件
          └── loader.conf 默认设置文件(请勿直接修改),参见 loader.conf(5)

loader.conf 是系统启动配置的关键文件,位于 /boot/loader.conf 文件。写入此处的配置比 rc.conf 文件更早生效,但不当配置可能会妨碍系统正常启动

详细说明请参考 loader.conf 手册页

不建议直接修改 /boot/defaults/loader.conf 文件

如需自定义配置,应使用 /boot/loader.conf 文件或 /boot/loader.conf.local 文件进行本地配置扩展

其中 /boot/loader.conf.local 文件优先级最高,专门用于机器特定设置

ZFS 标准安装场景下的 loader.conf 配置内容

在 ZFS 标准安装方案中,/boot/loader.conf 文件通常包含以下配置内容(以 15.0-RELEASE 为例):

kern.geom.label.disk_ident.enable="0"     # 禁用 disk_ident 标签,形如 /dev/diskid/DISK-S3Z4NB0K123456(硬件序列号)
kern.geom.label.gptid.enable="0"     # 禁用基于 GPT UUID 生成的设备名,形如 /dev/gptid/3f6c3a3e-4bcb-11ee-8e6d-001b217e6c8a
zfs_enable="YES"     # 默认加载 zfs 模块

该文件由 bsdinstall(8) 安装程序在系统安装过程中自动写入。具体而言,usr.sbin/bsdinstall/scripts/zfsboot 脚本会分别写入 kern.geom.label.disk_ident.enable="0"kern.geom.label.gptid.enable="0"zfs_enable="YES" 这三行配置

因此在使用 ZFS 标准安装方案的系统中,这三行即是 /boot/loader.conf 文件的全部初始内容

默认配置文件的内容结构与说明

默认配置文件位于源代码中的 stand/defaults/loader.conf。以下内容基于版本 loader.conf.5: "console" setting does not document multi-value possiblity

# 这是 loader.conf —— 一个包含许多实用变量的文件
# 可通过设置这些变量来改变系统的默认加载行为。
# 不应直接编辑此文件!
# 请把任何要覆盖的设置放入 loader_conf_files 中的某个文件里
# 这样以后在更新这些默认值时,就不会影响原生配置信息。

#
# 所有参数都必须使用双引号。
#

###  基础配置选项  ############################
# 执行命令,在屏幕上打印“Loading /boot/defaults/loader.conf”这句话
exec="echo Loading /boot/defaults/loader.conf"     # (正在加载 /boot/defaults/loader.conf)

# 内核设置
kernel="kernel"         # /boot 子目录,包含内核和模块。
bootfile="kernel"       # 内核名称(可以是绝对路径)
kernel_options=""       # 传递给内核的标志

# 引导启动器配置文件配置
loader_conf_files="/boot/device.hints /boot/loader.conf"   # loader 默认读取的配置文件列表
loader_conf_dirs="/boot/loader.conf.d"                     # loader 读取的配置目录,将加载该目录中的 *.conf 和 *.lua 文件
local_loader_conf_files="/boot/loader.conf.local"          # 本机专用配置文件,可覆盖其他配置文件中的设置
nextboot_conf="/boot/nextboot.conf"                        # 下一次启动使用的临时配置文件
verbose_loading="NO"            # 设置为 YES 将启用详细的引导输出

###  启动画面配置  ############################
# 启动 Logo 设置
splash_bmp_load="NO"            # 设置为 YES 将启用 bmp 启动画面
splash_pcx_load="NO"            # 设置为 YES 将启用 pcx 启动画面
splash_txt_load="NO"            # 设置为 YES 将启用 TheDraw 启动画面
vesa_load="NO"                  # 设置为 YES 将加载 vesa 模块
bitmap_load="NO"                # 如果想使用启动画面,请设置为 YES
bitmap_name="splash.bmp"        # 设置为文件名
bitmap_type="splash_image_data" # 并将其放在 module_path 中
splash="/boot/images/freebsd-logo-rev.png"  # 再设置 boot_mute=YES 将加载它

###  屏幕保护模块  ###################################
# 最好在 rc.conf 中设置这些屏保
screensave_load="NO"            # 设置为 YES 将加载屏幕保护程序模块
screensave_name="green_saver"   # 设置要使用的屏幕保护程序模块名称

###  早期 hostid 配置 ############################
# 这台机器的唯一标识
hostuuid_load="YES"        # 设置为 YES 来加载 hostuuid 模块
hostuuid_name="/etc/hostid" # 指定 hostid 文件路径
hostuuid_type="hostuuid"   # 指定模块类型为 hostuuid

###  随机数生成配置  ##################
# 适用于密码模块,随机数生成
# 参见 rc.conf(5)。rc.conf 中 entropy_boot_file 配置变量必须与下面的设置相同
# rc.conf 中的 entropy_boot_file 和 loader.conf 中的 entropy_cache_name 必须指定同一个文件
entropy_cache_load="YES"                # 设置为 NO 将禁用在启动时加载缓存的熵
entropy_cache_name="/boot/entropy"      # 设置为该文件的名称
entropy_cache_type="boot_entropy_cache" # 内核查找启动时熵缓存所必需的类型。即使上面的 _name 发生变化,这个值也绝不能改变!
entropy_efi_seed="YES"                  # 设置为 NO 将禁用从 UEFI 硬件随机数生成器 API 加载熵
entropy_efi_seed_size="2048"            # 设置为其他值以改变从 EFI 请求的熵数量


###  内存黑名单配置  ############################
# 屏蔽坏内存地址用,适用于服务器
ram_blacklist_load="NO"                 # 设置为 YES 可加载一个文件,该文件包含需要从运行系统中排除的地址列表
ram_blacklist_name="/boot/blacklist.txt" # 设置为该文件的名称
ram_blacklist_type="ram_blacklist"      # 内核查找黑名单模块所必需的类型

###  微码加载配置  ########################
# 处理器微码配置
cpu_microcode_load="NO"                 # 设置为 YES 以在启动时加载并应用微码更新文件
cpu_microcode_name="/boot/firmware/ucode.bin" # 设置为微码更新文件路径
cpu_microcode_type="cpu_microcode"      # 内核查找微码更新文件所必需的类型

###  ACPI 设置  ##########################################
acpi_dsdt_load="NO"             # DSDT 覆盖
acpi_dsdt_type="acpi_dsdt"      # 请勿修改此项
acpi_dsdt_name="/boot/acpi_dsdt.aml"     # 使用此文件覆盖 BIOS 中的 DSDT
acpi_video_load="NO"            # ACPI 视频扩展驱动

###  审计设置  #########################################
# 安全审计系统的事件定义预加载配置
audit_event_load="NO"           # 设置为 YES 将在启动早期预加载 audit_event 配置文件
audit_event_name="/etc/security/audit_event" # 指定 audit_event 配置文件路径
audit_event_type="etc_security_audit_event"  # 内核查找并识别该配置文件所需的类型

### 初始内存磁盘设置 ###########################
# 内存盘设置
#mdroot_load="YES"              # “mdroot” 前缀可任意修改
#mdroot_type="md_image"         # 在启动时创建 md(4) 内存磁盘
#mdroot_name="/boot/root.img"   # 指向包含磁盘镜像的文件路径
#rootdev="ufs:/dev/md0"         # 将根文件系统设置为 md(4) 设备

###  引导设置  ########################################
#loader_delay="3"               # 在加载任何内容前延迟的秒数。默认未设置且禁用(无延迟)
#autoboot_delay="10"            # 自动启动前延迟的秒数,-1 表示禁止用户中断,NO 表示禁用
#print_delay="1000000"          # loader 消息的慢速打印,便于调试。单位为微秒(1000000 微秒 = 1 秒)
#password=""                    # 修改启动选项的密码,避免修改启动选项
#bootlock_password=""           # 设置启动锁定密码,避免未授权启动(参见 check-password.4th(8))
#geom_eli_passphrase_prompt="NO" # 是否提示:输入 geli(8) 密码来挂载根文件系统
bootenv_autolist="YES"          # 自动填充 ZFS 启动环境列表
#beastie_disable="NO"           # 是否启用 Beastie(小恶魔)启动菜单
efi_max_resolution="1x1"        # 设置 EFI 引导下使用的最大分辨率:可选 480p、720p、1080p、1440p、2160p/4k、5k;自定义宽 x 高(例如 1920x1080)
#kernels="kernel kernel.old"            # 在启动菜单中显示的内核列表
kernels_autodetect="YES"                # 自动检测 /boot 中的内核目录
#loader_gfx="YES"                       # 当图形可用时使用图形界面
#loader_logo="orbbw"                    # 可选启动 Logo 有:orbbw、orb、fbsdbw、beastiebw、beastie、none
#comconsole_speed="115200"              # 设置当前串口控制台速率
#console="vidconsole"                   # 以逗号(,)或空格( )分隔的控制台列表
#currdev="disk1s1a"                     # 设置当前设备
module_path="/boot/modules;/boot/firmware;/boot/dtb;/boot/dtb/overlays"  # 设置模块搜索路径
module_blacklist="drm drm2 radeonkms i915kms amdgpu if_iwlwifi if_rtw88 if_rtw89"  # 引导器模块黑名单
module_blacklist="${module_blacklist} nvidia nvidia-drm nvidia-modeset"        # 追加黑名单模块
#prompt="\\${interpret}"                        # 设置 loader 命令提示符
#root_disk_unit="0"                     # 强制设置根磁盘单元号
#rootdev="disk1s1a"                     # 设置根文件系统
#dumpdev="disk1s1b"                     # 在启动早期设置 dump 设备
#tftp.blksize="1428"                    # 设置 RFC 2348 TFTP 块大小。若 TFTP 服务器不支持 RFC 2348,则块大小为 512 有效值范围:(8,9007)
#twiddle_divisor="16"                   # 减慢进度指示器 < 16 < 加快进度指示器

###  内核设置  ########################################
# 以下 boot_ 变量通过赋值来启用
# 它们在内核环境中存在(参见 kenv(1))时,效果与设置对应的启动标志相同(参见 boot(8))。
#boot_askname=""        # -a:提示用户输入根设备名称
#boot_cdrom=""          # -C:尝试从 CD-ROM 光学介质挂载根文件系统
#boot_ddb=""            # -d:指示内核通过 DDB 调试器模式启动
#boot_dfltroot=""       # -r:使用静态配置的根文件系统
#boot_gdb=""            # -g:为内核调试器选择 gdb-remote 模式
#boot_multicons=""      # -D:使用多个控制台
#boot_mute=""           # -m:静默控制台
#boot_pause=""          # -p:在设备探测时每行暂停
#boot_serial=""         # -h:使用串口控制台
#boot_single=""         # -s:以单用户模式启动系统
#boot_verbose=""        # -v:打印额外调试信息
#init_path="/sbin/init:/sbin/oinit:/sbin/init.bak:/rescue/init"     # 设置 init 的候选路径列表
#init_shell="/bin/sh"   # init(8) 使用的 shell 二进制文件
#init_script=""         # init(8) 在 chroot 前运行的初始脚本
#init_chroot=""         # init(8) 要 chroot 的目录

###  内核可调参数  ########################################
#hw.physmem="1G"                # 限制物理内存大小。参见 loader(8)
#kern.dfldsiz=""                # 设置初始数据段大小限制
#kern.dflssiz=""                # 设置初始堆栈大小限制
#kern.hz="100"                  # 设置内核时间间隔定时器频率
#kern.maxbcache=""              # 设置最大缓冲区缓存 KVA 存储
#kern.maxdsiz=""                # 设置最大数据段大小
#kern.maxfiles=""               # 设置系统全局最大打开文件数
#kern.maxproc=""                # 设置最大进程数
#kern.maxssiz=""                # 设置最大堆栈大小
#kern.maxswzone=""              # 设置最大交换元 KVA 存储
#kern.maxtsiz=""                # 设置最大文本段大小
#kern.maxusers="32"             # 设置各种静态表的大小
#kern.msgbufsize="65536"        # 设置内核消息缓冲区大小
#kern.nbuf=""                   # 设置缓冲区头数量
#kern.ncallout=""               # 设置最大定时器事件数量
#kern.ngroups="1023"            # 设置最大附加组数
#kern.sgrowsiz=""               # 设置堆栈增长量
#kern.cam.boot_delay="10000"    # 根挂载时 CAM 总线注册延迟(毫秒),当 USB 设备作为根分区时有用
#kern.cam.scsi_delay="2000"     # 扫描 SCSI 前的延迟(毫秒)
#kern.ipc.maxsockets=""         # 设置最大可用套接字数量
#kern.ipc.nmbclusters=""        # 设置 mbuf 集群数量
#kern.ipc.nsfbufs=""            # 设置 sendfile(2) 缓冲区数量
#net.inet.tcp.tcbhashsize=""    # 设置 TCBHASHSIZE 值(TCP 控制块哈希表的大小)
#vfs.root.mountfrom=""          # 指定根分区
#vm.kmem_size=""                # 设置内核内存大小(字节)
#debug.kdb.break_to_debugger="0" # 允许控制台进入调试器
#debug.ktr.cpumask="0xf"        # 启用 KTR 的 CPU 位掩码
#debug.ktr.mask="0x1200"        # 启用的 KTR 事件位掩码
#debug.ktr.verbose="1"          # 启用 KTR 事件的控制台输出

### 模块加载语法示例  ##########################
#module_load="YES"              # 加载模块 "module"
#module_name="realname"         # 使用 "realname" 替代 "module"
#module_type="type"             # 加载时传递 "-t type"
#module_flags="flags"           # 传递 "flags" 给模块
#module_before="cmd"            # 在加载模块前执行 "cmd" 命令
#module_after="cmd"             # 在加载模块后执行 "cmd"
#module_error="cmd"             # 模块加载失败时执行 "cmd"

### 固件名称映射列表
# 在加载网卡驱动时内核会寻找对应的固件文件
iwm3160fw_type="firmware"   # iwm3160 固件类型
iwm7260fw_type="firmware"   # iwm7260 固件类型
iwm7265fw_type="firmware"   # iwm7265 固件类型
iwm8265fw_type="firmware"   # iwm8265 固件类型
iwm9260fw_type="firmware"   # iwm9260 固件类型
iwm3168fw_type="firmware"   # iwm3168 固件类型
iwm7265Dfw_type="firmware"  # iwm7265D 固件类型
iwm8000Cfw_type="firmware"  # iwm8000C 固件类型
iwm9000fw_type="firmware"   # iwm9000 固件类型

配置引导选择界面的等待时间

引导选择界面的等待时间由 autoboot_delay 参数控制,该参数定义了系统在自动启动默认内核前等待用户干预的时长。通过修改此参数,可以根据实际需求调整启动流程的用户交互窗口。要调整等待时间,编辑 /boot/loader.conf 文件并新增以下条目:

autoboot_delay="2"

参数说明:2 表示设置系统启动自动引导延迟为 2 秒

精简启动输出信息

精简系统启动输出信息可以使启动过程更加简洁。这可以通过多维度配置实现:

  • 在引导器层面减少内核加载信息
  • 在服务启动阶段关闭状态提示
  • 在网络配置中优化等待逻辑

以下配置从引导到多用户启动阶段逐步减少输出信息:

# echo boot_mute="YES"  >> /boot/loader.conf # 静默启动并显示 Logo
# echo debug.acpi.disabled="thermal" >> /boot/loader.conf # 屏蔽可能存在的 ACPI 报错
# sysrc rc_startmsgs="NO" # 关闭进程启动信息
# sysrc dhclient_flags="-q" # 安静输出
# sysrc background_dhclient="YES" # 后台 DHCP
# sysrc synchronous_dhclient="YES" # 启动时同步 DHCP
# sysrc defaultroute_delay="0" # 立即添加默认路由
# sysrc defaultroute_carrier_delay="1" # 接收租约时间为 1 秒

如下图所示,设置后可看到 FreeBSD 启动 Logo

bootlogo.png

参考文献

vermaden. FreeBSD Desktop – Part 1 – Simplified Boot[EB/OL]. (2018-03-29)[2026-03-26]. https://vermaden.wordpress.com/2018/03/29/freebsd-desktop-part-1-simplified-boot/. 介绍 FreeBSD 引导加载程序的精简配置方法与启动优化实践。

FreeBSD Project. rc.conf(5)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?rc.conf(5).

FreeBSD Project. acpi(4)[EB/OL]. [2026-03-26]. https://man.freebsd.org/cgi/man.cgi?acpi(4).

FreeBSD Project. loader(8)[EB/OL]. [2026-04-17]. https://man.freebsd.org/cgi/man.cgi?query=loader&sektion=8. 系统引导加载程序手册页。

FreeBSD Project. bsdinstall(8)[EB/OL]. [2026-04-17]. https://man.freebsd.org/cgi/man.cgi?query=bsdinstall&sektion=8. FreeBSD 安装程序手册页。

控制台屏幕保护程序的配置与应用

默认情况下,控制台驱动程序在屏幕空闲时不会执行任何特殊处理。如果预计长时间让显示器保持开启并处于空闲状态,应启用屏幕保护程序以防止烧屏

使用 bsdconfig 配置屏幕保护程序

可以通过 bsdconfig 工具配置屏幕保护程序:

$ bsdconfig 

执行命令后,将显示如下界面:

┌---------------------┤System Console Screen Saver├---------------------┐
│ By default, the console driver will not attempt to do anything        │
│ special with your screen when it's idle.  If you expect to leave your │
│ monitor switched on and idle for long periods of time then you should │
│ probably enable one of these screen savers to prevent burn-in.        │
│ ┌-------------------------------------------------------------------┐ │
│ │   1 None    Disable the screensaver                               │ │
│ │   2 Blank   Blank screen                                          │ │
│ │   3 Beastie "BSD Daemon" animated screen saver (graphics)         │ │
│ │   4 Daemon  "BSD Daemon" animated screen saver (text)             │ │
│ │   5 Dragon  Dragon screensaver (graphics)                         │ │
│ │   6 Fade    Fade out effect screen saver                          │ │
│ │   7 Fire    Flames effect screen saver                            │ │
│ │   8 Green   "Green" power saving mode (if supported by monitor)   │ │
│ │   9 Logo    FreeBSD "logo" animated screen saver (graphics)       │ │
│ │   a Rain    Rain drops screen saver                               │ │
│ │   b Snake   Draw a FreeBSD "snake" on your screen                 │ │
│ │   c Star    A "twinkling stars" effect                            │ │
│ │   d Warp    A "stars warping" effect                              │ │
│ │   Timeout   Set the screen saver timeout interval                 │ │
│ ┌-------------------------------------------------------------------┐ │
├-----------------------------------------------------------------------┤
│                         [  OK  ]     [Cancel]                         │
└----------------- Choose a nifty-looking screen saver -----------------┘
Table 1: 屏幕保护程序
菜单 说明
1 None Disable the screensaver 1 无 禁用屏幕保护程序
2 Blank Blank screen 2 空白 显示空白屏幕
3 Beastie "BSD Daemon" animated screen saver (graphics) 3 Beastie “BSD Daemon” 动画屏幕保护程序(图形)
4 Daemon "BSD Daemon" animated screen saver (text) 4 Daemon “BSD Daemon” 动画屏幕保护程序(文字)
5 Dragon Dragon screensaver (graphics) 5 龙 动画屏幕保护程序(图形)
6 Fade Fade out effect screen saver 6 淡出 屏幕保护程序淡出效果
7 Fire Flames effect screen saver 7 火焰 火焰效果屏幕保护程序
8 Green "Green" power saving mode (if supported by monitor) 8 绿色“绿色”省电模式(如果显示器支持)
9 Logo FreeBSD "logo" animated screen saver (graphics) 9 标志 FreeBSD“logo”动画屏幕保护程序(图形)
a Rain Rain drops screen saver a 雨滴 雨滴屏幕保护程序
b Snake Draw a FreeBSD "snake" on your screen b 蛇 在屏幕上绘制 FreeBSD“蛇”
c Star A "twinkling stars" effect c 星星 闪烁星星效果
d Warp A "stars warping" effect d 扭曲 星星扭曲效果
Timeout Set the screen saver timeout interval 超时 设置屏幕保护程序超时时间

手动写入配置

也可以通过手动编辑配置文件来设置屏幕保护程序。编辑 /etc/rc.conf 文件,添加以下配置:

saver="beastie" # 选择屏保样式
blanktime="300" # 屏幕超时时间

可选的屏幕保护程序模块如下:

$ ls /boot/kernel/*saver*
/boot/kernel/beastie_saver.ko   /boot/kernel/fire_saver.ko      /boot/kernel/snake_saver.ko
/boot/kernel/blank_saver.ko     /boot/kernel/green_saver.ko     /boot/kernel/star_saver.ko
/boot/kernel/daemon_saver.ko    /boot/kernel/logo_saver.ko      /boot/kernel/warp_saver.ko
/boot/kernel/dragon_saver.ko    /boot/kernel/plasma_saver.ko
/boot/kernel/fade_saver.ko      /boot/kernel/rain_saver.ko

自定义引导加载程序 Logo

可以自定义引导加载程序的 Logo 以个性化系统启动界面。默认有几种 Logo 可选:

  • fbsdbw
  • beastie
  • beastiebw
  • orb(UEFI 下彩色版)
  • orbbw(默认)
  • none(无 Logo)

以 fbsdbw 为例,在 /boot/loader.conf 文件中写入:

# 设置引导加载程序使用的 logo 名称为 fbsdbw
loader_logo="fbsdbw"
Next: UEFI固件 Home: 系统管理