Назад | Перейти на главную страницу

Определите, используется ли файл в общей папке 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 (независимо от того, используется ли он локально или удаленно)? Или что я делаю не так в моих текущих настройках?

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

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