Команда очистки кэша 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 полезно, если вы просто ищете внешний вид новых файлов, но удаление все равно будет проходить через кэш атрибутов.