NFS: Stale file handle
Сообщение Stale file handle означает, что клиент держит идентификатор файла, который сервер больше не признаёт: каталог переэкспортировали, файл удалили и создали заново, или сервер перезапустили с другими настройками.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Каталог переэкспортирован на сервере
Применение нового описания ресурсов меняет идентификаторы. Клиенты с открытыми файлами получают отказ.
-
Файл удалён и создан заново на сервере
Процесс, держащий прежний файл открытым, обращается к тому, чего больше нет.
-
Сервер перезапущен без сохранения состояния
После перезапуска сервер может не признать прежние идентификаторы, если экспорт настроен без постоянного идентификатора.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Текущие сетевые монтирования.
findmnt -t nfs4,nfs -o TARGET,SOURCE,OPTIONSСообщения ядра о состоянии клиента NFS.
journalctl -k -b --no-pager | grep -i nfs | tail -10Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Применение нового описания ресурсов меняет идентификаторы. Клиенты с открытыми файлами получают отказ.
- Как проверить
-
Посмотрите монтирование и попробуйте перемонтировать.
findmnt -t nfs4,nfs -o TARGET,SOURCE sudo ls /mnt/share 2>&1 | head -3
- Как исправить
-
Перемонтируйте каталог на клиенте. Чтобы это не повторялось, задайте на сервере постоянный идентификатор экспорта.
sudo umount -l /mnt/share && sudo mount /mnt/share
- Почему происходит
- Процесс, держащий прежний файл открытым, обращается к тому, чего больше нет.
- Как проверить
-
Посмотрите, кто держит файл.
sudo fuser -vm /mnt/share 2>&1 | head
- Как исправить
- Перезапустите службу, которая держит файл: она откроет новый.
- Почему происходит
- После перезапуска сервер может не признать прежние идентификаторы, если экспорт настроен без постоянного идентификатора.
- Как проверить
-
Посмотрите настройки экспорта на сервере.
sudo exportfs -v 2>/dev/null | head
- Как исправить
- Задайте постоянный идентификатор экспорта: тогда перезапуск сервера не будет ломать клиентов.
Пример вывода
Каталог переэкспортирован, клиент держит прежний идентификатор. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
myapp[1200]: error: open /mnt/share/data.db: stale file handle
kernel: nfs: server nfs.example.internal error: fileid changed
Связанные ошибки
- Сетевой каталог подвисает: жёсткое монтирование NFS Обращение к каталогу NFS блокируется намертво: жёсткое монтирование без таймаутов. Как настроить устойчиво.
- Mount process exited, code=exited, status=32: не найдено устройство Монтирование не проходит: устройство или UUID не найдены, неверная файловая система, недоступен сетевой ресурс. Код 32 от команды mount.
- Input/output error в журнале службы Ошибка ввода-вывода: проблемы носителя, отвалившийся сетевой ресурс, повреждённая файловая система. Что проверять срочно.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Dependency failed for … и результат 'dependency' Сообщение Dependency failed for: служба не запускалась, потому что упала её зависимость. Как найти настоящего виновника.
- Device or resource busy при операции с файлом Ошибка 16: файл или устройство заняты. Разбор для точек монтирования, устройств и файлов конфигурации.
- Target is busy: точка монтирования занята Не удаётся отмонтировать: target is busy. Как найти процессы, которые держат точку монтирования, и корректно освободить её.
- Transport endpoint is not connected Ошибка 107: точка монтирования отвалилась или сокет закрыт. Разбор для сетевых файловых систем и монтирования через fuse.
Где встречается чаще всего
Источники
-
exports(5)
Параметр fsid и постоянные идентификаторы экспорта. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено применением нового описания ресурсов при открытых файлах на клиенте.