2007年11月21日

LinuxのNFSv4とNFSv3でエクスポートポイントを共通化

全てサーバが隈無くNFSv4で統一できたら悩むことはないのだが、NFSv3までしかサポートしないサーバとかがまだ多くある。

Linux NFSv4 で1つ混乱する振る舞いがある。過渡的な状況かもしれないが、どうなるだろかなぁ。

Linux NFSv4では、クライアントから見えるNFSv4の疑似ファイルシステムが fsid=0 を指定した特定のエクスポートポイントをルートとしたディレクトリのツリーになっている。結果、サーバ側の/etc/exports で記述されるディレクトリと実際にクライアントが見るディレクトリが異なることになる。

かつ、fsid=0が指定されたディレクトリのツリー内のエクスポートポイントはNFSv4でのみ、それ以外はNFSv3でのみで利用が可能になっているらしい。。。へたれ実装と言われかねないなぁ。

実際、Solaris 10では、疑似ファイルシステムのルートは実際のルートだし、NFSv3/NFSv4は共有設定ファイルでは区別は無いし、、、そうあるべくある感じだし。。。まぁいいかぁ。

automount を使う場合、NFSv3とNFSv4が同じエクスポートポイントに見えるようにしなければ混乱の元になる。 Linuxには seamless という単語が無いのかぁ、、、。

サンプル

/export/home をNFSv3/NFSv4の両方で同じエクスポートポイントで共有する場合

NFSv4の疑似ファイルシステムを作成

/etc/fstab

...
# for nfs4
/export/home    /srv/nfs4/export/home   none    bind
...

シェルで

# mkdir -p /srv/nfs4/export/home
# mount /srv/nfs4/export/home
exports を書く

/etc/exports

# for NFS3 Clients

/export/home \
    *(rw,sync,insecure,no_subtree_check) \
    gss/krb5(rw,sync,insecure,no_subtree_check) \
    gss/krb5i(rw,sync,insecure,no_subtree_check) \
    gss/krb5p(rw,sync,insecure,no_subtree_check) \

# for NFS4 Clients
/srv/nfs4   \
    gss/krb5(rw,sync,fsid=0,crossmnt,insecure,no_subtree_check) \
    gss/krb5i(rw,sync,fsid=0,crossmnt,insecure,no_subtree_check) \
    gss/krb5p(rw,sync,fsid=0,crossmnt,insecure,no_subtree_check)


/srv/nfs4/export/home   \
    gss/krb5(rw,sync,fsid=1,insecure,no_subtree_check) \
    gss/krb5i(rw,sync,fsid=1,insecure,no_subtree_check) \
    gss/krb5p(rw,sync,fsid=1,insecure,no_subtree_check)

で、nfsサービス群を再起動。Kerberozied NFS の設定もしとく。

テスト
# mount -t nfs -osec=krb5i server:/export/home /mnt
# mount -t nfs4 -osec=krb5i server:/export/home /mnt2
# mount
server:/export/home on /mnt type nfs (rw,sec=krb5i,addr=XX.XX.XX.XX)
server:/export/home on /mnt2 type nfs4 (rw,sec=krb5i,addr=XX.XX.XX.XX)

めでたく、同じエクスポートポイントが見えました。。。Linux NFSv4 めぇ!

追記

Open Directory の設定のまとめ 2008Q1

0 件のコメント: