NFS(Network File System)を使う事によって、
リモートマシンのディスクパーティションをあたかもローカルのハードディスクのようにマウントすることができるようになります。
|
|
■NFS サーバーの前準備
まず、NFSサーバーとして動作させるためには、以下のパッケージが必要となりますので予めインストールされているかどうか確認して置いてください。
$ rpm -q portmap
nfs-utils |
|
■自動起動の設定
システム再起動時に、自動的に起動するように設定します。
# chkconfig portmap
on
# chkconfig nfslock on
# chkconfig nfs on |
|
上記3つのサービスは起動する順番があり、portmap→nfslock→nfs の順に起動するようになっている必要があります。以下コマンドを入力して確認しておきましょう。
# ls /etc/rc.d/rc3.d/*{portmap,nfs*}
/etc/rc.d/rc3.d/S13portmap /etc/rc.d/rc3.d/S14nfslock
/etc/rc.d/rc3.d/S60nfs |
|
■portmap、nfslock、nfsの起動
それでは、実際に上記の順番どおり起動してみましょう。
# /etc/init.d/portmap
start
Starting portmapper: [ OK ]
# /etc/init.d/nfslock start
Starting NFS statd: [ OK ]
# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS daemon: [ OK ]
Starting NFS mountd: [ OK ] |
|
■プロセスの起動確認
プロセスが正しく起動されたかどうかを確認するには、
rpcinfo コマンドを使用します。以下のように、
rquotad、nfs、nlockmgr、mountd
が表示されればOKです。
# rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32771 status
100024 1 tcp 35865 status
100011 1 udp 715 rquotad
100011 2 udp 715 rquotad
100011 1 tcp 718 rquotad
100011 2 tcp 718 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100021 1 udp 32772 nlockmgr
100021 3 udp 32772 nlockmgr
100021 4 udp 32772 nlockmgr
100021 1 tcp 35866 nlockmgr
100021 3 tcp 35866 nlockmgr
100021 4 tcp 35866 nlockmgr
100005 1 udp 734 mountd
100005 1 tcp 737 mountd
100005 2 udp 734 mountd
100005 2 tcp 737 mountd
100005 3 udp 734 mountd
100005 3 tcp 737 mountd |
|
■TCP Wrapperによるアクセス制御
portmap は、NFSサーバーにアクセスする際に、libwrap.so を使用しているため、/etc/hosts.allow、/etc/hosts.deny
を用いて、TCP Wrapperの機能を使用する事ができるようになります。LAN 内のみからのアクセスを許可する場合には、以下のように設定しておきます。
◎/etc/hosts.allow
# vi /etc/hosts.allow
portmap : 172.16.50.0/255.255.255.224
//ホストを指定する場合は、
portmap : 172.16.51.2 , 172.16.51.3 |
|
/etc/hosts.deny をに単に「ALL:ALL 」と記述する方法もありますが、この場合、明示的に許可されたホスト以外は全てのサービスを拒否する事になってしまうので、新規ソフトウェアをインストールした場合などにトラブルの元となるので、NFS
関連のデーモンをひとつづつ追加しておいた方が無難です。
◎/etc/hosts.deny
# vi /etc/hosts.deny
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL |
|
■/etc/exports の設定
/etc/exports は、どのマシンに、どのディレクトリを、どのような権限でアクセス許可するかを設定するファイルです。書式は以下の通りです。
エクスポートするディレクトリ アクセスを許可するクライアント(権限) |
|
実際には以下のようになります。以下は、「/home/data ディレクトリを172.16.50.0/27
のネットワークに読み取りを許可する」という意味になります。
# vi /etc/exports
/home/data 172.16.50.0/255.255.255.224
ro |
|
なお、使用できる権限オプションを以下に記すので参考にしてください。
◎オプション
|
ro |
読み取りのみ許可する |
|
rw |
読み取りと書き込みを許可する |
|
noaccess |
エクスポートしたディレクトリ以下のディレクトリにアクセスできないようにする。このオプションでは、単独では意味がないので、通常は他のエントリと組み合わせて使用します。
|
|
link_relative |
絶対パスで指定されているシンボリックリンクを相対パス指定に変換する。通常はあまり使用するべきではありません。
|
|
root_squash |
エクスポートされたディレクトリに対して、root 権限ではアクセスできないようにする。
|
|
no_root_squash |
エクスポートされたディレクトリに対して、root 権限でアクセスできるようにする。
|
|
squash_uids=n-m |
UIDがn から m のユーザーは、エクスポートされたディレクトリに対してそのままのUID
ではなく、nobody ユーザーとしてしかアクセスできないようにする。
|
|
all_squash |
root を含めて全てのユーザーがnobody ユーザーにマッピングされる |
|
以下に、簡単に設定例をあげてみます。以下、1行目では、/usr/local/src を kororo.jp
ドメインのユーザーにのみ読み取りだけを許可し、0から499 までのユーザーに対しては、nobodyユーザーとしてアクセスさせています。3行目は、/export/home
ディレクトリを自ネットワークのマシンのみに読み書きを許可し、0から499 までのユーザーに対しては、nobodyユーザーとしてアクセスさせる設定になっています。
# vi /etc/exports
/usr/local/src *.kororo.jp(ro,squach_uids=0-499)
# mkdir -p /export/home/admin
/export/home 172.16.50.0/255.255.255.224(rw,squach_uids=0-499) |
|
■設定の更新 [ exportfs ]
/etc/exports ファイルを編集しなおした場合、exportfs コマンドを使用して、設定の変更を反映させます。このコマンドを実行しない限り設定は反映されないので注意してください。
■設定の確認
設定を確認するには、showmount コマンドを使用します。
# showmount -e
Export list for ns1.kororo.jp:
/usr/local/src *.kororo.jp
/export/home 172.16.50.0/255.255.255.224 |
|
|
-a |
全てのマウントポイントを表示する |
|
-d |
共有しているディレクトリ名のみ表示する |
|
-e |
ディレクトリを共有可能な相手を表示する |
|
■クライアントマシンからマウントする
クライアントマシンからマウントを実行するには、mount コマンドに-t オプションを付加し、nfs
を指定します。ns1:/home/kororo は、「
NFSサーバー名:エクスポートするディレクトリ」を指定します。マウントオプションを指定するには、-o
オプションをつけてマウントオプションを指定します。
$ mount -t nfs -o
rw ns1:/home/kororo /mnt/nfs |
|
◎NFS特有のマウントオプション
|
nolock |
NFSロックを無効化(ロックをサポートしていない古いNFS用) |
|
bg |
最初のNFSマウントがタイムアウトになった場合、バックグラウンドでマウントを継続する |
|
fg |
最初のNFSマウントがタイムアウトになった場合、フォアグラウンドでマウントを継続 |
|
soft |
ソフトマウントを実行 |
|
hard |
ハードマウントを実行 |
|
retry |
NFSマウントの試行を中止するまでの時間を分単位で指定する。 |
|
intr |
ハードマウント時に割り込みを受け付ける |
|
rsize |
読み取りのバッファサイズをバイト単位で指定する |
|
wsize |
書き込みのバッファサイズをバイト単位で指定する |
|
■ソフトマウントとハードマウント
■トラブルシューティング
マウントできない場合の主な対処方法について簡単に記しておくので参考にしてください。
1. クライアント上のUID とサーバー上のUID を一致させる
NFSにおいては、クライアント上でのUID及びGIDがサーバー上でも利用されるため、クライアントとサーバ間でUID及びGIDの同期が取れていなければ、NFSサーバ上では別のユーザーとなってしまう可能性があります。なので、
クライアントとサーバでは同じUID及びGID
を使うようにしましょう。なお、NIS(Network Infomation System)を使用すると、このようなユーザー情報を統合的に扱う事ができるようになります。
2.exportfs を実行したかどうか
/etc/exports を編集した場合は、必ず、exportfs -ra コマンドを実行して変更を反映させてあげる必要があります。
# cat /proc/fs/nfs/exports
/home/kororo ns2.kororo.jp(rw,root_squash,sync,wdelay)
# 172.16.50.3 |
|