无法挂载 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.
#
Run Code Online (Sandbox Code Playgroud)
消息输出
[ 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
Run Code Online (Sandbox Code Playgroud)
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
#
Run Code Online (Sandbox Code Playgroud)
btrfs 检查内部
报告未知标志。在 OpenSUSE (btrfs-progs v4.5.3+20160729) 提供的股票 btrfs 版本上看到的这种行为,以及从 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
#
Run Code Online (Sandbox Code Playgroud)
问题确实是两个 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
Run Code Online (Sandbox Code Playgroud)
如果我们不知道此功能是什么,您甚至无法在 OpenSuse 中更新内核以匹配 xbian。通常在这种情况下,出于兼容性原因,您会依赖 ext4。