对 raid 阵列 (jbd2) 的持续低容量写入,是什么原因造成的?

joh*_*384 5 linux io ext4

我有一个raid 阵列,实际上,两个非常相似的raid 阵列,但是一个正在不断写入(似乎是jbd2)而另一个则不是。以下是数组:

md9 : active raid5 sdl4[4] sdk4[2] sdh4[1] sdb4[0]
  11626217472 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
  bitmap: 2/29 pages [8KB], 65536KB chunk
   
md8 : active raid5 sdf3[2] sdc3[1] sda3[0] sdi3[3]
  11626217472 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]
  bitmap: 0/29 pages [0KB], 65536KB chunk
Run Code Online (Sandbox Code Playgroud)

如您所见,没有进行“检查”或任何特殊操作。两个阵列均为 4x 4TB。

到现在为止还挺好。

这两个数组(/dev/md8 和/dev/md9)都只包含数据,没有根文件系统。事实上,它们很少被任何东西使用。两者都安装了一个 ext4 分区noatime并且“bcache”准备好了(但还没有缓存卷):

df -h

/dev/bcache0     11T  7.3T  3.6T  67% /mnt/raid5a
/dev/bcache1     11T  7.4T  3.5T  68% /mnt/raid5b
Run Code Online (Sandbox Code Playgroud)

cat /proc/mounts

/dev/bcache0 /mnt/raid5a ext4 rw,nosuid,nodev,noexec,noatime,data=ordered 0 0
/dev/bcache1 /mnt/raid5b ext4 rw,nosuid,nodev,noexec,noatime,data=ordered 0 0
Run Code Online (Sandbox Code Playgroud)

但是,iostat报告说有持续的写入/dev/bcache1(并且它支持 volume /dev/md9),而相同的数组没有发生类似的事情/dev/md8......

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
md8               0.00         0.00         0.00          0          0
bcache0           0.00         0.00         0.00          0          0
md9               1.50         0.00        18.00          0         36
bcache1           1.00         0.00        12.00          0         24

md8               0.00         0.00         0.00          0          0
bcache0           0.00         0.00         0.00          0          0
md9               2.50         0.00        18.00          0         36
bcache1           2.50         0.00        18.00          0         36
Run Code Online (Sandbox Code Playgroud)

这已经持续了几个小时。

我试过的:

  1. 杀死任何与 gvfs 相关的东西。 ps ax |grep gvfs现在给出零结果。写作不断发生。
  2. 检查lsof是否有任何事情发生。它什么也没显示。
  3. 用过iotop。我看到一个名为的过程[jbd2/bcache1-8]通常位于顶部。其他阵列没有类似的东西。
  4. 我尝试卸载卷。这很顺利,iostat 报告没有进一步的访问(似乎表明没有人在使用它)。然而,重新安装它会立即再次触发这些低容量写入......

好奇可能写入这个数组的内容。正如我所说,它只包含数据,字面意思是一个文件夹lost+found,并且是空的...

joh*_*384 5

看起来我在输入完整的问题后已经找到了罪魁祸首......

尽管成交量已经超过周龄(与其他数组这是两周),另一个过程ext4lazyinit仍然忙初始化索引节点(我甚至局限于很理智的4亿美元,而不是疯狂的4极大数对mkfs.ext4通常会创建这么大的体积)。

df -h -i

Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/bcache1     4.1M  2.1K  4.1M    1% /mnt/raid5b
Run Code Online (Sandbox Code Playgroud)

再次使用 重新安装卷后init_itable=0iostat显示相同的写入,但卷要大得多:

md8               0.00         0.00         0.00          0          0
bcache0           0.00         0.00         0.00          0          0
md9             101.50         0.00       584.00          0       1168
bcache1         101.50         0.00       584.00          0       1168
Run Code Online (Sandbox Code Playgroud)

...这似乎证实它确实仍在忙于初始化 inode。