适用系统

  • Fedora Workstation / Server 所有版本
  • Fedora CoreOS(特殊,见下文)
  • Fedora Silverblue(特殊,见下文)

Fedora 特点

  • 使用 GRUB2
  • 默认启用 SELinux(enforcing 模式)
  • 使用 systemd
  • 文件系统通常为 Btrfs(F33+)或 ext4
  • 可能使用 LVM

方法一:rd.break(推荐)

与 RHEL/CentOS 相同的方法

步骤 1:编辑 GRUB

  1. 启动时按 e 编辑启动项

  2. 找到 linux 行(Fedora 较新版本不带 16 后缀):

1
linux ($root)/vmlinuz-6.0.0-0.rc1.fc38 root=/dev/mapper/fedora-root ro rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet
  1. 在行末添加:
1
rd.break
  1. Ctrl+X 启动

步骤 2:修改密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 重新挂载
mount -o remount,rw /sysroot

# chroot
chroot /sysroot

# 修改密码
passwd root
passwd username

# SELinux 重标记(必须!)
touch /.autorelabel

# 退出
exit
reboot

方法二:init=/bin/bash

操作步骤

  1. GRUB 编辑,linux 行末添加:
1
init=/bin/bash
  1. Ctrl+X 启动

  2. 进入 bash 后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 挂载根分区
mount -o remount,rw /

# 如果是 Btrfs(Fedora 33+)
mount -o remount,rw /

# 激活 LVM(如果使用)
lvm vgchange -ay

# 修改密码
passwd root

# SELinux 重标记
touch /.autorelabel

# 重启
exec /sbin/init

方法三:rescue.target

使用 systemd 救援模式

  1. GRUB 编辑,linux 行末添加:
1
systemd.unit=rescue.target
  1. 启动后进入救援模式

  2. 可能需要输入 root 密码(如果知道)

  3. 如果需要绕过密码,使用 rd.breakinit=/bin/bash


方法四:emergency.target

更低级别的紧急模式:

1
systemd.unit=emergency.target

方法五:Fedora Live USB

步骤

  1. 使用 Fedora Live USB 启动

  2. 挂载目标系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看分区
lsblk

# 激活 LVM
sudo vgchange -ay

# 挂载(ext4)
sudo mount /dev/mapper/fedora-root /mnt

# 挂载(Btrfs,Fedora 33+)
sudo mount /dev/mapper/fedora-root /mnt
# Btrfs 子卷(如果使用)
sudo mount -o subvol=root /dev/mapper/fedora-root /mnt
  1. chroot 并修改:
1
2
3
4
5
6
7
8
9
10
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

passwd root
touch /.autorelabel

exit
sudo reboot

Btrfs 文件系统(Fedora 33+)

默认子卷布局

1
2
3
fedora-root
├── root (根文件系统)
└── home (家目录)

挂载命令

1
2
3
4
5
# 挂载默认子卷
mount /dev/mapper/fedora-root /mnt

# 指定子卷挂载
mount -o subvol=root /dev/mapper/fedora-root /mnt

修改 shadow 文件

1
2
mount /dev/mapper/fedora-root /mnt
nano /mnt/root/etc/shadow # 注意 Btrfs 子卷路径

SELinux 处理

必须执行重标记

Fedora 强制启用 SELinux,修改 shadow 后必须:

1
touch /.autorelabel

临时禁用 SELinux 启动

GRUB 添加:

1
selinux=0

1
enforcing=0

永久禁用(不推荐)

编辑 /etc/selinux/config

1
SELINUX=disabled

LVM 配置

典型 Fedora LVM 布局

1
2
3
4
5
6
/dev/sda1     /boot      ext4/xfs
/dev/sda2 LVM PV
└─ fedora
├─ root / ext4/Btrfs
├─ swap swap
└─ home /home ext4/Btrfs

手动激活 LVM

1
2
3
4
pvscan
vgscan
vgchange -ay
lvscan

Fedora CoreOS / Silverblue

特殊系统说明

这些是不可变系统,传统方法可能不适用:

Fedora CoreOS

  • 使用 Ignition 配置
  • 需要通过 Ignition 配置修改密码
  • 或使用 Live 环境修改

Fedora Silverblue

  • 使用 rpm-ostree
  • 根分区只读
  • 需要特殊处理

CoreOS 密码重置

  1. 准备新的 Ignition 配置文件
  2. 或通过 Live 环境挂载修改

常见问题

Q: Btrfs 挂载后看不到文件?

A: 检查是否需要指定子卷:

1
2
btrfs subvolume list /mnt
mount -o subvol=root /dev/xxx /mnt

Q: 首次启动非常慢?

A: 正常现象,SELinux 正在重新标记所有文件。

Q: passwd 命令提示错误?

A: 确保已经 chroot /sysroot 且文件系统可写。

Q: 使用 UEFI 找不到 linux 行?

A: UEFI 模式下行名相同,查找 linux 开头的行。


适用系统:Fedora Workstation/Server 所有版本