Можно ли отключить кеш директории 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), а затем в readdir, кэш будет сброшен и перестроен.
Это означает, что изменения в объединенном каталоге не отображаются во время чтения каталога. Это вряд ли будет замечено многими программами.
К сожалению, это замечено моей программой.
Я могу реализовать seekdir
предложение, но я бы предпочел вообще отключить кеш, если это возможно.
Есть способ сделать это?