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