Команда очистки кэша NFS?
у меня проблемы с кэшированием атрибутов на стороне клиента NFS. Я использую некоторые серверы, один из которых является сервером NFS, а другие-клиентскими серверами NFS.
все серверы Debian (lenny, 2.6.26-2-amd64 of 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
иногда такие случаи бывают. Проблема не в содержимом файла, а в атрибутах файла(=dentries information), поскольку NFS говорит, что гарантирует согласованность с закрытием.
5 ответов
В зависимости от того, что вы подразумеваете под "ошибками ложного кэширования", работает 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
в рамках данного процесса вызов opendir и closedir в Родительском каталоге файла делает кэш NFS недействительным. Я использовал это при программировании планировщика заданий. Очень, очень полезно. Попробуй!
насколько мне известно, в sync
и async
параметры не являются источником кэширования атрибутов. Async
позволяет серверу задерживать сохранение данных в файловую систему сервера, например, это влияет на долговечность записи в случае сбоев сервера NFS, но если сервер NFS стабилен, то async
не влияет на клиентов NFS.
есть lookupcache=positive
опция монтирования NFS, которая может использоваться для предотвращения кэширования отрицательного поиска, например, NFS, возвращающая "нет такого файла или каталога", когда файл действительно существует на сервере. См.Directory entry caching
на man nfs
.
очистить файл /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
вы видите эффекты кэша атрибутов NFS. См.man nfs
, выезд DATA AND METADATA COHERENCE
.
NFS по умолчанию кэширует атрибуты в течение минимум 30 секунд (acregmin
и acdirmin
) и максимум 60 секунд (acregmax
и acdirmax
). Вы можете переопределить все это вместе с actimeo
, или полностью отключить кэш атрибутов с помощью noac
. С noac
опция монтирования, поведение, описанное OP, уходит, но поражает производительность.
lookupcache=positive
is полезно, если вы просто ищете внешний вид новых файлов, но удаление все равно будет проходить через кэш атрибутов.