web-dev-qa-db-ja.com

古いNFSのumountバインド

ローカルにマウントされた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.6.32.59では、(古い)サブマウントのumountは問題なく機能します。カーネル回帰バグのようです。
  • 上記は、NFSv3を使用してテストします。 NFSv4を使用した追加のテストでは、変更は示されませんでした。

アップデート2

  • 現在、複数の2.6および3.xカーネルをテストしており、これが3.0.xで導入されたことを確認しています。バグレポートに記入します。うまくいけば、彼らはそれを理解します。
4
Paul Eisner

私の特定のセットアップで、クリントを機能させるために私のために働いたものはこれでした:

/ 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ツリーで機能します。

お役に立てば幸いです。

2
anonymous

リモートファイルシステムを/ srv/bind-target/sub1にマウントするだけです。

このレベルの使用不可が予想される場合は、NFSに同期(おそらく失敗している可能性があります)オプションも指定して、クライアントで未書き込みの変更が発生する可能性を低くする必要があります。

1
$ umount -l

彼らが誰も働いていなかった前に、私のために働きました:

$ mount -f ...
0
user178137