Порядок перезагрузок важен. Перезагрузка сервера после клиентов может привести к этой ситуации. Устаревший дескриптор NFS указывает, что у клиента открыт файл, но сервер больше не распознает дескриптор файла. В некоторых случаях NFS очищает свои структуры данных по истечении времени ожидания. В других случаях вам нужно будет самостоятельно очистить структуры данных NFS и перезапустить NFS. Расположение этих структур в некоторой степени зависит от O / S.
Попробуйте перезапустить NFS сначала на сервере, а затем на клиентах. Это может очистить дескрипторы файла.
Перезагрузка серверов NFS с файлами, открытыми с других серверов, не рекомендуется. Это особенно проблематично, если открытый файл был удален на сервере. Сервер может держать файл открытым, пока он не будет перезагружен, но перезагрузка удалит дескриптор файла в памяти на стороне сервера. Тогда клиент больше не сможет открыть файл.
Определить, какие крепления были использованы с сервера, сложно и ненадежно. showmount -a
Опция может показать некоторые активные крепления, но не может сообщать обо всех из них. Заблокированные файлы легче идентифицировать, но для них требуется активация блокировки, и для блокировки файлов используется клиентское программное обеспечение.
Вы можете использовать lsof
на клиентах, чтобы идентифицировать процессы, у которых есть файлы, открытые на монтировках.
Я использую параметры монтирования hard
и intr
монтирования на моих монтируемых NFS. hard
Опция заставляет IO быть повторен на неопределенный срок. intr
Опция позволяет процессам быть убиты , если они ожидают от NFS IO для завершения.
hard, intr
это хороший совет. Однако обратите внимание, что NFS удваивает время ожидания с каждой попыткой. Таким образом, вы лучше всегоtimeo=1
иretrans=5
так и так. Обратите внимание, что это приведет к чрезмерной нагрузке на ваш сервер NFS после перезапуска NFS. Старайтесь не перезапускать службу NFS так часто;)