Определите, используется ли файл на общем ресурсе NFS

Сценарий:

Мы используем общий ресурс NFS, чтобы позволить клиентам загружать необработанные видеоматериалы. Затем файлы опрашиваются из каталога на сервере (NFS) для обработки. Поскольку мы не хотим обрабатывать файлы, которые еще не завершили загрузку, я хочу определить в сценарии на стороне сервера (Bash), используется ли файл по-прежнему.

Как говорится на страницах руководства, оба fuser а также lsof -N должен позволять обнаруживать используемые файлы на общих ресурсах NFS. Однако я не вижу файлы, используемые на сервере, что приводит к повреждению файлов на более поздних этапах обработки.

Настроить:

Мой NFS /etc/exports содержит эти настройки (UID и GID являются владельцем общего каталога на сервере, строка для удобства отображения обернута):

/export/foo 10.3.2.0/255.255.255.0 
    (rw,sync,no_subtree_check,all_squash,anonuid=1001,anongid=1001)

Клиент монтирует этот ресурс, используя:

10.3.2.197:/export/foo  /data002/  nfs  defaults        0 0

Сервер - это Ubuntu 10.04, использующий "nfs-kernel-server 1:1.2.0-4ubuntu4", клиент - SLES 10 SP2.

Когда я открываю файл на клиенте (внутри общего каталога), используя

echo "Hello" > test.txt && tail -f foo.txt

и затем проверьте (все еще на клиенте), используется ли файл

fuser foo.txt

Я вижу, что файл используется. Однако при проверке на стороне сервера (оба fuser foo.txt а также lsof -N | grep foo.txt) Я не получаю никакой информации об использовании.

Как я могу проверить на сервере, используется ли в данный момент общий ресурс NFS (независимо от того, локально он или удаленно)? Или что я делаю не так в моей текущей настройке?

1 ответ

Решение

lsof покажет вам только то, какие ресурсы используются вашей локальной системой, ни в коем случае не будет показано получение каких-либо иностранных ресурсов, но есть способ обойти это...

Все удаленное использование будет отслеживаться демоном lockd на сервере NFS, и он будет блокировать файл, если вы попытаетесь получить к нему доступ во время записи на другом узле, поэтому, если вы используете это (ваши параметры монтирования вроде точки таким образом) вы можете в этом случае использовать lsof, чтобы показать, заблокирован ли файл.

Другие вопросы по тегам