- 找到根分区设备名称
运行以下命令查看你的根分区是哪个设备(例如 /dev/nvme0n1p2 或 /dev/mapper/...):
bash
mount | grep " / "
真机显示
bash
mount | grep " / "
/dev/nvme1n1p1 on / type btrfs (rw,relatime,seclabel,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)
记下输出中的第一列(设备名),假设它是 <DEVICE>。
- 创建临时挂载点并挂载顶层 (ID 5)
将<DEVICE>替换为你刚才记下的设备名(例如 /dev/nvme0n1p2):
创建临时目录
bash
sudo mkdir -p /mnt/btrfs_top
挂载顶层 (subvolid=5)
请将下面的 替换为实际的设备路径!
bash
sudo mount -o subvolid=5 <DEVICE> /mnt/btrfs_top
真机显示
bash
sudo mount -o subvolid=5 /dev/nvme1n1p1 /mnt/btrfs_top
user@fedora:/mnt$ ll btrfs_top/
总计 16
dr-xr-xr-x. 1 root root 0 2025年 7月30日 afs
lrwxrwxrwx. 1 root root 7 2025年 7月30日 bin -> usr/bin
dr-xr-xr-x. 1 root root 630 3月17日 09:10 boot
drwx------. 1 root root 12 10月23日 12:09 builddir
drwxr-xr-x. 1 root root 0 3月17日 07:29 dev
drwxr-xr-x. 1 root root 4862 3月17日 09:10 etc
drwxr-xr-x. 1 root root 24 3月16日 23:42 home
lrwxrwxrwx. 1 root root 7 2025年 7月30日 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 2025年 7月30日 lib64 -> usr/lib64
drwxr-xr-x. 1 root root 0 2025年 7月30日 media
drwxr-xr-x. 1 root root 18 3月17日 18:35 mnt
drwxr-xr-x. 1 root root 0 2025年 7月30日 opt
drwxr-xr-x. 1 root root 0 3月17日 07:29 proc
dr-xr-x---. 1 root root 154 3月17日 08:55 root
drwxr-xr-x. 1 root root 0 3月17日 07:29 run
lrwxrwxrwx. 1 root root 8 2025年 7月30日 sbin -> usr/sbin
drwxr-xr-x. 1 root root 0 2025年 7月30日 srv
drwxr-xr-x. 1 root root 0 3月17日 07:29 sys
drwxrwxrwt. 1 root root 0 3月17日 07:29 tmp
drwxr-xr-x. 1 root root 168 3月16日 23:46 usr
drwxr-xr-x. 1 root root 200 3月17日 08:53 var
(如果你不确定设备名,可以运行 lsblk 查看,通常是最大的那个分区)
- 验证并重命名
挂载成功后,你在 /mnt/btrfs_top 下应该能看到 root, home 等目录。现在执行重命名:
列出内容确认 (你应该看到 root 和 home)
bash
ls /mnt/btrfs_top
将 root 重命名为 @
bash
sudo mv /mnt/btrfs_top/root /mnt/btrfs_top/@
再次确认 (现在应该看到 @ 和 home,没有 root 了)
bash
ls /mnt/btrfs_top
真机显示
bash
sudo mv btrfs_top/root/ btrfs_top/@
user@fedora:/mnt$ ll btrfs_top/
总计 16
dr-xr-x---. 1 root root 154 3月17日 08:55 @
dr-xr-xr-x. 1 root root 0 2025年 7月30日 afs
lrwxrwxrwx. 1 root root 7 2025年 7月30日 bin -> usr/bin
dr-xr-xr-x. 1 root root 630 3月17日 09:10 boot
drwx------. 1 root root 12 10月23日 12:09 builddir
drwxr-xr-x. 1 root root 0 3月17日 07:29 dev
drwxr-xr-x. 1 root root 4862 3月17日 09:10 etc
drwxr-xr-x. 1 root root 24 3月16日 23:42 home
lrwxrwxrwx. 1 root root 7 2025年 7月30日 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 2025年 7月30日 lib64 -> usr/lib64
drwxr-xr-x. 1 root root 0 2025年 7月30日 media
drwxr-xr-x. 1 root root 18 3月17日 18:35 mnt
drwxr-xr-x. 1 root root 0 2025年 7月30日 opt
drwxr-xr-x. 1 root root 0 3月17日 07:29 proc
drwxr-xr-x. 1 root root 0 3月17日 07:29 run
lrwxrwxrwx. 1 root root 8 2025年 7月30日 sbin -> usr/sbin
drwxr-xr-x. 1 root root 0 2025年 7月30日 srv
drwxr-xr-x. 1 root root 0 3月17日 07:29 sys
drwxrwxrwt. 1 root root 0 3月17日 07:29 tmp
drwxr-xr-x. 1 root root 168 3月16日 23:46 usr
drwxr-xr-x. 1 root root 200 3月17日 08:53 var
- 清理临时挂载
bash
sudo umount /mnt/btrfs_top
sudo rmdir /mnt/btrfs_top
🔧 关键后续:修改 /etc/fstab
重命名完成后,系统还不知道要启动 @ 子卷。你必须修改配置文件,否则重启后会找不到根目录!
打开 fstab 文件:
bash
sudo nano /etc/fstab
真机显示
bash
sudo vi /etc/fstab
# /etc/fstab
# Created by anaconda on Mon Mar 16 23:32:49 2026
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=8e8acc8c-d8c7-4902-b167-b55cfe90e066 / btrfs subvolid=5,subvol=@ 0 0
UUID=1C35-7F60 /boot/efi vfat umask=0077,shortname=winnt 0 2
找到挂载点为 / 的那一行。
它现在看起来应该是这样的:
bash
UUID=xxxx-xxxx... / btrfs subvol=root,compress=zstd:1 0 0
(注意 subvol=root 部分)
修改它:
将 subvol=root 改为 subvol=@。
修改后:
bash
UUID=xxxx-xxxx... / btrfs subvol=@,compress=zstd:1 0 0
保存退出:
Ctrl + O -> Enter (保存)
Ctrl + X (退出)
更新 GRUB (保险起见):
bash
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
真机显示
bash
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found Windows Boot Manager on /dev/nvme0n1p1@/efi/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for UEFI Firmware Settings ...
done
🚀 最后一步:重启验证
bash
sudo reboot
重启登录后,运行以下命令确认成功:
bash
mount | grep " / "