2016年3月17日木曜日

【備忘録】なんでこんなにややこしい NFS v4のマウントでハマった件

と思わず件名に書きなぐってしまうほど、1時間ほどハマったのでメモっておきます。

参考情報


もうね、いろいろ調べましたよ..最終的に
  • NFSv4(Stray Penguin)
より抜粋「このようにエクスポーとすると、NFSv4 では、サーバ上の /home/hoge/ が server:/ として開放される。Windowsファイル共有のイメージに近い。」で分かりました。とりあえず3つぐらい関門があったので順次説明していきます。

以下、NFSを通じて旧サーバーから新サーバーへホームディレクトリの移行(rsyncとかで)する目的です。従って、一時的にセキュアでない設定(no_root_squash)をしています。これをしないと、サーバーとクライアント間で UID/GIDが引き継がれないためです。

NFSサーバー側

NFSサーバー側の設定


/etc/exports
/home   NFSクライアントIPアドレス(ro,fsid=0,no_root_squash)

roはリードオンリー、fsid=0はNFSv4特有の約束事、no_root_squashは、サーバーとクライアント間で UID/GIDが引き継げるというものです。

NFSサーバー側でNFS起動


/etc/init.d/nfs start

をしておきましょう。ない?それはNFSがインストールされていないということになります。インストールの方法はここでは割愛します。

NFSサーバー側のFIRWEALL設定


ここではiptablesによるOSのFIREWALLが有効だと仮定します。
またRedHat EL 6あたりを使っていると仮定します。

NFS v4はデフォルトで 2049/tcp を使います。

/etc/sysconfig/iptables でFIREWALLの管理をしているなら、

-A RH-Firewall-1-INPUT -s NFSクライアントのIPアドレス/255.255.255.255 -m state --state NEW -m tcp

を一行追加して、 /etc/init.d/iptables condrestart
でもしておけばいいでしょう。



NFSクライアント側


NFSクライアント側でのNFSマウント用のディレクトリ作成


mkdir -p  /mnt/nfs/hogehoge

NFSクライアント側よりNFSサーバーへのNFSマウント


mount -t nfs4 -o soft   NFSサーバーのIPアドレス:/   /mnt/nfs/hogehoge

ここで一番ハマりました。

NFS v3
mount -t nfs -o soft   NFSサーバーのIPアドレス:/home   /mnt/nfs/hogehoge

との違いはおわかりでしょうか。そう、NFS v4は、NFSサーバー側のマウントは、 /etc/exportsのマウントポイントが ルートディレクトリとしてマッピングされるように仕様変更されていたのです!!

なお、 オプション softは、NFSサーバーへアクセスできなくなったときに接続を諦めるというものです。 


エラー1 NFSサーバーからの応答がない


NFSサーバー側のFIREWALLでブロックされている可能性があります。
2049/tcpをNFSクライアントからサーバーへアクセスできることを確認してみてください。

エラー2 NFSサーバーへアクセスできない


NFSサーバー側でNFSが正しく起動していることを確認

エラー3 Protocol not supported


mount.nfs: mount(2): Protocol not supported mount.nfs ... のようなエラーが出た場合です。
mount -t nfs4 の場合には出ないはずなので今回は関係ないはずですが、どうしても nfs4が使えない場合には
mount -t nfs  -o vers=4,nfsvers=4,soft   ...

など、vers(NFSクライアント側のNFSバージョン)、nfsvers(NFSサーバー側のNFSバージョン)を直接指定してマウントしてみてください。

エラー4 Operation not permitted


mount.nfs4: Operation not permitted などのエラーがでる場合です。
NFSサーバー側の /etc/exports 設定に 「fsid=0」が入っていないのが原因です。入れましょう。


/home   NFSクライアントIPアドレス(ro,fsid=0,no_root_squash)

エラー5 No such file or directory


mount.nfs4: NFSサーバー:/exports failed, reason given by server: No such file or directory のようなエラーがでた場合です。

NFS v4より、マウントに関する仕様が変更されているようで、

NFSサーバー(/home)
/home   NFSクライアントIPアドレス(ro,fsid=0,no_root_squash)

とした場合
mount -t nfs4 -o soft   NFSサーバーのIPアドレス:/   /mnt/nfs/hogehoge

のように、NFSサーバー側のマウントは 「/」 (従来は /home)にしてみてください。
つまりルートディレクトリの位置が変更されたってことですね。

/home/hogehoge へのマウントなら
mount -t nfs4 -o soft   NFSサーバーのIPアドレス:/hogehoge   /mnt/nfs/hogehoge

ってことになります。これを解決するのに結構かかっちゃいました。
まぁNFS v4の方がセキュアではあるんですけどね。 v3まではNFSサーバー側のルートディレクトリをダイレクトに指定できていたわけですから...

2016年3月17日 @kimipooh


0 件のコメント: