気の向くままに辿るIT/ICT/IoT
システム開発

NetBSDマシン間のNFSによるファイル共有

ホーム前へ次へ
ネットワーク越しにファイルを共有

NetBSDマシン間のNFSによるファイル共有

NetBSDマシン間のNFSによるファイル共有

 ここでは、複数台あるNetBSD間でNFS越しにファイル共有する方法について記します。

NetBSD上でNFSサーバを構成

$ sudo vi /etc/exports
/usr/pkgsrc  -network 192.168.0.0 -mask 255.255.0.0 -maproot=root
$

 NetBSD上でNFSサーバを構成する場合には、[/etc/exports]に共有するディレクトリとアクセス許可するIPアドレス/ネットマスクをマッピングしておきます。

 NetBSDでの[/etc/exports]の書式は、(Linuxと異なり、)[-network]、スペースに続けてIPアドレス、[-mask]、スペースに続けてネットマスクのように指定し、NFSクライアントのrootアカウントをNFSサーバ上でもrootとして扱う場合には、[-maproot]に[root]を設定します。

 ちなみにIPアドレスは、*BSD/PC-UNIX/Linuxでは、[ifconfig]で確認できます。

$ sudo /etc/rc.d/rpcbind onestart
$ sudo /etc/rc.d/mountd onestart
$ sudo /etc/rc.d/nfsd onestart
$ sudo /etc/rc.d/nfslocking onestart
$

 NetBSDをNFSサーバとする場合には、[rpcbind]、[mountd]、[nfsd]、[nfslocking]([lockd]/[statd])を起動しておく必要があります。

 これらを一時的に有効にする場合には、それぞれ、[onestart]を使って開始します。

 ただ、次のように[/etc/rc.conf]に設定済みの場合は、設定後、マシンを再起動したか否かに関わらず、[onestart]ではなく、[start]で構いません。

$ sudo vi /etc/rc.conf
...
rpcbind=yes
nfs_server=yes
mountd=yes
lockd=yes
statd=yes
...
$

 マシン起動時に常時有効にするには、[/etc/rc.conf]ファイルに[rpcbind=yes]、[nfs_server=yes]、[mountd=yes]、[lockd=yes]、[statd=yes]を指定しておきます。

 尚、(NFSクライアントになることなく)NFSサーバとしてのみ構成するならリンク先にあるように[mountd]、[lockd]、[statd]に関しては、[nfs_server]の設定値に応じて自動的に切り替えられるように[yes]ではなく[${nfs_server}]としておいてもよいでしょう。

$ sudo /etc/rc.d/rpcbind onerestart
$ sudo /etc/rc.d/mountd onerestart
$ sudo /etc/rc.d/nfsd onerestart
$ sudo /etc/rc.d/nfslocking onerestart
$

 [/etc/exports]ファイルの変更を行なった場合には、その都度、[rpcbind]、[mountd]、[nfsd]、[nfslocking]を再起動[onerestart]しますが、この場合にも[/etc/rc.conf]に設定済みなら[restart]で構いません。

 このように各種デーモンを再起動させておかないとNFSクライアント側で[mount -t nfs]/[mount_nfs]した際に[Program not registered]といったエラーに遭遇することになります。

 これでNFSクライアント側でマウントできるようになっているはずです。

 ちなみにNFSクライアント側でIPアドレスやホスト名を引数として渡さず、[showmount -e]とした時にこのエラーに遭遇する場合、それは当然の結果です。

 尚、アクセス許可やアクセス制限をするなら[/etc/hosts.allow]や[/etc/hosts.deny]を設定します。

NetBSDをNFSクライアントとして利用

$ sudo /etc/rc.d/rpcbind onestart
$ sudo vi /etc/rc.conf
...
rpcbind=yes
nfs_client=yes
lockd=yes
statd=yes
...
$

 (NFSサーバとしたNetBSDマシンとは別の)NetBSDマシンをNFSクライアントとする場合には、一時的なら[rpcbind]を起動(onestart)、マシン起動時、常時有効にするなら[/etc/rc.conf]ファイルに[rpcbind=yes]、[nfs_client=yes]、[lockd=yes]、[statd=yes]を指定してマシンを再起動するか、各デーモンを起動(start)しておきます。

 これだけでマウントできるようになっているはずです。

$ sudo mount -t nfs 192.168.x.x:/home/foo /mnt/bar
または、
$ sudo mount_nfs server_name:/home/foo /mnt/bar
$

 NetBSDにおいてNFSサーバで指定した共有ディレクトリをマウントするには、[mount -t nfs]、または、[mount_nfs]を使い、NFSサーバのIPアドレス、または、名前解決済みならホスト名、これに続けてコロン(:)、そしてNFSサーバ側の[/etc/exports]で公開指定した実在する共有ディレクトリパス、そしてマウントポイントとなるNFSクライアント上のパスを指定します。

 手軽な名前解決方法の1つとして[/etc/hosts]ファイルにIPアドレスとホスト名をタブ区切りでマッピングする方法があります。

$ sudo /etc/hosts
192.168.x.x:    hostname
192.168.x.y:    hostname hostname.domainname
$

 尚、LinuxをNFSサーバとし、NetBSDをNFSクライアントとした場合、デフォルトの通信プロトコルがUDP・TCPと異なることからマウント時、[-o -T]オプションが必要でしたが、今回のようにNetBSDをNFSサーバとした場合、NFSクライアント(NetBSD)からマウントする際には、NetBSDのデフォルトであるTCPでの通信となる為、こうした明示的な指定は不要です。

$ rpcinfo -p
$ rpcinfo -p 192.168.x.x
$ rpcinfo -p server_name
$

 尚、NFSクライアントの「サービスが有効になっているか」を確認するには、[rpcinfo -p]、NFSサーバのサービスが有効になっているかを確認するには、[rpcinfo -p]にNFSサーバのIPアドレスや名前解決済みであればホスト名を引数として[rpcinfo -p 192.168.x.x]のようにします。

$ showmount -e 192.168.x.x
$ showmount -e server_name
$

 また、NFSサーバで「指定した共有ディレクトリが正しくエクスポートされているか」を確認するには、[showmount -e]にNFSサーバのIPアドレスや名前解決済みであればホスト名を引数として[showmount -e 192.168.x.x]のようにします。

 言うまでもなく、(他のNFSクライアントへのNFSサーバと兼ねていない限り、)NFSクライアントにおいてIPアドレスや名前解決済みのホスト名を引数として渡さず、単に[showmount -e]としてしまうとNFSクライアントには他のNFSクライアントに対してエクスポートしている共有ディレクトリはないはずなので[Program not registered]といったエラーが表示されることになりますが、これは、当然の帰結です。

 ちなみにNetBSDでは、NFSv2/NFSv3はサポートしていますが、NFSv4は未だサポートしておらず、今後もサポートされる見込みは薄いとされており、他方、NFS共有ディレクトリをうまく利用できないケースがある場合には、他の選択肢としてAFS2ベースのCodaが推奨されています。

備考

 今回の検証においてNFSサーバとして使ったNetBSD/i386 6.1.5は、THOSHIBA dynabook、NFSクライアントとして使用したNetBSD/i386 6.1.5は、SOTEC e-oneにインストール、何れも後にアップグレードしたものです。

ホーム前へ次へ