Mount
無法掛載 btrfs 文件系統“open_ctree failed”
掛載 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 #
問題確實是兩個 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。