ext4 到 btrfs 的转换:需要多长时间?空间要求如何?

ext4 到 btrfs 的转换:需要多长时间?空间要求如何?

我为我的 ext4 分区硬盘启动了 btrfs-convert。我先做了一个 fsck,一切正常。既然它现在已经运行了 4 个多小时(1.),我想知道它是否会完成?我(快速)阅读了多篇关于转换的文章,但没有一篇提到空间要求。但我想考虑到这篇文章,还是有一些的: https://oss.oracle.com/projects/btrfs/dist/documentation/btrfs-converter.html

因此,在我开始之前,我的 HDD 已经使用了 1.82TB 的 99.0%。(2.)如果无法完成,是否可以保存以取消(CTRL+C)该过程?

iotop 仍然表明 btrfs-convert 正在以 ~40MB/s 的速度从我的硬盘读取,而 top 显示一个 CPU 核心已被 btrfs-convert 完全加载。(3.)现在最明智的决定是什么?

更新:与此同时,转换过程已经完成。花了将近 3 天时间。我必须补充一点,在此期间速度下降到 ~0-10MB/s,但 100% I/O 负载和 CPU 使用率也相应下降。今天早上(运行了 2 天多之后),转换过程仅占用了 ~9 小时的 CPU 时间。总而言之,一切似乎都很好。

答案1

btrfs-convert将创建现有文件系统的快照(名为ext2_saved)作为备份。很难预测快照将占用多少磁盘空间,因为 btrfs 是 CoW...

我之前曾为 Oracle Linux 6.3 x86_64 转换过/,因为文件系统相对较小(数据存储在单独的逻辑卷上),所以花费的时间不到 10 分钟。转换过程很顺利,没有问题。

就你的情况来说,硬盘上有超过 1.8T 的数据,剩余空间很少,不知道要花多长时间(快照可能只占用很少的空间,因为文件系统自转换后没有改变)。如果iotop显示它仍在运行,请保留它。

只有少数人知道如果中断转换会发生什么,请尝试 btrfs 邮件列表 ;-)

推荐阅读:

https://blogs.oracle.com/wim/entry/btrfs_root_and_yum_update

5.4.6. 将 Ext2、Ext3 或 Ext4 文件系统转换为 Btrfs 文件系统

答案2

如果无法完成,是否保存以取消(CTRL+C)该过程?

我刚刚尝试转换一个 8TB 文件系统,但btrfs-convert似乎崩溃了,并btfsck给出了一个非特定的“错误”,但回滚btrfs-convert -r 只花了一分钟,旧的 ext4 系统一切似乎都很好。

因此,堕胎btrfs-convert似乎是相对安全的。

答案3

如果启用校验和(默认),转换必须计算这些值,然后将其存储在元数据中。因此,基本上就是在转换过程中读取整个硬盘...您可以在转换中禁用校验和,但这会禁用 btrfs 完整性检查和数据清理...

答案4

实际上只是一个数据点……

我刚刚尝试转换一个 200G 分区并使用 btrfs-tools V4.0,但失败了 - 实际上它似乎崩溃了 - 报告“可用空间不足”(部分覆盖进度信息)。

# btrfs-convert -l trial /dev/trial/home
creating btrfs metadata.
not enough free space244027/    240502]
extent-tree.c:2628: btrfs_reserve_extent: Assertion `ret` failed.
btrfs-convert[0x41025d]
btrfs-convert[0x410281]
btrfs-convert(btrfs_reserve_extent+0x883)[0x41465e]
btrfs-convert(btrfs_alloc_free_block+0x63)[0x414715]
btrfs-convert(__btrfs_cow_block+0x101)[0x408edd]
btrfs-convert(btrfs_cow_block+0x89)[0x40948c]
btrfs-convert[0x409f57]
btrfs-convert[0x40a6a2]
btrfs-convert(btrfs_search_slot+0x7b3)[0x40b8a1]
btrfs-convert(btrfs_csum_file_block+0x26b)[0x417ee4]
btrfs-convert[0x42a062]
btrfs-convert[0x42a41d]
/lib/x86_64-linux-gnu/libext2fs.so.2(+0x147bd)[0x7f463c1f97bd]
/lib/x86_64-linux-gnu/libext2fs.so.2(+0x149ad)[0x7f463c1f99ad]
/lib/x86_64-linux-gnu/libext2fs.so.2(+0x154ab)[0x7f463c1fa4ab]
/lib/x86_64-linux-gnu/libext2fs.so.2(ext2fs_block_iterate2+0x2c [0x7f463c1faa7c]

fsck 没有报告问题并且文件系统仍然挂载:

# fsck -f /dev/trial/home
fsck from util-linux 2.26.2
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/trial-home: 240502/13107200 files (19.2% non-contiguous), 52237869/52428800 blocks

有趣的是,进度报告超过了 100%,即 244027/240502。也许有人可以澄清一下它在计算什么?

无论如何,结论是 200G 中的 744M(使用了 99.7%)没有足够的可用空间!

无论如何,我认为 btrfs-convert 会在销毁(复制和覆盖)1Mb 之前将所有元数据放到位,这表明它是 EXT4 文件系统。在执行该步骤之前,没有什么可以撤消的;它只是在可用空间中写入。也许这也可以得到证实?

相关内容