Debian From Scratch 的启动流程概览
- 启动过程与传统 Debian 一致,分为硬件上电自检、引导加载、内核初始化、用户空间初始化与登录四个阶段。DFS 的差别在于这些组件多由你自行构建与配置,而不是由安装器自动完成。总体链路为:BIOS/UEFI → MBR/GPT → GRUB → vmlinuz + initramfs → /sbin/init(或 systemd)→ 登录。其中 /boot 下通常包含 vmlinuz-<版本> 与 initrd.img-<版本> 等文件,供 GRUB 加载内核与早期用户空间使用。
阶段一 固件与引导加载
- 固件阶段:主板 BIOS/UEFI 完成自检并选择启动介质(USB/硬盘/光盘)。传统 MBR 或 GPT 分区表决定如何定位引导代码。
- 引导阶段:执行磁盘上的引导代码(如 GRUB)。GRUB 读取配置文件(常见为 /boot/grub/grub.cfg),加载指定的 内核镜像 vmlinuz 与 initramfs,并将控制权交给内核。若使用 UEFI,还会从 EFI 系统分区(ESP) 加载 GRUB 的 EFI 程序。
阶段二 内核与早期用户空间
- 内核初始化:内核解压到内存后完成核心子系统初始化,挂载 rootfs(根文件系统),并启动第一个用户空间进程(传统为 /sbin/init,现代系统多为 systemd,其 PID 为 1)。
- 早期用户空间:若根文件系统位于 LVM/RAID/Btrfs/ZFS 或需要加载专有驱动,内核会先借助 initramfs 提供的临时根环境与驱动完成根切换(pivot_root),然后再挂载真正的根分区。
阶段三 用户空间初始化与登录
- 运行级别与初始化脚本(SysV 风格):读取 /etc/inittab 确定默认运行级别(如 2–5 为多用户),按顺序执行 /etc/rcS.d(系统级早期初始化)与 /etc/rcN.d(对应运行级别)中的脚本链接,这些链接指向 /etc/init.d 的实际服务脚本,按编号从小到大启动/停止服务。
- systemd 风格(若采用):由 systemd 并行启动单元(target),替代传统的 rcN.d 脚本体系,完成网络、日志、登录等服务与目标的激活。
- 登录环节:启动 getty 提供本地终端登录,或通过 sshd 提供远程登录;完成认证后为用户启动配置的 shell。
DFS 场景下的关键要点与排查
- 引导配置:确保 /boot/grub/grub.cfg 正确指向你的 vmlinuz 与 initramfs;UEFI 需安装到 ESP 并生成正确的 EFI 条目(如使用 grub-install --target=x86_64-efi --efi-directory=/boot/efi 后执行 grub-mkconfig -o /boot/grub/grub.cfg)。
- 根文件系统与 initramfs:若根在 LVM/加密/RAID,需在内核参数或 initramfs 配置中启用相应模块与工具,确保能顺利切换根;必要时重新生成 initramfs(如使用 update-initramfs -u)。
- 早期登录问题:若显卡驱动导致图形阶段卡死,可在 GRUB 启动项的内核命令行末尾临时添加 nomodeset 以进入系统后再安装合适驱动。