- - PR -
NFSサーバ停止に伴う、NFSクライアントの挙動について
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-08-30 00:04
初めてまして。
NFSを使用した環境を構築していますが、問題を抱えています。 どなたか詳しい方、ご教授願います。 [環境] NFSクライアント FedoraCore3(Linuxカーネル2.6) NFSサーバ Linux2.6 NFSサーバのディスクを、LANを介して、NFSクライアントのマシンで マウントしています。(LANは同一セグメントで外部との接続はありません。) マウントコマンドは以下で、NFSversion4を使用しています。 >mount -t nfs4 -o soft,proto=tcp,192.168.1.1:/volume1 /mnt [現象] マウントが正しく行われている状態(且つ、マウントポイント以下のファイルを 参照している状態)で、NFSサーバ(マシン)を通常のシャットダウンで停止した 後、/mnt以下で、lsコマンドを実行するとコマンドがロック状態で帰ってきません。 また、強制的にアンマウント(>umount -f /mnt)を実行したり、NFSクライア ント(マシン)をシャットダウンしようとすると、OSがハングアップする時があります。 一方、 NFSサーバ(マシン)を通常のシャットダウンではなく、回線断や、電源断で 強制的に通信不可とした場合は、lsコマンドは即時でエラーが帰してきますし、 強制アンマウントや、シャットダウンでのハングアップ障害は発生しません。 [回避したいこと] 要点を整理しますと、NFSサーバと通信不能になった理由より、NFSクライ アント側の挙動に違いが有るということが現象説明の主旨です。 解決したいのは、NFSサーバ(マシン)を通常のシャットダウンで停止時に、 NFSクライアント側でコマンドがロックしたり、OSがハングしたりする現象 の回避です。 マウントオプションで、hardではなく、softを指定することにより、回避できる と考えていますが、うまく行かず、質問させて頂いた次第です。 宜しくお願い致します。 |
|
投稿日時: 2005-08-30 12:47
詳しくないですが、フォローがないようですので...
「NFS」で、「NFSサーバがLinux」で、「NFSクライアントもLinux」で、 しかも「Fedora Core」となると、なにが起こっても不思議じゃない 気がするです。 切り分けをするなら、「tcpじゃなくてudpにしてみる」とか、 「softじゃなくてhard,intrにしてみる」とかでしょうか。 たいていのアプリケーションはEINTRが返ってきたらもう一度 読みに行くつくりになってると思いますので意味ないかもですが。 |
|
投稿日時: 2005-08-30 18:50
ぽんす様
お忙しいところ、ご返答いただき大変有難うございます。 いくつか、再現テストを行ってみました。 現象は、前の書き込みを参照願います。 -------------------------------------------------------------------------- (1)NFSクライアントをRed Hat Enterprise Linux 4で試行 →ロック現象再現 (2)マウントオプション変更 nfsv3,udp指定 →正常に障害を検出し、ファイルアクセスしていたテストプロがエラーリターン ※NFSv4でudp指定はできませんでした。 (3)マウントオプション変更 NFSv4,tcp,hard,intrの指定 →ロック現象再現 自作のテストプロでも、EINTR割り込みで戻ってこないです。 (4)ロック現象状態の確認の一環として、停止したNFSサーバを再起動すると、 ロックがとかれました。 ということは、ロック状態に陥ると、softマウント指定をしていても、まるで hard,nointrを指定しているのと同じになっています。 ------------------------------------------------------------------------- NFSv4,tcpにこだわっているのは、書き込みの信頼性と、ファイル排他等の が、v3よりも適切に行われる点です。 本件についは、softマウントの仕様を何度も読み返しましたが、メジャータイム アウト時間を経過するととエラーリターンしてくると、思われるのに、不思議であ るとともに、困っています。 なにか、情報をお持ちの方、宜しくお願い致します。 カーネルソースを見たら分かるのでしょうか?? (見たことの無い私では、調査できないと思っていますが..。) |
|
投稿日時: 2005-08-30 21:57
「ロック」じゃなくて「ブロック」ですよね。念の為。
NFSv4ではバグで、もしくは仕様で、softがちゃんと使えないかも ですね。 自分でもSLES9のmanをみてみましたが、大昔に書かれた ものがそのままアップデートされていないので、こういう微妙な 問題に対しては役に立ちそうにありません。 NFSのソースをどうこうする前に、アップデート情報を調べてみると よいかも。ただ、RHEL4でもダメということだと期待薄ですね。 EINTRについては... read(2)やwrite(2)といった、「遅い」システムコールは1文字も 読み書きする前に割り込みが発生してエラーで返る可能性があります。 このときセットされるのがEINTRです。 そういう性質のものですので、アプリケーションはふつう、EINTR だった場合には再度読み書きのシステムコールを発行するように 書かれています。というわけで、intrにしてもアプリケーションが ブロックするのは変わらないでしょう。 softにしているとOSがハングアップすることがある、というので ひょっとしたらその症状が出なくなるかも?と思って書きました。 追記。 CentOS 4.1 をインストールして、manを読んでみました。 nfs4でもsoftが使えそうなことを書いてありますね。 あと、"Avoid using this option with proto=udp or with a short timeout." とか。 デフォルトだとtimeoは0.7秒になってると思いますが、あまり 短い値でsoftにしようとしても無視されるようになってる、 とかあるかしらん? [ メッセージ編集済み 編集者: ぽんす 編集日時 2005-08-31 00:25 ] |
1