mFat Asked: 2011-04-22 03:24:31 +0800 CST2011-04-22 03:24:31 +0800 CST 2011-04-22 03:24:31 +0800 CST 如何将我的根分区从 BTRFS 转换为 EXT4? 772 是否可以将 btrfs 转换为 ext4 而不会丢失数据?我在 btrfs 上的读/写操作速度非常低。 filesystem 4 个回答 Voted Oli 2011-04-22T04:16:56+08:002011-04-22T04:16:56+08:00 我只是在使用可用的工具,而不是经验或文档。你可能想用一个分区(甚至只是一个图像)来测试它,如果一切都出错了,你不介意丢失。不要在没有备份的情况下尝试此操作。 btrfs-convert具有回滚功能以撤消转换。我不确定这是否适用于未转换为btrfswith的分区btrfs-convert。 首先卸载文件系统。如果它对系统至关重要,请引导至 LiveCD。 安装btrfs-tools sudo apt-get install btrfs-tools 回滚转换 sudo btrfs-convert -r /dev/sdXn htorque 2011-04-22T03:42:24+08:002011-04-22T03:42:24+08:00 据我所知,您无法将 btrfs 转换为任何其他文件系统。 randyman99 2015-04-26T18:22:29+08:002015-04-26T18:22:29+08:00 我使用具有多引导发行版的系统(ext4 上的 Ubuntu,btrfs 上的 Xubuntu)来做到这一点。运行 Ubuntu,我采用了 Xubuntu btrfs 主分区,并使用 fsarchiver 将其存档。然后我能够再次使用 fsarchiver 将它恢复到不同的分区并指定 ext4 文件系统类型。这似乎工作正常。 还是在 Ubuntu 中,我将 Xubuntu 根分区挂载在 /mnt 上,并编辑 /mnt/@/etc/fstab 以更改 /home 的挂载以指向新的 ext4 分区,同时更改 UUID 和 fs 类型,并删除子卷数据。我保存了文件,然后重新启动到 Xubuntu。 启动时出错,启动停止。错误是我有另一个分区要挂载到我的 ~/Documents 目录,但失败了。我选择手动解决问题。事实证明,我的根分区可以正常安装为 ext4,但是当我执行 list 命令时,我得到了 #ls /home @home 所以原来的 btrfs 子卷结构仍然存在于 ext4 文件系统中。我发出命令 mount --bind /home/@home /home 然后我按 ctrl-D 继续启动,Xubuntu 继续启动,一切正常。我还没有这样做,因为我仍然处于初始启动状态,但我确定我可以将该绑定命令放入我的 fstab 文件中。或者我不知道我可能已经将子卷信息留在了 fstab 条目中。 但是,我将做的(这是题外话)是从另一台计算机上为 Xubuntu 获取一个更成熟的 /home (ext4) 分区实例,然后使用它。我已经证明这会奏效。 David Faure 2020-12-27T14:03:07+08:002020-12-27T14:03:07+08:00 **适用于所有情况的解决方案当然是将所有内容从根分区复制到另一个分区上的目录(假设您有一个有足够可用空间的目录),重新格式化/为ext4,复制回来。我只是这样做了,并且遇到了一些问题,所以我想我会写一些howto: 在救援 USB 密钥上启动,挂载两个分区(假设/mnt是真正的根分区,以及/dest用作临时目标的分区) 请注意,您也应该安装 BTRFS 子卷(我没有这样做,我丢失了所有的/var, /opt, /root...)。最好的方法可能是做通常的chroot舞蹈 ( mount --bind /dev /mnt/dev; mount --bind /sys /mnt/sys; mount --bind /proc /mnt/proc; chroot /mnt),然后安装所有mount -a -t btrfs描述的子卷。/etc/fstab 退出 chroot 或使用另一个 TTY (Ctrl+Alt+F2),然后启动副本,例如cp -a /mnt /dest 重新格式化分区: umount /mnt mkfs.ext4 /dev/*the_root_device* mount /dev/*the_root_device* /mnt 现在(在 chroot 中)复制数据,cp -a /dest/mnt/* /mnt 不要忘记 编辑/etc/fstab以删除所有子卷,将文件系统类型从 更改btrfs为ext4,然后更新UUID(参见 的输出,或在执行后blkid切换到标签)LABEL=rootfstune2fs -L rootfs /dev/*the_root_device* mkinitrd或dracut, 并重新创建引导加载程序(我使用另一个发行版,所以我没有在 ubuntu 上执行此步骤的确切命令)。交叉手指并重新启动。最后,记得清理临时目的地中的 /dest 副本。**
我只是在使用可用的工具,而不是经验或文档。你可能想用一个分区(甚至只是一个图像)来测试它,如果一切都出错了,你不介意丢失。不要在没有备份的情况下尝试此操作。
btrfs-convert
具有回滚功能以撤消转换。我不确定这是否适用于未转换为btrfs
with的分区btrfs-convert
。首先卸载文件系统。如果它对系统至关重要,请引导至 LiveCD。
安装
btrfs-tools
回滚转换
据我所知,您无法将 btrfs 转换为任何其他文件系统。
我使用具有多引导发行版的系统(ext4 上的 Ubuntu,btrfs 上的 Xubuntu)来做到这一点。运行 Ubuntu,我采用了 Xubuntu btrfs 主分区,并使用 fsarchiver 将其存档。然后我能够再次使用 fsarchiver 将它恢复到不同的分区并指定 ext4 文件系统类型。这似乎工作正常。
还是在 Ubuntu 中,我将 Xubuntu 根分区挂载在 /mnt 上,并编辑 /mnt/@/etc/fstab 以更改 /home 的挂载以指向新的 ext4 分区,同时更改 UUID 和 fs 类型,并删除子卷数据。我保存了文件,然后重新启动到 Xubuntu。
启动时出错,启动停止。错误是我有另一个分区要挂载到我的 ~/Documents 目录,但失败了。我选择手动解决问题。事实证明,我的根分区可以正常安装为 ext4,但是当我执行 list 命令时,我得到了
所以原来的 btrfs 子卷结构仍然存在于 ext4 文件系统中。我发出命令
然后我按 ctrl-D 继续启动,Xubuntu 继续启动,一切正常。我还没有这样做,因为我仍然处于初始启动状态,但我确定我可以将该绑定命令放入我的 fstab 文件中。或者我不知道我可能已经将子卷信息留在了 fstab 条目中。
但是,我将做的(这是题外话)是从另一台计算机上为 Xubuntu 获取一个更成熟的 /home (ext4) 分区实例,然后使用它。我已经证明这会奏效。
**适用于所有情况的解决方案当然是将所有内容从根分区复制到另一个分区上的目录(假设您有一个有足够可用空间的目录),重新格式化
/
为ext4
,复制回来。我只是这样做了,并且遇到了一些问题,所以我想我会写一些howto:/mnt
是真正的根分区,以及/dest
用作临时目标的分区)/var
,/opt
,/root
...)。最好的方法可能是做通常的chroot
舞蹈 (mount --bind /dev /mnt/dev; mount --bind /sys /mnt/sys; mount --bind /proc /mnt/proc; chroot /mnt
),然后安装所有mount -a -t btrfs
描述的子卷。/etc/fstab
cp -a /mnt /dest
umount /mnt
mkfs.ext4 /dev/*the_root_device*
mount /dev/*the_root_device* /mnt
cp -a /dest/mnt/* /mnt
不要忘记/etc/fstab
以删除所有子卷,将文件系统类型从 更改btrfs
为ext4
,然后更新UUID
(参见 的输出,或在执行后blkid
切换到标签)LABEL=rootfs
tune2fs -L rootfs /dev/*the_root_device*
mkinitrd
或dracut
, 并重新创建引导加载程序(我使用另一个发行版,所以我没有在 ubuntu 上执行此步骤的确切命令)。交叉手指并重新启动。最后,记得清理临时目的地中的 /dest 副本。**