coLinuxでNFSを使う

試したことをとりあえずメモに!
スポンサーリンク

coLinuxと他のマシンでデータを共有する方法として、 私はsmbfsではなくNFSを使っています。 それは私はLAN上にファイルサーバとしてLinuxを立ち上げており、 Linux間でのファイル共有はやはりNFSが適当だと思うからです (このFile ServerではSambaが動いているので、 smbfsでファイルを読み書きすることも可能です)。

以前は、colinuxがNFS機能をサポートしていなかったり(0.6.0以前)、 UDPでまともに通信できなかったりしたのですが、 最近のcolinuxではそういうこともありません。

なので、ここではごく普通のNFS接続の方法を説明することになります (しかし歴史的な事情によりNFS over TCPという方法を説明します)。

なお、NFSサーバはLinuxカーネルのNFSサーバ機能(Kernel NFS Server) を使うこととします。 User space NFS serverというのもあるのですが、 私は使っていないのでなんともいえません。

このページの説明中では、 coLinuxとホストPCはブリッジ接続している状況を前提にしています (ネットワーク的には「coLinuxのイストール WinPCapを使ったブリッジ接続」の状況です)。 また、coLinuxのホスト名を「colinux」、 LAN上のLinuxのホスト名を「linux」とします。(ルータ接続でもNFSは問題なく動きます)

スポンサーリンク

ここで紹介する内容

NFSでファイル共有するといってもcoLinxをサーバとするか、 クライアントにするかで2パターンかあります。

  1. LAN上のLinuxマシンをNFSサーバにして、 coLinuxをNFSクライアントにする。 これが私の利用しているパターンです。
  2. coLinuxをNFSサーバにして、 LAN上のLinuxマシンをNFSクライアントにする。 coLinuxに大きなサイズのディスクイメージを割り当てている場合などに 良いかもしれません。

以下では、それぞのパターンについて説明していきます。 サブタイトルの「XXXX→YYYY」は、 XXXXがNFSサーバとなってYYYYがクライアントになることを表します。

スポンサーリンク

Linux→coLinuxの場合

この場合の注意点は、以下の3点です。それぞれ説明します。

  • NFSサーバになるLinuxのカーネルを「CONFIG_NFSD_TCP=y」として 構築する(もちろん「CONFIG_NFSD=y or m」です)。
  • coLinuxでNFSのマウントをするときに「tcp」をつける。
  • NFSサーバのユーザIDとcoLinuxのユーザIDを揃える。

NFSサーバの構築

ここはLAN上のLinuxでの設定です。

カーネルの設定確認

とりあえず、今動いているカーネルの設定を調べて見ましょう。 カーネルの設定情報は/bootディレクトリにconfigあるいは config-2.x.x (2.x.xはカーネルのバージョン番号)という名前で 保存されています(と思います)。 私の場合は、config-2.6.7でした。これをgrepしてみましょう。

root@linux# cd /boot
root@linux# grep NFS config-2.6.7
CONFIG_NFS_FS=m
CONFIG_NFS_V3=y
CONFIG_NFS_V4=y
# CONFIG_NFS_DIRECTIO is not set
CONFIG_NFSD=m
CONFIG_NFSD_V3=y
CONFIG_NFSD_V4=y
CONFIG_NFSD_TCP=y

この場合、「CONFIG_NFSD=m」「CONFIG_NFSD_TCP=y」と なっているのでOKです。 もしこれらが「is not set」となっていたらカーネルを再構築しましょう。

カーネルの再構築に関しては、説明が長くなってしまいますので、 詳しくは他のサイトを参照してください。

ポイントとしては「Code maturity level options」で 「Prompt for development and/or imcomplete code/drivers」を 選択すること。

nfs-kernel-1

もう一つは、「File systems → Network File Systems」で、 「NFS server support」と「Provide NFS server over TCP support」を 選択することです。

nfs-kernel-2

NFSサーバの設定

NFSサーバ機能をサポートしたカーネルが動いたら、 NFSサーバの設定をしましょう。 まずは、必要に応じてNFSサーバ機能を有効にするための サポートパッケージをインストールします。 /usr/sbin/rpc.nfsdというファイルが存在していたら、 既にインストールされているかもしれません。 Debianの場合は、nfs-kernel-serverというパッケージを入れればOKです。

次に、NFSで外部に公開する(exportする)ディレクトリや、 接続を許可するホストを設定します。 これは、/etc/exportsというファイルで指定します。 NFSサーバの/homeディレクトリと/cdromディレクトリを 公開する場合は以下のようになります。 このファイルの192.168.10.0/255.255.255.0というのは、 接続を許可するIPアドレスの範囲です。 私は、LAN内のIPアドレスを192.168.10.1~で割り振っているのでこ のようになります(coLinuxもブリッジ接続なので192.168.10.xとなります)。

root@linux# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
/cdrom                  192.168.10.0/255.255.255.0(rw)
/home                   192.168.10.0/255.255.255.0(rw)

もし、coLinuxをルータ接続としている場合には、 ホストPC・coLinux間のネットワークアドレスも公開アドレスとして 追記する必要もあります。

NFSサーバの起動

設定が完了したらNFSサーバを起動しましょう。 これは各ディストリビューションの流儀に従ってください。 Debianの場合は以下のコマンドでOKです。

root@linux# /etc/init.d/nfs-kernel-server restart

NFSクライアントの構築

これはcoLinuxでの設定です。

まず、NFSクライアントのサポート機能を入れます。 これはnfs-commonパッケージに入っているので、インストールします。

root@colinux# apt-get update
root@colinux# apt-get install nfs-common

あとはマウントするだけです。 以下のコマンドでマウントします。 ここで「-o tcp」と付けることがポイントです。 これにより「NFS over TCP」が有効となります。

root@colinux# mount -t nfs -o tcp linux:/home /mnt

うまくいったら、必要に応じて/etc/fstabに書き込んで、 次回起動時に自動的にマウントされるようにしておきましょう。

root@colinux# cat /etc/fstab
/dev/cobd0      /               ext3    defaults                0       1
proc            /proc           proc    defaults                0       0
/dev/codb1      none            swap    sw                      0       0
linux:/home     /home           nfs     defaults,tcp            0       0

ユーザIDの管理

正しくはネットワーク内でNISサーバを動かすべきなのですが、 coLinuxで新しくユーザを追加するときに、 NFSサーバでのそのユーザのユーザIDと一致するようなユーザIDで追加しています。 グループを追加するときも、 NFSサーバとグループIDが一致するようにして追加しています。

こうしないと、特に/homeディレクトリをNFSでマウントしたときに 面倒なことになります。

coLinux→Linuxの場合

この場合はほとんど上記の「Linux→coLinux」のパターンと一緒です。 NFSクライアントとなるLinuxの方でマウントするときに 「-o tcp」をつけるのを忘れないようにしましょう。

NFSサーバの構築

これはcoLinux上での設定です。

最近のcoLinuxは標準のカーネルでNFS機能と NFS over TCP機能がサポートされているので、 カーネルのコンパイルをする必要はありません。 サポートパッケージをインストールしてしましょう。

root@colinux# apt-get update
root@colinux# apt-get install nfs-kernel-server

次に、/etc/exportsを編集して外部に公開するディレクトリを指定します。 /homeディレクトリをIPアドレスが192.168.10.xのホストに公開するならば以下のようになります。

root@colinux# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
/home                   192.168.10.0/255.255.255.0(rw)

NFSクライアントの構築

これはLAN上のLinuxの設定です。

Linuxのディストリビューションの流儀に従って、 NFSクライアントのサポート機能をインストールしてください。 Debianなら以下の様な感じです。

root@colinux# apt-get update
root@colinux# apt-get install nfs-common

あとは以下のようにマウントするだけです。 ここでも「-o tcp」をつけることにより 「NFS over TCP」が有効としています。

root@linux# mount -t nfs -o tcp colinux:/home /mnt

ユーザIDの管理

この場合も、 coLinuxとLAN上のLinuxでのユーザIDを一致させておきましょう。 それが一番楽です。

コメント

タイトルとURLをコピーしました