- PR -

NFSサーバ停止に伴う、NFSクライアントの挙動について

1
投稿者投稿内容
ことのね
会議室デビュー日: 2005/08/26
投稿数: 2
投稿日時: 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を指定することにより、回避できる
と考えていますが、うまく行かず、質問させて頂いた次第です。

宜しくお願い致します。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2005-08-30 12:47
詳しくないですが、フォローがないようですので...

「NFS」で、「NFSサーバがLinux」で、「NFSクライアントもLinux」で、
しかも「Fedora Core」となると、なにが起こっても不思議じゃない
気がするです。

切り分けをするなら、「tcpじゃなくてudpにしてみる」とか、
「softじゃなくてhard,intrにしてみる」とかでしょうか。
たいていのアプリケーションはEINTRが返ってきたらもう一度
読みに行くつくりになってると思いますので意味ないかもですが。
ことのね
会議室デビュー日: 2005/08/26
投稿数: 2
投稿日時: 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マウントの仕様を何度も読み返しましたが、メジャータイム
アウト時間を経過するととエラーリターンしてくると、思われるのに、不思議であ
るとともに、困っています。

なにか、情報をお持ちの方、宜しくお願い致します。
カーネルソースを見たら分かるのでしょうか??
(見たことの無い私では、調査できないと思っていますが..。)
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)