ローカルにマウントされたNFSフォルダーからmount -o bind
で作成されたマウントを削除する際に問題が発生しました。次のマウント構造を想定します。
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で使用されるためです。Fuse経由のbindfs
は、オプションとしてはかなり遅くなります)ありがとう、ポール
更新1
アップデート2
私の特定のセットアップで、クリントを機能させるために私のために働いたものはこれでした:
/ fs/Doomにマウントされたnfsfsと/ fs/Doom/localvol5にマウントされた別のautofsツリーがありました。サーバーの再起動後、/ fs/Doomおよび/ fs/Doom/localvol5/subにアクセスできましたが、/ fs/Doom/localvol5自体が、umount -f、-l、-flを含むすべてにESTALEを提供しました。
再起動せずにクライアントを実行するために私がしたことは、/ fs/Doom階層全体を別のツリーに移動することでした。
mkdir /dev/shm/garbage-mount
mount --move /fs/Doom /dev/shm/garbage-mount
これによりツリー全体が移動し、/ fs/Doomがアクセス可能でマウントポイントであるためにのみ機能するようです。これらのファイルシステムをマウント解除することはできませんが、autofsを再起動して、新しい作業ツリーを取得することができました。
これは、誤動作しているnfsサブディレクトリを持つすべてのautofsツリーで機能します。
お役に立てば幸いです。
リモートファイルシステムを/ srv/bind-target/sub1にマウントするだけです。
このレベルの使用不可が予想される場合は、NFSに同期(おそらく失敗している可能性があります)オプションも指定して、クライアントで未書き込みの変更が発生する可能性を低くする必要があります。
$ umount -l
彼らが誰も働いていなかった前に、私のために働きました:
$ mount -f ...