概述
参考文档:Btrfs Documentation
本文记录把一块装着 Windows 的 1TB NVMe 硬盘完整改造为 CachyOS 的 btrfs 数据盘、并让整个家目录运行在其上的操作流程
全篇拓扑:
flowchart LR subgraph before["迁移前"] A["nvme0n1 512G<br>CachyOS 系统盘"] B["nvme1n1 1TB<br>Windows NTFS"] end subgraph after["迁移后"] C["nvme0n1 512G<br>仅 CachyOS 系统"] D["nvme1n1 1TB<br>btrfs 挂载为 /home/ishian"] end B -->|"wipefs + mkfs.btrfs"| D A -->|"rsync 全量 + 增量"| D所涉专题:数据备份、擦除与格式化、
fstab挂载、Limine 引导项清理、家目录整体迁移与回退所有操作在 Limine 引导的 CachyOS(
btrfs-progs v7.1、rsync 3.5)上完成,思路同样适用于其它发行版
快速开始
用
lsblk确认目标盘,认准型号与容量再动手,擦除不可逆:bashlsblk -o NAME,SIZE,FSTYPE,LABEL,MODEL,MOUNTPOINTS擦除全部分区表与签名,重建 GPT 单分区并格式化:
bashsudo umount /run/media/ishian/NTFS卷标 # 桌面环境可能已自动挂载 sudo wipefs -a /dev/nvme1n1 sudo parted -s /dev/nvme1n1 mklabel gpt sudo parted -s /dev/nvme1n1 mkpart data btrfs 1MiB 100% sudo wipefs -a /dev/nvme1n1p1 # 清掉旧分区残留的文件系统签名 sudo mkfs.btrfs -L data /dev/nvme1n1p1写入
fstab实现开机自动挂载并立即挂载:bashecho "UUID=$(sudo blkid -s UUID -o value /dev/nvme1n1p1) /mnt/data btrfs defaults,noatime,compress=zstd:3 0 0" | sudo tee -a /etc/fstab sudo mkdir -p /mnt/data sudo mount /mnt/data sudo findmnt --verify # 校验 fstab 语法 sudo chown ishian:ishian /mnt/datafstab一定用 UUID 而不是/dev/nvmeXnY:多块 NVMe 的设备名在重启后可能互换,本次迁移中两块盘的编号就翻转了两次
备份 Windows 经典目录
NTFS 分区被桌面自动挂载在
/run/media/$USER/<卷标>,经典用户目录位于Users/<name>/下,用cp -a连权限一起复制:bashcd /run/media/ishian/5AD454EFD454CEBF/Users/ishian cp -a Desktop Documents Downloads Music Pictures Videos ~/Documents/Backup/复制后必须校验:小目录用
diff -r逐字节比对,大目录比对find . -type f | wc -l的文件数Windows 目录常带只读属性,
cp -a会原样保留,后续移动或删除会报Permission denied,先chmod -R u+w再操作
删除 Windows 引导项
Limine 的引导项集中在 limine.conf,Windows 条目形如:
text/Windows protocol: efi_chainload image_path: uuid(cfa6e873-...):/EFI/Microsoft/Boot/bootmgfw.efi先备份再用
sed按首尾行精确删除这 3 行,不动其它条目:bashsudo cp /boot/limine.conf /boot/limine.conf.bak sudo sed -i '/^\/Windows$/,/image_path: uuid(cfa6e873/d' /boot/limine.conf sudo rm -rf /boot/EFI/Microsoft # ESP 上的 Windows 引导文件一并清理确认启动菜单正常后删除
.bak备份即可
迁移家目录
两种方案:
- 软链接
~到挂载点:实现最简单,但数据盘未挂载时连 shell 配置都没有,登录直接异常,极少数程序解析真实路径也会出问题 - 直接把整个 btrfs 文件系统挂载为
/home/ishian:标准做法,fstab失败时系统行为可控,推荐
- 软链接
迁移分两阶段,全程可以不断电:
- 桌面会话里先跑一次全量
rsync -aHAX --info=stats2 ~/ /mnt/data/,此时文件仍在变动没有关系 - 切换前从 TTY(
Ctrl+Alt+F3)执行sudo systemctl isolate multi-user.target退出桌面,再以 root 跑一次增量同步,让源端静止
- 桌面会话里先跑一次全量
第二次同步必须以 root 执行:
~/.local/share/waydroid等目录属主是 root,普通用户同步会得到exit 23(opendir failed: Permission denied),属主数据全部漏传同步后追加一次干跑校验,差异为空才算通过:
bashrsync -aHAXn --itemize-changes /home/ishian/ /mnt/data/ # 应无输出切换脚本本体:
bashsystemctl stop waydroid-container.service rsync -aHAX /home/ishian/ /mnt/data/ mv /home/ishian /home/ishian.old # 旧目录保留,出问题可整体回退 mkdir /home/ishian && chown ishian:ishian /home/ishian sed -i 's|/mnt/data|/home/ishian|' /etc/fstab # 实际按 UUID 行整行替换更稳妥 umount /mnt/data && rmdir /mnt/data mount /home/ishian findmnt --verify重启验证桌面、Steam、Lutris 全部正常后,再
sudo rm -rf /home/ishian.old释放系统盘空间,删除前.old就是完整的回退点回退步骤:TTY 登录,删掉
fstab里的/home/ishian行,rmdir /home/ishian后mv /home/ishian.old /home/ishian,重启即恢复原状
附
- 家目录跨盘迁移后,
~/Games、Steam 库、Lutris 数据随整个~自然落在数据盘,无需逐项软链接 /tmp在重启后会被清空,长流程的脚本与日志放在/tmp之外更可靠,本次迁移的切换脚本就因此重建过一次- 迁移中遇到过一次无日志的内核 panic:
journalctl -k -b -1在崩溃点戛然而止且无任何btrfs/nvme错误,属日志来不及落盘的硬死锁,重跑rsync增量即可续传,必要时换 LTS 内核执行重负载阶段 btrfs device stats <挂载点>可快速确认数据盘有无读写与校验错误,全 0 即健康