у меня проблема с удалением креплений, созданных с помощью 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).
Кто-нибудь знает, как я могу:
mount -o bind
? (не может использовать программные ссылки, потому что смонтированные каталоги будут использоваться в chroot; bindfs
через FUSE это далеко не вариант)Спасибо, Пол
Обновление 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 ...