无法挂载 btrfs 文件系统“open_ctree 失败”

无法挂载 btrfs 文件系统“open_ctree 失败”

安装 btrfs 文件系统时遇到问题。最初是在运行 xbian 的服务器上创建的。尝试安装在最新的 OpenSUSE 42.2 服务器上。抱怨不支持的功能 0x10,open_ctree 失败。

我怎样才能挂载这个文件系统?

挂载尝试

# file -s /dev/sdc2
/dev/sdc2: BTRFS Filesystem (label "xbian", sectorsize 4096, nodesize 16384, leafsize 16384)
# mount -t btrfs /dev/sdc2 /mnt
mount: wrong fs type, bad option, bad superblock on /dev/sdc2,
       missing codepage or helper program, or other error

       In some cases useful info is found in syslog - try
       dmesg | tail or so.
#

dmesg 输出

[  119.698406] BTRFS info (device sdc2): disk space caching is enabled
[  119.698409] BTRFS: couldn't mount because of unsupported optional features (10).
[  119.744887] BTRFS: open_ctree failed

BTRFS 版本

# rpm -qa|grep btrfs
btrfsprogs-udev-rules-4.5.3-3.1.noarch
btrfsprogs-4.5.3-3.1.x86_64
libbtrfs0-4.5.3-3.1.x86_64
btrfsmaintenance-0.2-13.1.noarch
#

Btrfs 检查内部

报告未知标志。此行为在 OpenSUSE 提供的库存 btrfs 版本 (btrfs-progs v4.5.3+20160729) 以及从 git 下载并编译的最新版本 (btrfs-progs v4.9.1) 中出现。

# btrfs inspect-internal dump-super /dev/sdc2
superblock: bytenr=65536, device=/dev/sdc2
---------------------------------------------------------
csum                    0x394d4988 [match]
bytenr                  65536
flags                   0x1
                        ( WRITTEN )
magic                   _BHRfS_M [match]
fsid                    71ecbcc5-c88f-4f27-b4d8-763bd801765e
label                   xbian
generation              129
root                    4669440
sys_array_size          97
chunk_root_generation   102
root_level              0
chunk_root              131072
chunk_root_level        0
log_root                0
log_root_transid        0
log_root_level          0
total_bytes             7451181056
bytes_used              691642368
sectorsize              4096
nodesize                16384
leafsize                16384
stripesize              4096
root_dir                6
num_devices             1
compat_flags            0x0
compat_ro_flags         0x0
incompat_flags          0x179
                        ( MIXED_BACKREF |
                          COMPRESS_LZO |
                          COMPRESS_LZOv2 |
                          BIG_METADATA |
                          EXTENDED_IREF |
                          SKINNY_METADATA |
                          unknown flag: 0x10 )
csum_type               0
csum_size               4
cache_generation        129
uuid_tree_generation    112
dev_item.uuid           a8b49751-56e3-4c42-a1d3-40a1554c800c
dev_item.fsid           71ecbcc5-c88f-4f27-b4d8-763bd801765e [match]
dev_item.type           0
dev_item.total_bytes    7451181056
dev_item.bytes_used     926941184
dev_item.io_align       4096
dev_item.io_width       4096
dev_item.sector_size    4096
dev_item.devid          1
dev_item.dev_group      0
dev_item.seek_speed     0
dev_item.bandwidth      0
dev_item.generation     0

#

答案1

问题确实是两个 Linux 版本的 BTRFS 版本略有不同,即不支持相同的功能:

[119.698406] BTRFS信息(设备sdc2):已启用磁盘空间缓存
[119.698409] BTRFS:由于可选功能不受支持而无法安装(10)。

看起来 xbian 已经启用了该功能,而 OpenSuse 42.2 没有启用,这阻碍了互操作性。

这些 FS 功能是可选的:这意味着可以在较新的系统上创建向下兼容的 BTRFS 分区,这些分区可从旧系统(没有这些功能)读取,由传递给 mkfs.btrfs 程序的参数控制。

该功能的数字代码是 10 - 未知标志:0x10。我花了好长时间才弄清楚这些代码的含义(我猜是:扩展 inode 引用)。但由于数字太小,我认为这是基本问题。我认为您无法再让未打补丁的内核读取此文件系统。否则,了解该功能后,我们也许可以指定一个挂载选项来避免错误;就像这里,指定了 fs 压缩算法:

mount -t btrfs -o compress=lz4 dev /mnt

如果我们不知道这个功能是什么,您甚至无法在 OpenSuse 中更新内核以匹配 xbian。通常在这种情况下,出于兼容性原因,您会依赖 ext4。

答案2

对我来说是

BTRFS error (device dm-5): open_ctree failed

内核从 5.10 降级到 4.19 后。问题出compress=zstd:5/etc/fstab.按照文档,

ZSTD ...自 4.14 起,自 5.1 起的水平

更改后又compress=zstd可以使用了。

相关内容