我在测试虚拟机上尝试将第二个磁盘转换为 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 时出现的一点溢出。
另请参阅:
- https://github.com/kdave/btrfs-progs/commit/c9c4eb1f3fd343512d50b075b40bba656cbd02cb
- https://www.spinics.net/lists/linux-btrfs/msg103379.html
作为解决方法,您可以在转换之前将文件系统的大小调整为更小/更大。
答案2
该错误存在于 btrfs-progs 版本 5.7(默认情况下,例如 Ubuntu 20.10)中,并且也出现在其他大小上(这里我有一个 457.26 GiB 驱动器)。升级到更高版本的 btrfs-progs(例如,从 Ubuntu 21.04 升级到 5.10)可以解决该问题。
编辑:不建议将其作为生产解决方案(内核/btrfs-progs 版本不匹配),但它可以让您摆脱棘手的情况。最好使用已经有新版本的恢复系统。