将 ext4 转换为 btrfs 时“丢失数据块”

将 ext4 转换为 btrfs 时“丢失数据块”

我在测试虚拟机上尝试将第二个磁盘转换为 btrfs。

转换失败并出现错误missing data block for bytenr 1048576(见下文)。

我找不到有关该错误的任何信息。我可以做什么来解决这个问题?

$ fsck -f /dev/sdb1
fsck from util-linux 2.35.2
e2fsck 1.45.6 (20-Mar-2020)
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/sdb1: 150510/4194304 files (0.5% non-contiguous), 2726652/16777216 blocks

$ btrfs-convert /dev/sdb1
create btrfs filesystem:
        blocksize: 4096
        nodesize:  16384
        features:  extref, skinny-metadata (default)
        checksum:  crc32c
creating ext2 image file
ERROR: missing data block for bytenr 1048576
ERROR: failed to create ext2_saved/image: -2
WARNING: an error occurred during conversion, filesystem is partially created but not finalized and not mountable

答案1

那是个漏洞

现在我们已经确定了这个错误,它是乘以 unsigned int 时出现的一点溢出。

另请参阅:

作为解决方法,您可以在转换之前将文件系统的大小调整为更小/更大。

答案2

该错误存在于 btrfs-progs 版本 5.7(默认情况下,例如 Ubuntu 20.10)中,并且也出现在其他大小上(这里我有一个 457.26 GiB 驱动器)。升级到更高版本的 btrfs-progs(例如,从 Ubuntu 21.04 升级到 5.10)可以解决该问题。

编辑:不建议将其作为生产解决方案(内核/btrfs-progs 版本不匹配),但它可以让您摆脱棘手的情况。最好使用已经有新版本的恢复系统。

相关内容