You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

  1. 先临时挂载转换后的分区,验证文件是否正常:
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
  1. 修改/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如果有大量小文件也可以加压缩,或者保持默认。

  1. 更新initramfs(针对Debian/Ubuntu系):
update-initramfs -u

确保系统启动时能识别btrfs文件系统。

第五步:重启验证

重启系统后,执行 df -T 查看文件系统类型,确认/home和/var已经是btrfs,再检查文件是否能正常访问,就大功告成了。

备注:内容来源于stack exchange,提问作者Mogipit243

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:34:50