Ubuntu From Scratch (UFS) 是一个比较冷门的项目,它不像 Linux From Scratch (LFS) 那样有庞大的社区和详细的文档。因此,调试 UFS 可能会比调试标准 Ubuntu 或 LFS 更加困难。
由于 UFS 本质上是一个基于 Ubuntu 基础构建自定义系统的过程,调试通常分为几个阶段:构建阶段、引导阶段和运行时阶段。
以下是针对 UFS 调试的系统性指南:
在调试之前,请确认你使用的是哪种“UFS”。
debootstrap 或 mmdebstrap 在空白分区或目录中安装一个最小的 Ubuntu 系统。大多数“UFS”问题实际上都是 Debootstrap/Chroot 问题或 Initramfs/Bootloader 问题。
如果你在构建过程中卡住(例如 debootstrap 报错或配置软件包失败):
debootstrap 通常会有输出。如果是手动操作,检查终端输出。
不要直接运行脚本,尝试手动进入 Chroot 环境查看状态:
# 假设你的 UFS 目标目录是 /mnt/ufs
sudo mount --bind /dev /mnt/ufs/dev
sudo mount --bind /proc /mnt/ufs/proc
sudo mount --bind /sys /mnt/ufs/sys
sudo chroot /mnt/ufs /bin/bash
# 在 Chroot 内部检查
apt update
dpkg --configure -a # 修复中断的配置
如果在 Chroot 内无法解析域名,说明 /etc/resolv.conf 没有复制过去。
确保构建主机安装了必要的工具:
sudo apt install debootstrap schroot gparted
这是 UFS 最容易出问题的地方。系统无法启动通常表现为黑屏、Grub Rescue 或 Kernel Panic。
如果新系统无法引导,用 Ubuntu Live USB 启动,挂载你的 UFS 分区,然后 Chroot 进去修复。
mount /dev/sdXn /mnt # 替换 sdXn 为你的根分区
mount /dev/sdX1 /mnt/boot/efi # 如果是 UEFI,挂载 EFI 分区
for i in /dev /dev/pts /proc /sys /sys/firmware/efi/efivars /run; do sudo mount --bind $i /mnt$i; done
sudo chroot /mnt
# 重新安装内核和 grub
apt update
apt install --reinstall linux-image-generic
grub-install /dev/sdX # 注意是磁盘(如 sda),不是分区
update-grub
exit
如果启动时卡在 initramfs 或 (initramfs) 提示符,说明根文件系统没有挂载成功。
(initramfs) 提示符下输入 ls /dev/sd* 查看是否能看到硬盘。如果看不到,可能是缺少 SATA/NVMe 驱动(内核配置问题)。e 编辑启动项,看 root=UUID=... 是否正确。进入 LiveCD 用 blkid 核对 UUID。检查 /etc/default/grub 和 /boot/grub/grub.cfg。
如果系统能引导,但登录后有问题(网络、图形界面、服务失败):
Ubuntu 使用 systemd,日志非常关键。
# 查看本次启动的报错
journalctl -p 3 -xb
# 查看上次启动失败的日志
journalctl -p 3 -b -1
# 查看特定服务(例如网络)
journalctl -u NetworkManager.service
UFS 通常没有 NetworkManager 或 netplan 配置。
/etc/netplan/ 是否有配置文件。/etc/network/interfaces(如果使用 ifupdown)。如果显卡、声卡不工作:
lspci -k # 查看硬件和加载的驱动
dmesg | grep -i error
由于 UFS 文档较少,你可能需要参考 Linux From Scratch (LFS) 的调试思路,因为原理相似:
tee 记录日志。make 2>&1 | tee build.log
/etc/fstab/etc/initramfs-tools/modules (如果有)/boot/grub/grub.cfgip link 和 dhclient 手动测试,不要直接上复杂的网络管理器。| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| Kernel Panic - not syncing: VFS: Unable to mount root fs | 内核找不到根分区或缺少驱动 | 检查 Grub 中的 root= 参数;重新生成 initramfs (update-initramfs -u) |
| Grub Rescue > | Grub 安装损坏或路径错误 | 使用 LiveCD 重新安装 Grub |
| (initramfs) 提示符 | 根文件系统 UUID 错误或磁盘驱动未加载 | 检查 blkid 和 Grub 配置 |
| 启动后黑屏 | 显卡驱动问题或显示管理器 (GDM/SDDM) 未装 | 进入 TTY (Ctrl+Alt+F3),安装驱动或 ubuntu-desktop |
| DNS 解析失败 | /etc/resolv.conf 缺失或链接错误 |
手动添加 nameserver 8.8.8.8 或安装 resolvconf |
如果你发现 UFS 项目过于陈旧或难以维护,建议考虑以下替代方案,它们更容易调试且有社区支持:
debootstrap 手动构建一个最小 Ubuntu(这是 UFS 的核心,但你可以完全控制步骤)。Ubuntu Core 用于嵌入式或定制场景。LFS (Linux From Scratch) 如果你真的想从源码构建一切(文档极其详细)。如果你能提供更具体的报错信息(例如截图或日志文本),我可以给出更精确的解决方案。