У меня есть общее хранилище, которое смонтировано (только для чтения) на SERVER1 и установлено (для чтения-записи) на SERVER2.
SERVER2 записывает данные в файл. SERVER1 читает данные из этого файла.
Опрос файла составляет <100 мс, что быстро, но, скажем так, необходимо.
SERVER1 обращается к кешу файловой системы и не показывает новые данные в файле. Я могу drop_caches, который затем возвращает последние данные в этом файле, но этот процесс отбрасывает все кеши файлов на SERVER1, что не является тем, что я хочу делать, и обработка занимает слишком много времени.
Я пробовал использовать команду cat, а также dd if = / path / to / file -iflag = direct, но это тоже не работает. Возвращает ошибку. Похоже, что этот флаг не поддерживается для файлов. Есть идеи, как читать файл непосредственно с диска или как отключить кеш файловой системы для файла / каталога / точки монтирования?
Я бы также подумал об отключении файлового кеша для всей системы, но это не мое первое предпочтение, это только для одного файла. Google также не предлагает способ сделать это, поскольку большинство сообщений на форуме выступают против таких действий.
Спасибо!
Не делай этого. Повторяю: не делайте этого!
Вы получите от этого кластерную головную боль. Если за это время метаданные изменятся, это может вызвать сбои и / или возврат неверных данных. Эти файловые системы не предназначены для такой работы. Не используйте их таким образом. Это особенно плохая идея с ZFS. Если вам действительно нужно, используйте что-то очень простое, без журналов и дополнительных функций (например, ext2 или, возможно, vfat).
Либо используйте кластерную файловую систему (gfs, ocfs, cxfs), либо какую-нибудь сетевую файловую систему (glusterfs, cifs, nfs).
И между прочим. DirectIO - это не реализована в ZFS в Linux. Он будет работать с базовыми файловыми системами (ext {2,3,4}, xfs и т. Д.)