Команда очистки кеша NFS?
У меня возникли проблемы с кэшированием атрибутов клиентской стороны NFS.
Я использую некоторые серверы, один - сервер NFS, а другие - серверы NFS.
Все серверы Debian (lenny, 2.6.26-2-amd64 Linux) и версии следуют.
% dpkg -l | grep nfs
ii libnfsidmap2 0.20-1 An nfs idmapping library
ii nfs-common 1:1.1.2-6lenny1 NFS support files common to client and server
ii nfs-kernel-server 1:1.1.2-6lenny1 support for NFS kernel server
На сервере NFS/etc/exports записывается следующим образом:
/export-path 192.168.0.0/255.255.255.0(async,rw,no_subtree_check)
В клиентах NFS/etc/fstab записывается следующим образом:
server:/export-path /mountpoint nfs rw,hard,intr,rsize=8192,async 0 0
Как вы можете видеть, опция "async" используется для производительности доступа нескольких клиентов.
Однако иногда это может вызвать ошибки ложного кэширования.
Так как я поддерживаю много серверов (и у меня нет столь сильного разрешения на изменение параметров монтирования), я не хочу изменять /etc/exports и/etc/fstab.
Я думаю, что достаточно, если у меня есть инструмент командной строки, который "очищает" кеш-атрибут клиентской стороны NFS с разрешения пользователя.
Пожалуйста, дайте мне знать, есть ли такие команды.
Спасибо,
(Приложена)
Я имею в виду "ошибки ложного кэширования",
% ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory
% ssh another-server 'touch /data/1/kabe/foo'
% ls -l /data/1/kabe/foo
ls: cannot access /data/1/kabe/foo: No such file or directory
Иногда такие случаи случаются.
Проблема заключается не в содержимом файла, а в атрибутах файла (= информация о дентинах), поскольку NFS заявляет, что он гарантирует согласованность между концами.
Ответы
Ответ 1
В зависимости от того, что вы подразумеваете под "ошибками ложного кэширования", запуск sync
может дать вам то, что вам нужно. Это приведет к сбросу всех буферов файловой системы.
При необходимости вы также можете очистить тайники VM в ядре, используя /proc/sys/vm/drop_caches
.
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
Ответ 2
В рамках данного процесса вызов opendir и closedir в родительском каталоге файла приводит к недействительности кеша NFS. Я использовал это при программировании планировщика заданий. Очень, очень полезно. Попробуйте!
Ответ 3
AFAIK, параметры sync
и async
не являются источником кэширования атрибутов. async
позволяет серверу задерживать сохранение данных в файловой системе сервера, например. это влияет на долговечность записи в случае сбоев сервера NFS, но если сервер NFS стабилен, то async
не влияет на клиентов NFS.
Существует опция lookupcache=positive
NFS mount, которая может использоваться для предотвращения кэширования с отрицательным поиском, например. NFS возвращает "Нет такого файла или каталога", когда файл действительно существует на сервере. См. Directory entry caching
в man nfs
.
Ответ 4
файл clear/var/lib/nfs/rmtab на сервере nfs.
Следующие команды используются для устранения проблем, связанных с памятью. и это тоже очень опасно. soem раз это приведет к сбою приложения ur, размещенного на поле
# sync
# To free pagecache
echo 1 > /proc/sys/vm/drop_caches
# To free dentries and inodes
echo 2 > /proc/sys/vm/drop_caches
# To free pagecache, dentries and inodes
echo 3 > /proc/sys/vm/drop_caches
Ответ 5
Вы видите эффекты кеша атрибутов NFS. См. man nfs
и проверьте DATA AND METADATA COHERENCE
.
NFS по умолчанию кэширует атрибуты не менее 30 секунд (acregmin
и acdirmin
) и максимум 60 секунд (acregmax
и acdirmax
). Вы можете переопределить все это вместе с actimeo
или полностью отключить кеш атрибутов с помощью noac
. С опцией noac
mount поведение, описанное OP исчезает, но достигает производительности.
lookupcache=positive
полезен, если вы просто ищете внешний вид новых файлов, но удаления по-прежнему будут проходить через кеш атрибутов.