[Internal testing communication] 把系统请进@子卷使用timeshift自动备份--debian13
Tofloor
poster avatar
LiuYongzhang
deepin
2026-01-30 09:10
Author

Debian 13 Btrfs 子卷配置完整操作步骤

本流程为分步落地式操作,全程基于实际环境(/dev/sda 系分区),命令可直接复制执行,每步包含「操作命令 + 验证步骤 + 关键说明」,确保闭环无坑,最终实现 @(根目录)+ @home(家目录)独立子卷配置,文件完整同步且系统正常引导。

前置说明

安装debian13选择「手动分区」,创建如下 3 个分区(忽略 U 盘,操作目标为系统硬盘,如 /dev/sda):

挂载点 文件系统 大小 分区类型(GPT 格式) 备注
/boot/efi(简写 efi) EFI 300MB EFI 系统分区 引导文件存放,必须创建
swap swap 16G 交换分区 等效虚拟内存,建议等于内存容量
/ btrfs 剩余全部空间 根分区 后续将拆分出 @/@home 子卷,暂先挂载为 /

* 全程使用 sudo 权限执行,若切换 root 用户可省略 sudo

  • 提前安装 rsync(文件同步必备, 默认自带,无则执行安装)。
  • 操作前备份 超重要数据(如移动硬盘),规避极端情况数据丢失。
  • 前置:安装rsync(无则执行,已有则跳过)

步骤 1:识别硬盘分区与精准查询 UUID(先认分区,再取标识)

操作目的

确认系统核心分区(避免误操作 U 盘),获取各分区 UUID(后续配置 fstab/GRUB 必需)。

1.1 用 lsblk 识别分区全貌

看所有硬盘/分区的挂载状态、大小,忽略U盘(/dev/sdb)

1.2 解读结果(根据自己的实际更改sda)

设备名 用途 操作优先级
/dev/sda 系统硬盘 GRUB 安装目标(仅硬盘名,不加分区号)
/dev/sda1 EFI 引导分区(/boot/efi) 必须挂载,用于 GRUB 更新
/dev/sda2 Swap 交换分区 无需操作,仅备查
/dev/sda3 Btrfs 核心分区(/、/home) 核心操作分区(子卷 / 同步 / 挂载)
/dev/sdb* U 盘(Ventoy) 完全忽略,避免误操作

1.3 精准查询各核心分区 UUID

# 1. 查询 EFI 分区(/dev/sda1)UUID
sudo blkid /dev/sda1

# 2. 查询 Swap 分区(/dev/sda2)UUID(备查)
sudo blkid /dev/sda2

# 3. 查询 Btrfs 核心分区(/dev/sda3)UUID(核心,全程沿用)
sudo blkid /dev/sda3

1.4 记录分区 - UUID 对应表(根据自己的实际修改)

设备名 分区类型 固定 UUID
/dev/sda1 EFI(vfat) 69A4-EC65
/dev/sda2 SWAP 0c9d74b6-18ea-4411-adce-9dc13ce91f44
/dev/sda3 Btrfs 580545c2-bd26-458f-8681-68d2742a4be7

1.5 关键说明

  • 仅操作 /dev/sda 系分区,/dev/sdb(U 盘)全程忽略。
  • UUID 记录后无需重复查询,后续配置均沿用此表。

步骤 2:创建临时挂载点并整分区挂载 Btrfs 分区

操作目的

创建临时目录,整分区挂载 /dev/sda3(不指定子卷),为后续子卷创建 / 重命名 / 文件同步提供前提。

2.1 创建临时挂载点

# 创建 /mnt/btrfs_temp,-p 避免目录已存在报错
sudo mkdir -p /mnt/btrfs_temp

2.2 整分区挂载 Btrfs 分区(核心前提)

# 整分区挂载 /dev/sda3 到 /mnt/btrfs_temp,不指定 subvol,可见所有子卷
sudo mount /dev/sda3 /mnt/btrfs_temp

2.3 验证挂载结果与当前子卷列表

# 1. 验证挂载状态(确认 /dev/sda3 挂载到 /mnt/btrfs_temp)
df -hT | grep /mnt/btrfs_temp

# 2. 验证当前子卷列表(确认现有子卷,如 @ 是否存在,@rootfs 是否有待重命名)
sudo btrfs subvolume list /mnt/btrfs_temp

2.4 关键说明

  • 此步骤为「整分区挂载」,而非单个子卷挂载,是后续子卷操作的核心前提。
  • 若挂载失败,检查 /dev/sda3 是否被占用(关闭无关程序)有的live系统会自动挂载到/media/用户名下面记得先卸载了sudo umount /media/用户名/(这里根据实际添完整的地址)

步骤 3:子卷操作(可选重命名 + 创建 @home + 同步 Home 文件)

操作目的

完成 @rootfs→@ 重命名(可选),创建独立 @home 子卷,将 @ 子卷内的 /home 文件完整同步到 @home 子卷(无挂载占用,同步更彻底)。

3.1 可选:子卷重命名(@rootfs → @)

若当前子卷已为 @,直接跳过此步;若需重命名,执行以下命令:

# 子卷重命名(原子卷:@rootfs,新子卷:@)
sudo btrfs subvolume rename /mnt/btrfs_temp/@rootfs /mnt/btrfs_temp/@

# 验证重命名结果(确认 @ 存在、@rootfs 消失)
sudo btrfs subvolume list /mnt/btrfs_temp

3.2 核心:创建 @home 子卷(与 @ 同级)

# 创建 @home 子卷,位于整分区挂载点下,与 @ 同级
sudo btrfs subvolume create /mnt/btrfs_temp/@home

# 验证 @home 创建结果(确认 @home 出现在子卷列表中)
sudo btrfs subvolume list /mnt/btrfs_temp

3.3 核心:rsync 同步 @ 子卷内的 Home 文件到 @home 子卷

# 同步 /mnt/btrfs_temp/@/home/(@子卷内原Home文件)到 /mnt/btrfs_temp/@home/(新子卷)
# 关键参数:-aAXv 保留权限/ACL/扩展属性/目录结构,--delete 同步冗余文件,路径末尾/不可省略
sudo rsync -aAXv --delete /mnt/btrfs_temp/@/home/ /mnt/btrfs_temp/@home/

3.4 验证同步结果(必做,确保文件完整无嵌套)

# 1. 查看 @home 子卷下文件(应直接显示用户目录/隐藏文件,无额外 home 嵌套目录)
ls -l /mnt/btrfs_temp/@home/

# 2. 查看隐藏文件(.config、.bashrc 等,验证用户配置文件无丢失)
ls -la /mnt/btrfs_temp/@home/

# 3. 粗略对比源和目标文件数(确认同步完整)
echo "@子卷内 Home 文件数:$(ls -A /mnt/btrfs_temp/@/home/ | wc -l)"
echo "@home 子卷文件数:$(ls -A /mnt/btrfs_temp/@home/ | wc -l)"

3.5 关键说明

  • 路径末尾 / 不可省略,否则会生成 @home/home/ 嵌套目录,导致后续 /home 挂载为空。
  • 同步必须用 sudo 执行,避免隐藏文件 / 权限丢失,导致用户配置异常。
  • 若同步提示「设备忙」,关闭所有访问 /home 的程序,重新执行。

(可选,谨慎执行)删除 @ 子卷内原有 /home 下的文件(释放空间,避免冲突)

🔴 超高风险警告:此操作仅在「同步结果验证完全通过」(文件完整、无嵌套、权限正常)后执行,删除后数据不可逆恢复(无备份则永久丢失),请再次确认 @home 子卷内文件完整无误!

操作目的:同步完成后,@ 子卷内的 /home 文件夹已无保留必要,删除其下所有文件可释放磁盘空间,同时避免后续系统挂载 @home/home 时出现文件冲突。

# 删除 @ 子卷内原有 /home 下的所有文件(路径务必核对准确,不可输错)
sudo rm -r /mnt/btrfs_temp/@/home/*

3.6 关键说明(含风险补充)

  1. 执行前提:必须满足「ls -la /mnt/btrfs_temp/@home/ 显示文件完整」+「源 / 目标文件数基本一致」,缺一不可,否则绝对不要执行删除命令。
  2. 路径核对:命令中的路径是 /mnt/btrfs_temp/@/home/*,末尾的 * 表示删除该目录下所有内容(保留 /home 目录本身),切勿误写为 /mnt/btrfs_temp/@/home(会删除目录本身)或其他路径。
  3. 风险兜底:若此前未备份 /home 数据,即使同步验证通过,也建议先跳过此步骤,待重启系统确认 @home 挂载正常、文件可正常访问后,再回头清理。
  4. 不可恢复sudo rm -r 命令无回收站机制,删除后无法通过系统自带功能恢复,仅能依赖第三方数据恢复工具(成功率极低),务必谨慎。
  5. 删除后验证:若执行删除,可通过以下命令确认删除成功:
ls -l /mnt/btrfs_temp/@/home/  # 应显示该目录下无文件(为空或仅残留隐藏目录,无影响)

步骤 4:重新挂载 @ 子卷并修改系统配置(fstab/grub)

操作目的

挂载 @ 子卷(模拟系统正常启动状态),修改 fstab(配置 @home 开机自动挂载)和 grub(让 GRUB 识别 @ 子卷)。

4.1 卸载整分区,重新挂载 @ 子卷

  1. 卸载整分区(/mnt/btrfs_temp),避免挂载冲突
sudo umount /mnt/btrfs_temp

# 2. 挂载 @ 子卷,挂载参数与系统配置一致,保证兼容性
sudo mount /dev/sda3 /mnt/btrfs_temp -o defaults,lazytime,ssd,discard=async,compress=zstd:3,space_cache=v2,subvol=@

# 3. 验证 @ 子卷挂载结果
df -hT | grep /mnt/btrfs_temp

4.2 备份并修改 fstab(配置 @home 开机自动挂载 /home)

# 1. 备份 fstab(加时间戳,避免覆盖,方便配置错误回滚)
sudo cp /mnt/btrfs_temp/etc/fstab /mnt/btrfs_temp/etc/fstab.bak.$(date +%Y%m%d%H%M)

# 2. 编辑 fstab(核心:确认 / 的 subvol=@,添加 /home 的 subvol=@home)
sudo nano /mnt/btrfs_temp/etc/fstab

4.3 fstab 配置要求(改成自己的 UUID)

替换原有内容或添加以下配置,确保格式正确(字段用空格 / 制表符分隔):

# 根目录(/):挂载 @ 子卷
UUID=580545c2-bd26-458f-8681-68d2742a4be7 /               btrfs   defaults,lazytime,ssd,discard=async,compress=zstd:3,space_cache=v2,subvol=@ 0       0

# 家目录(/home):挂载 @home 子卷(与根目录 UUID 一致,仅修改挂载点和 subvol)
UUID=580545c2-bd26-458f-8681-68d2742a4be7 /home           btrfs   defaults,lazytime,ssd,discard=async,compress=zstd:3,space_cache=v2,subvol=@home 0       0

# EFI 引导分区(无需修改)
UUID=69A4-EC65  /boot/efi       vfat    umask=0077      0       1

# Swap 分区(无需修改)
UUID=0c9d74b6-18ea-4411-adce-9dc13ce91f44 none            swap    sw              0       0

4.4 验证 fstab 配置结果

# 查看修改后的 fstab,确认无拼写/参数错误
sudo cat /mnt/btrfs_temp/etc/fstab

4.5 备份并修改 grub(让 GRUB 识别 @ 子卷)

# 1. 备份 grub 默认配置(加时间戳)
sudo cp /mnt/btrfs_temp/etc/default/grub /mnt/btrfs_temp/etc/default/grub.bak.$(date +%Y%m%d%H%M)

# 2. 编辑 grub,追加 rootflags=subvol=@ 到 GRUB_CMDLINE_LINUX_DEFAULT
sudo nano /mnt/btrfs_temp/etc/default/grub

4.6 grub 配置要求(修改后示例)

GRUB_CMDLINE_LINUX_DEFAULT 中追加 rootflags=subvol=@,确保引号闭合:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash rootflags=subvol=@"

4.7 验证 grub 配置结果

# 查看修改后的 grub,确认参数追加成功、引号闭合
sudo cat /mnt/btrfs_temp/etc/default/grub

4.8 关键说明

  • fstab//home 的 UUID 必须一致(均为 /dev/sda3 的 Btrfs UUID)。
  • grubrootflags=subvol=@ 是 GRUB 识别根子卷的关键,遗漏会导致系统无法引导。

步骤 5:chroot 进入系统更新 GRUB 引导

操作目的

进入 chroot 环境,更新 GRUB 配置并重装引导,让修改的 fstab/grub 生效。

5.1 挂载 EFI 分区与 4 个虚拟文件系统(chroot 环境前提)

# 1. 挂载 EFI 分区(/dev/sda1)到 @ 子卷的 /boot/efi
sudo mount /dev/sda1 /mnt/btrfs_temp/boot/efi

# 2. 绑定挂载 4 个虚拟文件系统(缺一不可,保证 chroot 环境完整)
sudo mount --bind /proc /mnt/btrfs_temp/proc
sudo mount --bind /sys /mnt/btrfs_temp/sys
sudo mount --bind /dev /mnt/btrfs_temp/dev
sudo mount --bind /run /mnt/btrfs_temp/run

5.2 chroot 进入目标系统


sudo chroot /mnt/btrfs_temp

5.3 在内更新 GRUB 配置与重装引导(无需 sudo)

# 1. 更新 GRUB 配置(扫描内核,生成新 grub.cfg,需看到 "Found Linux" 无红色报错)
update-grub

# 2. 重装 GRUB 到系统硬盘(/dev/sda,仅写硬盘名,不加分区号)
grub-install /dev/sda

# 3. UEFI 环境强化验证(确保 EFI 引导项被正确识别)
grub-install --efi-directory=/boot/efi --bootloader-id=grub --recheck

5.4 退出 chroot 环境

# 退出 chroot,回到原系统终端
exit

5.5 关键说明

  • chroot 内无需加 sudo,当前身份已为 root。
  • grub-install 报错,检查 EFI 分区是否正确挂载,重新执行步骤 5.1。

步骤 6:清理临时挂载点(避免分区占用 / 目录残留)

操作目的

按反向顺序卸载所有挂载,删除临时目录,无残留。

# 按「反向挂载顺序」卸载(避免 "设备忙" 报错)
sudo umount /mnt/btrfs_temp/run
sudo umount /mnt/btrfs_temp/dev
sudo umount /mnt/btrfs_temp/sys
sudo umount /mnt/btrfs_temp/proc
sudo umount /mnt/btrfs_temp/boot/efi
sudo umount /mnt/btrfs_temp

# 删除临时挂载点(rmdir 仅删空目录,比 rm -rf 安全,避免误删系统文件)
sudo rmdir /mnt/btrfs_temp

6.1 关键说明

  • 若卸载失败,执行 sudo lsof /mnt/btrfs_temp 查看占用进程,关闭后重新卸载。
  • 不可直接用 rm -rf /mnt/btrfs_temp,避免挂载未卸载完全导致误删。

步骤 7:重启系统并验证所有配置(全流程收尾)

7.1 重启系统

# 重启系统,让所有配置生效
sudo reboot

7.2 重启后验证(全部通过则操作成功)

# 1. 验证 / 和 /home 的挂载状态(确认 subvol 分别为 @ 和 @home)
df -hT | grep btrfs

# 2. 验证 @home 子卷挂载(确认 /home 对应 @home 子卷)
findmnt /home

# 3. 验证 GRUB 参数(确认包含 rootflags=subvol=@)
cat /proc/cmdline | grep rootflags

# 4. 验证 /home 文件(确认用户目录/隐藏文件完整,无权限错误)
ls -l /home/

# 5. 验证 Btrfs 子卷列表(确认 @ 和 @home 为同级子卷,无嵌套)
sudo btrfs subvolume list /

安装timeshift进行备份

sudo atp install timeshift -y

通用核心避坑点(汇总关键,快速查阅)

  1. 分区操作:先 lsblk 认系统分区,再 blkid 查 UUID,忽略 U 盘(/dev/sdb),避免误操作。
  2. 子卷操作:@ 和 @home 必须同级(位于 Btrfs 分区根目录),不可嵌套。
  3. 文件同步:rsync 路径末尾 / 不可省略,必须用 sudo 执行,同步后验证无嵌套目录。
  4. 配置文件:fstab 中 / 和 /home UUID 一致,grub 必须追加 rootflags=subvol=@
  5. GRUB 安装:目标是系统硬盘(/dev/sda),不加分区号,UEFI 环境需执行强化验证命令。
  6. 清理操作:按反向顺序卸载挂载,用 rmdir 删除临时目录,避免残留。
Reply Favorite View the author
All Replies
tacat
deepin
2026-01-30 09:14
#1

deepin其实没必要死守ext4,那是uos该做的事情

磐石配合btrfs体验会好很多,我等小白也不用手动折腾这些高复杂度方案了

Reply View the author
文盲振伟🍀
deepin
2026-01-30 10:20
#2

告诉你个妙的,你直接装Linux mint,天生就在@子卷里,根本不用折腾

Reply View the author
文盲振伟🍀
deepin
2026-01-30 10:22
#3
tacat

deepin其实没必要死守ext4,那是uos该做的事情

磐石配合btrfs体验会好很多,我等小白也不用手动折腾这些高复杂度方案了

昨天惊奇发现,v25安装时,可以选择格式化为Btrfs分区。

然后创建@子卷,rsync进去,重建引导,删除原始系统即可

Reply View the author