容器与主机e2fsprog 版本不同致 extfs 相关操作异常
  • Openebs >= v1.4
  • e2fsprog < v1.47.0

由容器创建的文件系统,在主机运行 e2fsck, resize2fs 等命令时报错:

# resize2fs /dev/mapper/lvmvg-pvc--bcc852f8--7266--48c4--aedc--34adb523d224
resize2fs 1.46.5 (30-Dec-2021)
resize2fs: Filesystem has unsupported feature(s) (/dev/mapper/lvmvg-pvc--bcc852f8--7266--48c4--aedc--34adb523d224)

# e2fsck -f /dev/mapper/lvmvg-pvc--bcc852f8--7266--48c4--aedc--34adb523d224
e2fsck 1.46.5 (30-Dec-2021)
/dev/mapper/lvmvg-pvc--bcc852f8--7266--48c4--aedc--34adb523d224 is mounted.
e2fsck: Cannot continue, aborting.

诊断

报错信息为 Filesystem has unsupported feature ,查看该挂载点文件系统特性:

可以看出某些文件系统特性 FEATURE_C12 无法被 dumpe2fs 程序辨识。

阅读 e2fsprogs 的源码,分析 dump 时打印逻辑:

 // lib/e2p/feature.c
 // 利用 mask bit ,检查特性是否属于此版本支持特性之一,如果是,打印它 verbose 的特性名。
 for (f = feature_list; f->string; f++) {
                if ((compat == f->compat) &&
                    (mask == f->mask)) {
                        strncpy(buf, f->string, buf_len);
                        buf[buf_len - 1] = 0;
                        return;
                }
        }
// 并非已经列出的特性,直接输出 mask bit 位数
 switch (compat) {
        case  E2P_FEATURE_COMPAT:
                fchar = 'C';
                break;
        case E2P_FEATURE_INCOMPAT:
                fchar = 'I';
                break;
        case E2P_FEATURE_RO_INCOMPAT:
                fchar = 'R';
                break;
        default:
                fchar = '?';
                break;
        }
        for (fnum = 0; mask >>= 1; fnum++);
        sprintf(buf, "FEATURE_%c%d", fchar, fnum);                          

经过换算后可得知 FEATURE_C12 为:

// lib/ext2fs/ext2_fs.h
#define EXT4_FEATURE_COMPAT_ORPHAN_FILE   0x1000

从代码中也看得出来 v1.46.5 版本的 e2fsprogs 确实不支持 EXT4_FEATURE_COMPAT_ORPHAN_FILE

#define EXT2_LIB_FEATURE_COMPAT_SUPP        (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\
                                         EXT2_FEATURE_COMPAT_IMAGIC_INODES|\
                                         EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
                                         EXT2_FEATURE_COMPAT_RESIZE_INODE|\
                                         EXT2_FEATURE_COMPAT_DIR_INDEX|\
                                         EXT2_FEATURE_COMPAT_EXT_ATTR|\
                                         EXT4_FEATURE_COMPAT_SPARSE_SUPER2|\
                                         EXT4_FEATURE_COMPAT_FAST_COMMIT|\
                                         EXT4_FEATURE_COMPAT_STABLE_INODES)

由上述可推测挂载点文件系统为不同版本的 e2fsprogs 所建,因此可能默认开启这个特性。由于 pv 上文件系统为 Openebs LVM driver 管理,检查容器中 e2fsprogs 版本:

# e2fsck -V
e2fsck 1.47.0 (5-Feb-2023)
        Using EXT2FS Library version 1.47.0, 5-Feb-2023

再次查看 v1.47.0 e2fsprogs 的支持特性:

#define EXT2_LIB_FEATURE_COMPAT_SUPP        (EXT2_FEATURE_COMPAT_DIR_PREALLOC|\
                                         EXT2_FEATURE_COMPAT_IMAGIC_INODES|\
                                         EXT3_FEATURE_COMPAT_HAS_JOURNAL|\
                                         EXT2_FEATURE_COMPAT_RESIZE_INODE|\
                                         EXT2_FEATURE_COMPAT_DIR_INDEX|\
                                         EXT2_FEATURE_COMPAT_EXT_ATTR|\
                                         EXT4_FEATURE_COMPAT_SPARSE_SUPER2|\
                                         EXT4_FEATURE_COMPAT_FAST_COMMIT|\
                                         EXT4_FEATURE_COMPAT_STABLE_INODES|\
                                         EXT4_FEATURE_COMPAT_ORPHAN_FILE) // <---

v1.47.0 支持 ORPHAN_FILE ,推测成立。

解法

系统 e2fsprogs 需与 Openebs LVM 容器中版本保持一致。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇