如何在新系统中安全重组由mkfs.btrfs创建的BTRFS RAID1阵列
别慌!你这种情况其实处理起来挺稳妥的,毕竟BTRFS原生RAID的元数据是跨设备同步的,只要操作时牢记「只读优先、先验证再读写」的原则,数据安全完全有保障。我给你一步步拆解安全操作流程:
前期确认:先摸清设备状态
首先先确认新系统已经正确识别了所有4块硬盘,运行这条命令:
sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
你要重点看旧系统里的4块目标盘(新系统盘符可能变化,以LABEL为准):确保它们的FSTYPE都是btrfs,LABEL都是data——这说明系统已经认出它们属于同一个BTRFS阵列。
第一步:只读检查文件系统(绝对安全的操作)
别上来就挂载读写,先做个只读检查,彻底避免误写风险。选其中一块盘(比如/dev/sda,随便选一块就行,BTRFS的元数据是同步的),运行:
sudo btrfs check --readonly /dev/sda
如果输出里没有红色的错误提示,只有正常的文件系统信息,说明阵列状态没问题,可以继续。要是有错误也别慌——这是只读检查,不会破坏数据,你可以换另一块盘重复检查,确认是不是单盘的小问题。
第二步:让系统识别完整的BTRFS阵列
先让新系统扫描所有BTRFS设备,确保它把4块盘关联成一个完整阵列:
sudo btrfs device scan
扫描完成后,用这条命令查看已识别的BTRFS文件系统,确认data阵列的所有成员设备都被列出来了:
sudo btrfs filesystem show
你会看到包含4块盘设备路径的输出,这就说明阵列已经被系统正确识别了。
第三步:只读挂载测试数据完整性
接下来创建一个临时挂载点,先以只读模式挂载阵列,验证数据是否能正常访问:
sudo mkdir -p /mnt/btrfs-data sudo mount -o ro,compress=zlib LABEL=data /mnt/btrfs-data
挂载完成后,进入挂载点查看文件:
ls -l /mnt/btrfs-data
如果能看到旧系统里的所有文件,说明阵列识别完全正常,数据也没丢失。这一步是关键,确认数据安全后再进行读写操作。
第四步:配置正常读写挂载与开机自动挂载
1. 切换为读写挂载
先卸载只读挂载:
sudo umount /mnt/btrfs-data
然后用旧系统的参数正常挂载:
sudo mount -o defaults,compress=zlib LABEL=data /mnt/btrfs-data
挂载后可以做个小测试:创建一个空文件再删除,确认读写权限正常:
sudo touch /mnt/btrfs-data/test-file && sudo rm /mnt/btrfs-data/test-file
2. 配置fstab实现开机自动挂载
编辑/etc/fstab文件(用你熟悉的编辑器,比如nano):
sudo nano /etc/fstab
在文件末尾添加一行:
LABEL=data /mnt/btrfs-data btrfs defaults,compress=zlib 0 0
保存退出后,测试fstab配置是否正确(无需重启系统,仅尝试挂载所有fstab条目):
sudo mount -a
如果没有报错,说明配置正常,下次开机后阵列会自动挂载到指定路径。
一些重要的注意事项
- 别用mdadm命令操作这个阵列!这是BTRFS原生RAID,和mdadm软RAID完全不是一回事,用mdadm会搞乱设备。
- 你的4盘RAID1阵列,每块数据会同步到2块盘上,只要至少2块盘正常就能运行;现在4块盘都在,挂载后BTRFS会自动同步所有设备状态,不需要手动「重组」阵列——因为BTRFS本身就会把成员设备识别为一个整体。
- 除非你确定需要调整阵列(比如替换坏盘),否则不要用
btrfs balance、btrfs device add/remove这类命令,现阶段只需要挂载使用就好。
备注:内容来源于stack exchange,提问作者sinoptic

