とあるエンジニアの備忘log
2012年12月19日水曜日
NFS v3 と v4 設定まとめ (RHEL/CentOS/Ubuntu編)
NFSのセットアップ手順を簡単にまとめておきます。 NFS v3以前と v4とでポリシーがかなり違うので、それぞれの方法をまとめておきます。 まずは、 RHEL/CentOS でのやり方をメインに説明します。最後に Ubuntu でやる場合の差分情報もまとめておきました。 ### REEL/CentOS 編 #### NFSv3以前の場合 CentOS の場合、nfs-file-server パッケージはデフォルトでインストールされています。 サーバー側の設定は `/etc/exports` に directory client(option,...) client(option,...) ... の形で記述します。 /path/to/dir1 nfs.client.addr(rw,sync) /path/to/dir2 nfs.client.addr(rw,sync) みたいな感じ。 同じクライアントへ、複数のディレクトリを公開することもできる。 設定したら # chkconfig nfs on # service nfs restart RHEL や CentOS はデフォルトでファイアウォールでブロックされているので、システム->管理->ファイアウォールで無効にしておきます。 (ポート番号が固定されないらしいので。) クライアント側から # mount nfs.server.addr:/path/to/dir1 /mount/point1 # mount nfs.server.addr:/path/to/dir2 /mount/point2 みたいな感じでマウントできます。 マウント対象のディレクトリパスは、実際にサーバーが公開されているディレクトリパスよりも上の階層、下の階層も指定できます。 # mount nfs.server.addr:/ /mount/point のようにサーバー側のルートディレクトリも指定できる。 もちろん、公開されているディレクトリしか見えないわけですけど。 #### NFSv4 の場合 v3以前は、サーバーはディレクトリごとに個別に export し、クライアント側もディレクトリごとに個別にマウントしていた。 それに対して、v4 ではサーバーは一つの仮想的なファイルシステムを export し、クライアント側からはそれがサーバーのルートディレクトリとして見えます。 サーバー側の `/etc/exports` の設定は /path/to/dir nfs.client.addr(rw,sync,fsid=0) などのようにします。 `fsid=0` を指定するのがポイントです。 クライアント側はv3以前と同じように # mount nfs.server.addr:/ /mount/point のようにする。`-t nfs4` はつけてもつけなくても変わらなかった。 v4では、クライアントから見た時のディレクトリの見え方が異なります。 v3以前は サーバー側の `/path/to/dir` はクライアントからも `server:/path/to/dir` として見えました。 v4の場合、サーバー側の `/path/to/dir` はクライアント側からは `server:/` に見えます。 前述の通り、v4 では 仮想的なファイルシステムを一つだけ作ってそれを export し、ルートディレクトリとしてクライアントに見せるというポリシーのため、別々のディレクトリを export したいときはちょっと手間がかかります。 とりあえず export するディレクトリツリーを `/export` の下に構築することにする。 例えば、 `/home/user1` と `/home/user2` を export したい場合 # mkdir -p /export/user1 /export/user2 # mount --bind /home/user1 /export/user1 # mount --bind /home/user2 /export/user2 このように export したいディレクトリを bind で `/export` の下に集めるわけだ。 `/etc/exports` の書き方は2通りあります。 1つ目は親ディレクトリに `fsid=0` を指定、子ディレクトリには `nohide` を指定する方法。 /export nfs.client.addr(rw,sync,fsid=0) /export/user1 nfs.client.addr(rw,sync,nohide) /export/user2 nfs.client.addr(rw,sync,nohide) 2つ目は親ディレクトリに `fsid=0` と `crossmnt` を指定する方法。 /export nfs.client.addr(rw,sync,fsid=0,crossmnt) 親に `crossmnt` 指定すると、子に `nohide` 指定するのと同じ効果が得られます。 後者のやり方の方が、重複する記載がないので、楽だと思います。 なお、v4ではポートが固定されるので、ファイアウォールといっしょに使いやすいです。 2049/tcp を開いておきます。 #### v3以前とv4が混在したら、、、 上記のように `/etc/exports` の書き方、つまり `fsid=0` がついているかどうかで、v3 か v4 かが判断されるわけです。 一つの `/etc/exports` の中に、v3以前の書き方とv4の書き方を混在して書くこともできるわけだが、その場合どうなるんでしょうね。実験してみました。 `/etc/exports` の記載は以下のようにします。 # v3 style /path/to/dir1 nfs.client.addr(rw,sync) /path/to/dir2 nfs.client.addr(rw,sync) # v4 style /export nfs.client.addr(rw,sync,fsid=0) /export/user1 nfs.client.addr(rw,sync,nohide) /export/user2 nfs.client.addr(rw,sync,nohide) クライアントから # mount nfs.server.addr:/ /mount/point とするとサーバーの `/export` がマウントされた。ルートディレクトリをマウントしようとすると v4 の意味に解釈されるらしい。 # mount nfs.server.addr:/path/to/dir1 /mount/point とするとサーバーの `/path/to/dir1` がマウントされた。 一応、同一サーバー、同一クライアント間で v3以前と v4 は同時使用できるみたいだ。 ただし、 #mount nfs.server.addr:/path/to /mount/point のように v3 スタイルの上位ディレクトリを指定するとアクセス拒否されるようになりました。 v3以前のやり方のほうが設定は簡単でわかりやすいとは思いますが、v4 だと - ポート番号が2049 固定でファイアウォールと一緒に使いやすい - Kerberos と組み合わせてセキュリティ面を強化 - idmapd で サーバー/クライアント間で異なるUID/GID でも対応できる などのメリットもあるので、自分は NFSv4 を使うようになりました。 Kerberosとの組み合わせ方は、後日まとめます。 ### Ubuntu編 さて、上記は RHEL/CentOS の場合ですが、Ubuntuの場合にも簡単にまとめておきます。 Ubuntu ではデフォルトでは NFS は入っていないので サーバー側は `nfs-kernel-server` パッケージをインストール。 クライアント側は `nfs-common` パッケージをインストールします。 サービス名は `nfs-kernel-server` です。 あとのやり方は RHEL/CentOS編 で説明したのと同じですので、割愛します。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿