如何知道内核中是否启用了 ext4lazyinit 功能?

如何知道内核中是否启用了 ext4lazyinit 功能?

我将在几个小时内格式化一个新的大容量 4 TB 硬盘。据我所知,我可以直接格式化它,它看起来会被格式化。

如果我实时格式化它可能需要很长时间,10000 rpm x 4 GB DDR3 RAM。于是Linux提出了这个概念ext4惰性初始化

我正在运行 Debian GNU/Linux 'Stretch' 并拥有内核 4.9 。

[$] uname -a

Linux debian 4.9.0-1-amd64 #1 SMP Debian 4.9.2-2 (2017-01-12) x86_64 GNU/Linux

[$] lsb_release -a

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 9.0 (stretch)
Release:    9.0
Codename:   stretch    

现在,根据维基它说,我引用 -

如果启用并且启用了 uninit_bg 功能,则 inode 表将不会由 mke2fs 完全初始化。这显着加快了文件系统初始化的速度,但需要内核在首次挂载文件系统时在后台完成文件系统的初始化。如果省略该选项值,则默认为 1 以启用惰性 inode 表清零。 ——托马斯·肯恩

现在有没有办法知道我的内核中是否启用了上述功能?

更新 -

有一个/boot/config-4.9.0-1-amd64.根据 - 该文件有 7865 行长

[$] cat /boot/config-4.9.0-1-amd64 | tail -n 1

  7865  CONFIG_SBITMAP=y

尝试 grep 不会有任何结果 -

[$] cat /boot/config-4.9.0-1-amd64 | grep LAZY

甚至 ext4 也是如此 -

[$] cat /boot/config-4.9.0-1-amd64 | grep EXT4

  6895  CONFIG_EXT4_FS=m
  6896  CONFIG_EXT4_USE_FOR_EXT2=y
  6897  CONFIG_EXT4_FS_POSIX_ACL=y
  6898  CONFIG_EXT4_FS_SECURITY=y
  6899  CONFIG_EXT4_ENCRYPTION=y
  6900  CONFIG_EXT4_FS_ENCRYPTION=y
  6901  # CONFIG_EXT4_DEBUG is not set

有人有什么想法吗?

答案1

Google 获取其内核编译字符串(或在内核源代码的“make menuconfig”中检查)。它肯定以 CONFIG_EXT4_FS_ 开头。您实际运行的内核的这些内核编译标志可以在 /proc/config.gz 中提供(但这样做也是一个内核编译标志,因此它可能会也可能不会在您的系统上启用),或者由您的发行版 / boot/config-your-kernel-version(您的发行版可能提供也可能不提供)。

据我记得,这是一个古老的(至少 5 年)功能,因此您的内核可能支持它。

在线 ext4 调整大小不适用于某些高度微调的 mke4fs 配置(抱歉我忘记了具体是什么 - 某些 ext4 fs 标志使其不可能)。

答案2

我一直在研究与此 ext4 功能相关的错误。据我所知,从内核源代码(linux 4.15.x)来看,没有名为“uninit_bg”的功能。它看起来像是刚刚融入到 ext4 文件系统中,尽管所讨论的关键功能称为“lazy_itable_init”。这段代码有一些变化,也许注释+文档需要赶上现实。

使用时,mkfs您可以-E lazy_itable_init=0像其他人所说的那样添加选项 - 我不认为该属性存储在文件系统的元数据中 - 用于处理惰性初始化的内核线程是否被触发取决于是否lazy_itable_init设置,但一旦所有块组在 FS 上设置了 ITABLE_ZEROED 标志,然后文件系统被初始化,就是这样 - 即初始化方法不再有任何相关性。

相关内容