NakanoMiku39
Articles5
Tags12
Categories0

Archive

使用Live ISO修复Fedora主系统

使用Live ISO修复Fedora主系统

接上篇安装 Fedora 的记录。如果主系统已经进不去,或者进去之后没有网络、登录管理器配置错了,这时 Live ISO 就是最方便的救援环境。核心思路是:用 Live ISO 启动一个可用系统,再把硬盘里的主系统挂载出来,最后用 chroot 进入主系统内部修复。

AIGC:这篇文章由AI生成

Live ISO 能解决什么问题

Live ISO 启动的是一个临时系统。它使用自己的 kernel、initramfs 和用户空间,不依赖硬盘里的主系统能不能正常启动。因此主系统出现下面这些问题时,Live ISO 仍然可以作为救援入口:

  • 装完系统后缺少无线网卡 firmware,进系统没有网络
  • greetd、GDM、SDDM 配置错误,登录界面起不来
  • /etc/fstab、内核参数、GRUB 配置写错,导致启动失败
  • 需要离线修改主系统里的配置文件
  • 需要在主系统里安装软件包、重建 initramfs 或重新生成引导配置

这套流程的关键命令是:

1
2
3
mount -o subvol=root ...
mount --bind ...
chroot ...

下面按顺序讲。

找到主系统分区

进入 Live ISO 后,先查看磁盘和文件系统:

1
lsblk -f

Fedora 默认安装经常会使用 Btrfs,并且把一个 Btrfs 文件系统拆成多个 subvolume。常见布局大概是:

1
2
3
/dev/nvme0n1p1  vfat   EFI System Partition
/dev/nvme0n1p2 ext4 /boot
/dev/nvme0n1p3 btrfs Fedora 主系统

具体设备名要以自己的机器为准,可能是 /dev/nvme0n1p3,也可能是 /dev/sda3。如果使用了 LUKS 加密,还需要先解锁:

1
sudo cryptsetup open /dev/nvme0n1p3 cryptroot

解锁后,真正要挂载的设备就变成了:

1
/dev/mapper/cryptroot

为什么要 mount -o subvol=root

Btrfs 的 subvolume 可以理解为同一个 Btrfs 文件系统里的多个独立目录树。Fedora 常见布局里,根目录 / 不是直接放在 Btrfs 顶层,而是放在名为 root 的 subvolume 里;用户目录 /home 则可能放在名为 home 的 subvolume 里。

所以救援时如果只写:

1
sudo mount /dev/nvme0n1p3 /mnt

挂到 /mnt 的不一定是主系统真正的根目录。你可能会看到一些 subvolume 名字,而不是熟悉的 /etc/usr/var

正确做法是明确挂载根 subvolume:

1
sudo mount -o subvol=root /dev/nvme0n1p3 /mnt

如果是 LUKS 解锁后的系统,则是:

1
sudo mount -o subvol=root /dev/mapper/cryptroot /mnt

挂载之后检查一下:

1
ls /mnt

如果能看到 etcusrvarhomeboot 等目录,说明主系统根目录已经挂载到 /mnt

如果还需要修复用户配置,或者 /home 是单独的 subvolume,可以继续挂载:

1
sudo mount -o subvol=home /dev/nvme0n1p3 /mnt/home

同样,如果是加密系统,把设备名换成 /dev/mapper/cryptroot

挂载 boot 和 EFI 分区

如果只是改 /etc/greetd/config.toml 这类普通配置,可能不挂载 /boot/boot/efi 也能完成。但如果要重建 initramfs、重新生成 GRUB 配置、安装内核或修复引导,就应该把它们也挂上。

示例:

1
2
sudo mount /dev/nvme0n1p2 /mnt/boot
sudo mount /dev/nvme0n1p1 /mnt/boot/efi

这里的分区编号仍然要按 lsblk -f 的结果调整。不要照抄设备名。

为什么要 mount –bind 虚拟文件系统

把主系统根目录挂到 /mnt 之后,还不能直接 chroot 完事。因为 /mnt 里虽然有主系统的文件,但缺少当前正在运行的内核提供的运行时接口。

典型的几个目录是:

目录 作用
/dev 设备节点,例如磁盘、终端、随机数设备
/dev/pts 伪终端,很多交互式程序需要它
/proc 进程和内核状态接口,例如 /proc/cpuinfo/proc/mounts
/sys 设备、驱动、内核模块等 sysfs 信息
/run 当前启动后的运行时状态,包含网络、systemd、临时 socket 等

mount --bind 的作用是把 Live ISO 当前系统里的某个目录重新挂载到另一个位置。它不是复制文件,而是让两个路径看到同一棵目录树。

也就是说:

1
sudo mount --bind /dev /mnt/dev

会让 chroot 后的 /dev 实际指向 Live ISO 当前的 /dev。这样主系统里的命令运行时,就能看到真实设备节点。

完整操作如下:

1
2
3
4
5
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run

这样做的原因是:chroot 只改变进程看到的根目录,它不会帮你创建 /dev/proc/sys 这些运行时接口。如果不 bind mount,很多命令会出现奇怪问题,比如 dnfdracutgrub2-mkconfig 找不到设备信息,或者脚本无法读取当前挂载状态。

chroot 进入主系统

准备好挂载点之后,就可以进入主系统:

1
sudo chroot /mnt /bin/bash

chroot 的意思是 change root。执行之后,当前 shell 看到的 / 就不再是 Live ISO 的根目录,而是刚才挂载到 /mnt 的主系统根目录。

因此在 chroot 里面执行:

1
cat /etc/fedora-release

读到的是主系统的 /etc/fedora-release,不是 Live ISO 的。执行:

1
dnf install iwlwifi-mvm-firmware

安装目标也是主系统,而不是 Live ISO。

这就是 Live ISO 修复主系统的核心:运行环境来自 Live ISO,但文件系统目标切换到了硬盘里的主系统。

示例一:修复缺失的 iwlwifi firmware

如果上篇提到的无线网卡问题是因为缺少 iwlwifi-mvm-firmware,可以在 chroot 里安装:

1
dnf install iwlwifi-mvm-firmware

如果 DNS 解析失败,可以先退出 chroot,把 Live ISO 的 DNS 配置复制进去:

1
2
3
exit
sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt /bin/bash

安装完成后,普通无线网卡 firmware 通常重启即可生效。为了稳妥,也可以重建 initramfs:

1
dracut -f

然后退出并重启。

示例二:修复 greetd 配置

如果 greetd 配错导致登录界面进不去,可以在 chroot 中直接编辑:

1
nano /etc/greetd/config.toml

例如把默认会话修成:

1
2
command = "tuigreet --cmd \"dbus-run-session niri\""
user = "greetd"

如果需要启用 greetd

1
systemctl enable greetd.service

注意,在 chroot 里一般只适合 enabledisable 这类修改开机状态的操作,不适合 startrestart 服务。因为当前真正运行的是 Live ISO 的 systemd,不是主系统的 systemd。

退出和卸载

修复完成后先退出 chroot:

1
exit

然后卸载挂载点。最简单的方式是:

1
sudo umount -R /mnt

如果提示 busy,通常是还有 shell 或程序停留在 /mnt 下面。确认所有终端都已经离开 /mnt 后再卸载。

最后重启:

1
reboot

总结

这一整套流程可以概括成四步:

1
2
3
4
用 Live ISO 启动一个可工作的临时系统
用 mount -o subvol=root 挂载主系统根目录
用 mount --bind 提供 /dev、/proc、/sys、/run 等运行时接口
用 chroot 把命令执行环境切换到主系统里

理解这几个命令之后,Live ISO 就不只是“重装系统用的 U 盘”,而是一个很实用的救援环境。很多看起来很严重的问题,其实只是需要从外部把主系统挂起来,改掉错误配置或者补齐缺失软件包。

Author:NakanoMiku39
Link:http://nakanomiku39.github.io/2026/06/17/%E4%BD%BF%E7%94%A8Live%20ISO%E4%BF%AE%E5%A4%8DFedora%E4%B8%BB%E7%B3%BB%E7%BB%9F/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可