Назад | Перейти на главную страницу

Можно ли отключить кеш каталога 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», каждый из верхних и нижних каталогов читается, а списки имен объединяются очевидным образом (сначала читается верхний, затем нижний - уже существующие записи не добавляются повторно). Этот объединенный список имен кэшируется в «файле структуры» и остается таким, пока файл остается открытым. Если каталог открывается и читается двумя процессами одновременно, каждый из них будет иметь отдельные кеши. Seekdir в начало каталога (смещение 0), за которым следует readdir, приведет к тому, что кеш будет отброшен и перестроен.

Это означает, что изменения в объединенном каталоге не появляются во время чтения каталога. Вряд ли многие программы заметят это.

К сожалению, это замечено моей программой.

Я могу реализовать seekdir предложение, но я бы предпочел полностью отключить кеш, если это возможно.

Есть ли способ сделать это?