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

размонтировать привязку устаревшей NFS

у меня проблема с удалением креплений, созданных с помощью mount -o bind из локально смонтированной папки NFS. Предположим следующую структуру монтирования:

Примонтированный каталог NFS:

$ mount -o rw,soft,tcp,intr,timeo=10,retrans=2,retry=1 \
 10.20.0.1:/srv/source /srv/nfs-source

Связанный каталог:

$ mount -o bind /srv/nfs-source/sub1 /srv/bind-target/sub1

В результате получается эта карта крепления

$ mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
# ...
10.20.0.1:/srv/source on /srv/nfs-source type nfs (rw,soft,tcp,intr,timeo=10,retrans=2,retry=1,addr=10.20.0.100)
/srv/nfs-source/sub1 on /srv/bind-target/sub1 type none (rw,bind)

Если сервер (10.20.0.1) понижается (например, ifdown eth0) ручки устареют, что и следовало ожидать.

Теперь я могу отключить монтирование NFS с помощью силы

$ umount -f /srv/nfs-source

Это занимает несколько секунд, но работает без проблем. Однако я не могу размонтировать связанный каталог в /srv/bind-target/sub1. Вынужденный umount приводит к:

$ umount -f /srv/bind-target/sub1
umount2: Stale NFS file handle
umount: /srv/bind-target/sub1: Stale NFS file handle
umount2: Stale NFS file handle

Вот след http://pastebin.com/ipvvrVmB

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

lsof также жалуется:

$ lsof -n
lsof: WARNING: can't stat() nfs file system /srv/nfs-source
      Output information may be incomplete.
lsof: WARNING: can't stat() nfs file system /srv/bind-target/sub1 (deleted)
      Output information may be incomplete.
lsof: WARNING: can't stat() nfs file system /srv/bind-target/
      Output information may be incomplete.

Я пробовал с недавними стабильными ядрами Linux 3.2.17, 3.2.19 и 3.3.8 (не могу использовать 3.4.x, потому что нужен патч grsecurity, который пока не поддерживается - grsecurity не исправлен в тестах выше !).

Мои nfs-utils - это версия 1.2.2 (стабильный debian).

Кто-нибудь знает, как я могу:

Спасибо, Пол

Обновление 1

Обновление 2

Что-то, что помогло мне в моей конкретной настройке, чтобы заставить работать клинты, было следующее:

У меня было дерево autofs с смонтированной nfs fs на / fs / doom и еще с установленной на / fs / doom / localvol5. После перезагрузки сервера можно было получить доступ к / fs / doom и / fs / doom / localvol5 / sub, но / fs / doom / localvol5 сам давал ESTALE для всего, включая umount -f, -l, -fl.

Что я сделал, чтобы клиент работал без перезагрузки, так это переместил всю иерархию / fs / doom в другое дерево:

    mkdir /dev/shm/garbage-mount
    mount --move /fs/doom /dev/shm/garbage-mount

Это переместило все дерево и, по-видимому, работает только потому, что / fs / doom был доступен и точка монтирования. Я не могу размонтировать ни одну из этих файловых систем, но мне удалось перезапустить autofs и получить новое и работающее дерево.

Это должно работать с любым деревом autofs, в котором есть неисправные подкаталоги nfs.

Надеюсь, это поможет.

Вы можете просто смонтировать удаленную файловую систему в / srv / bind-target / sub1.

Если вы ожидаете такой уровень недоступности, вам также следует указать параметр синхронизации (хотя, возможно, по умолчанию) для NFS, чтобы снизить вероятность наличия незаписанных изменений на вашем клиенте.

$ umount -l

Работали у меня, раньше ни один из них не работал:

$ mount -f ...