如何将RAID 1上的ext4分区转换为btrfs?
如何将RAID 1上的ext4分区转换为btrfs?
首先得先解决你碰到的「分区被占用」问题——毕竟要转文件系统,必须保证原ext4分区是完全干净、未被使用的状态,fsck才能顺利执行。我们一步步来排查和解决:
第一步:彻底排查分区占用情况
你说已经卸载了分区且lsof没结果,但fsck还是报错,试试这些更精准的排查方法:
- 确认无残留挂载:执行
mount | grep /dev/md0p2和mount | grep /dev/md0p3,如果有输出说明分区还在挂载状态,再执行一次umount /dev/md0p2和umount /dev/md0p3强制卸载。 - 检查隐藏挂载关系:用
findmnt -l | grep md0p列出所有挂载,包括容易忽略的bind挂载、临时挂载,找到后手动卸载对应路径。 - 检查systemd挂载单元:有时候系统服务会偷偷维持挂载状态,执行
systemctl list-units --type=mount | grep -E 'home|var',如果看到对应的挂载单元是active状态,先停掉:systemctl stop home.mount、systemctl stop var.mount,再重新卸载分区。 - 用fuser定位占用进程:比lsof更精准的工具,执行
fuser -v /dev/md0p3,如果有进程占用,会显示对应PID,直接kill掉进程后再试。 - 终极方案:单用户模式:如果以上都不行,重启系统进入单用户模式(Ubuntu/Debian系可在GRUB菜单选「Advanced options」→「Recovery mode」→「Root shell」),这时候只有最基础的服务运行,卸载分区后再跑fsck。
第二步:确保原文件系统无错误
解决占用问题后,强制检查ext4分区(哪怕看起来没问题),避免因潜在错误导致转换失败:
fsck.ext4 -f /dev/md0p2 fsck.ext4 -f /dev/md0p3
-f 参数是强制触发检查,跳过系统默认的「看似正常则跳过」逻辑,确保转格式前文件系统完全健康。
第三步:转换为btrfs
⚠️ 重要提醒:转换前一定要备份好/home和/var里的重要数据!虽然btrfs-convert是安全的,但任何磁盘操作都存在不可预见的风险。
执行转换命令:
btrfs-convert /dev/md0p2 # 转换/home所在分区 btrfs-convert /dev/md0p3 # 转换/var所在分区
这个命令会把ext4分区转换成btrfs,并且会保留原ext4文件系统作为一个名为ext2_saved的快照,后续如果想回滚,直接执行 btrfs-convert -r /dev/md0p2 就能恢复成原来的ext4。
第四步:测试挂载与更新fstab
- 先临时挂载转换后的分区,验证文件是否正常:
mkdir -p /mnt/test-home /mnt/test-var mount /dev/md0p2 /mnt/test-home mount /dev/md0p3 /mnt/test-var # 检查文件内容,确认没有丢失或损坏 ls /mnt/test-home ls /mnt/test-var
- 修改
/etc/fstab,把原来的ext4条目改成btrfs格式:
比如原来的:
/dev/disk/by-id/md-uuid-44fbd174:5c5546de:00388295:7ba75fa9-part2 /home ext4 defaults 0 1 /dev/disk/by-id/md-uuid-44fbd174:5c5546de:00388295:7ba75fa9-part3 /var ext4 defaults 0 1
改成:
/dev/disk/by-id/md-uuid-44fbd174:5c5546de:00388295:7ba75fa9-part2 /home btrfs defaults,compress=zstd 0 1 /dev/disk/by-id/md-uuid-44fbd174:5c5546de:00388295:7ba75fa9-part3 /var btrfs defaults 0 1
这里给/home加了compress=zstd开启Zstd压缩,你可以根据需求调整挂载选项,比如/var如果有大量小文件也可以加压缩,或者保持默认。
- 更新initramfs(针对Debian/Ubuntu系):
update-initramfs -u
确保系统启动时能识别btrfs文件系统。
第五步:重启验证
重启系统后,执行 df -T 查看文件系统类型,确认/home和/var已经是btrfs,再检查文件是否能正常访问,就大功告成了。
备注:内容来源于stack exchange,提问作者Mogipit243
相关产品推荐
相关产品推荐

