我将在几个小时内格式化一个新的大容量 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 标志,然后文件系统被初始化,就是这样 - 即初始化方法不再有任何相关性。