是否可以禁用 overlayfs 目录缓存

是否可以禁用 overlayfs 目录缓存

我有一个不断将文件写入如下目录结构的过程:

152527 ├── 1525270000000 │   ├── 01be6dc0b6e3e087.json │   ├── 067e2490bb7ee05c.json │   ├── 15ec3513bf7deef6.json ├── 1525270010000 │   ├── 01be6dc0b6e3e087.json │   ├── 067e2490bb7ee05c.json │   ├── 15ec3513bf7deef6.json ... 这些目录被写入一系列挂载,,,,,/mnt/fs_01/mnt_fs_02组合/mnt/fs_03成一个只读overlayfs/mnt/fs_all

一组进程每次写入单个挂载;同一组进程从组合中读取/mnt/fs_all。(这是一个 uWSGI 应用程序。)

问题是,经常会在底层文件系统中创建一个新目录,但它不会在读取时显示。

文档提及overlayfs

当对合并目录发出“readdir”请求时,将分别读取上层目录和下层目录,并以显而易见的方式合并名称列表(先读取上层目录,然后读取下层目录 - 不会重新添加已存在的条目)。此合并名称列表缓存在“struct file”中,因此只要文件保持打开状态,它就会保留。如果两个进程同时打开和读取目​​录,则它们将各自拥有单独的缓存。在目录开头(偏移量 0)处执行 seekdir 后跟 readdir 将导致缓存被丢弃并重建。

这意味着在读取目录时不会显示对合并目录的更改。许多程序不太可能注意到这一点。

不幸的是,我的程序注意到了这一点。

我可以实施该seekdir建议,但如果可能的话,我更愿意完全禁用缓存。

有没有办法做到这一点?

相关内容