Я работаю на своем сервере, с которого я экспортирую один каталог, используя NFS. Конечно, в течение недели или около того перезагрузок сервера я несколько раз забывал umount
экспортировать файловую систему на моей рабочей станции (которая монтируется /etc/fstab
при загрузке). В промежутке я смог umount
после факта и перемонтировать ( не пользуюсь autofs
):
umount -fl /data0
mount /data0
Но это больше не работает.
Я не могу смонтировать экспортированный каталог с сервера в другой каталог (монтирование зависает), но я могу смонтировать nfs этот экспортированный каталог на виртуальной машине, работающей на моей рабочей станции.
То , что я пытался это удаление ( rmmod
) с nfs
и nfsv3
модуль (который не будет работать: Resource temporarily unavailable
). lsof
виснет. mount
не показывает ничего подключенного через nfs
. Вероятно, это все результат использования umount -l несколько раз, но первые два раза это работало без проблем.
Я перезапустил сервер в это время, после того, как я не смог смонтировать его без какой-либо разницы. Я тоже использовал service nfs-kernel-server restart
. Я подозреваю, что все вернется в нормальное состояние, если я перезапущу клиентскую рабочую станцию.
Есть ли способ восстановиться после этого и повторно инициализировать клиентскую часть nfs на моей рабочей станции без перезагрузки?
Если я не смогу это исправить без перезагрузки, не произойдет ли это снова, если я начну использовать autofs
?
lsof -b
висит как последние строки:
lsof: avoiding readlink(/run/user/1001/gvfs): -b was specified.
lsof: avoiding stat(/run/user/1001/gvfs): -b was specified.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1001/gvfs
Output information may be incomplete.
в линиях, предшествующих этому, нет /data0
.
Запись в /etc/fstab
:
192.168.0.2:/data0 /data0 nfs defaults,auto,nolock,user 0 2
lsof -b
вешать?upstart
и все. Вы, вероятно, хотите перезапустить все службы вnfs-common
пакете, похоже, их несколько. Скорее всего, порядок также имеет значение, поэтому попробуйте прекратить, затем начните в порядке зависимости. Вы, вероятно, также хотите сделать вrpcbind
качестве вашей последней остановки / первого запуска. Я делал это раньше на Debian, но у него есть только один хорошийnfs-common
сервис.Ответы:
Как подсказывает @PaperMonkey в комментариях, вы можете быть испорчены, потому что вы использовали параметры монтирования по умолчанию, которые включают повторные попытки навсегда.
intr
Раньше это был способ облегчить прерывание вещей, которые застряли при вводе / выводе, на сломанное монтирование NFS, но теперь это неоперация.SIGKILL
все еще может прерывать процессы, застрявшие в NFS, по крайней мере, такnfs(5)
утверждает. Смотрите эту страницу руководства для вариантов монтирования.Используйте
soft
вместо значения по умолчанию,hard
если вы хотите, чтобы NFS не повторялась вечно.Я также рекомендую использовать автомонтер. Сделайте символические ссылки на / net / host / foo / bar где-нибудь, если хотите.
Часто проще просто перезагрузиться, но я думаю, что теоретически вы должны быть в состоянии
kill -9
(то естьkill -KILL
) любые процессы, которые застряли в NFS. ТОГДА может работать. Только будьте осторожны, чтобы не допустить, чтобы при завершении NFS больше процессов застревало.источник
D
(Disk-sleep) в ps / top, вероятно, застрял в NFS.Ниже приведен список команд, которые необходимо выполнить для устранения этой проблемы в дистрибутиве на основе RPM.
После этого:
источник
Использование
autofs
поможет избежать этой проблемы в будущем. Самым большим преимуществомautofs
является то, что он не пытается монтировать каталог, пока вы не попытаетесь его использовать, это означает, что вы избегаете неработающих точек монтирования и что он не будет пытаться монтировать бесконечно, вы можете установить период ожидания для размонтирования (который обычно короткая). Я не уверен, повторяется ли автоматическое монтирование вообще во время этого периода предварительного ожидания, но в любом случае я обычно устанавливаю таймаут автоматического монтирования только на несколько секунд.Чтобы решить проблему без перезапуска, вы можете обойтись
umount -a
(размонтировать все, что указано в / etc / fstab)mount -a
(смонтировать все в / etc / fstab), но я не могу, если потерянный каталог содержит домашний каталог, который вы ' Лучше всего сохранить работу в другом месте и просто перезагрузиться.источник
Используйте результаты команды lsof, чтобы найти процессы на клиенте, содержащие ссылки на устаревшую файловую систему, и уничтожить эти процессы.
umount -f / data0
убедитесь, что вы можете пропинговать сервер, а затем перемонтировать диск. Перезапустите все нужные процессы.
Кластеры
Обратите внимание: если вы запустите настройку кластерного сервера, вы будете получать устаревший дескриптор файла nfs каждый раз, когда сервер должен переключаться при сбое. Чтобы избежать этого, вы должны экспортировать свои файловые системы, используя опцию fsid. Номер для fsid должен быть одинаковым для каждой соответствующей файловой системы на двух серверах. Это зависит от вас, чтобы обеспечить репликацию файлов. Смотрите фрагмент из справочной страницы ниже:
fsid = num | root | uuid NFS должна иметь возможность идентифицировать каждую экспортируемую файловую систему. Обычно он использует UUID для файловой системы (если в файловой системе есть такая вещь) или номер устройства, на котором хранится файловая система (если файловая система хранится на устройстве). Поскольку не все файловые системы хранятся на устройствах, и не все файловые системы имеют UUID, иногда необходимо явно указать NFS, как идентифицировать файловую систему. Это делается с помощью опции fsid =.
Для NFSv4 существует выделенная файловая система, которая является корнем всей экспортируемой файловой системы. Это указывается с помощью fsid = root или fsid = 0, которые означают одно и то же.
Другие файловые системы могут быть обозначены маленьким целым числом или UUID, который должен содержать 32 шестнадцатеричных цифры и произвольную пунктуацию.
Ядра Linux версии 2.6.20 и более ранние не понимают настройки UUID, поэтому необходимо использовать маленькое целое число, если для таких ядер необходимо установить параметр fsid. Поддерживается установка как небольшого числа, так и UUID, поэтому можно настроить одинаковую конфигурацию для работы как со старым, так и с новым ядром.
источник