我有一个不断将文件写入如下目录结构的过程:
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
建议,但如果可能的话,我更愿意完全禁用缓存。
有没有办法做到这一点?