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してみましょう。

[plain toolbar=false gutter=false highlight_lines=”1,2″]
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
[/plain]

この場合、「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となります)。

[plain toolbar=false gutter=false highlight_lines=”1″]
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)
[/plain]

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

NFSサーバの起動

設定が完了したらNFSサーバを起動しましょう。 これは各ディストリビューションの流儀に従ってください。 Debianの場合は以下のコマンドでOKです。
[plain toolbar=false gutter=false highlight_lines=”1″]
root@linux# /etc/init.d/nfs-kernel-server restart
[/plain]

NFSクライアントの構築

これはcoLinuxでの設定です。

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

[plain toolbar=false gutter=false highlight_lines=”1,2″]
root@colinux# apt-get update
root@colinux# apt-get install nfs-common
[/plain]

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

[plain toolbar=false gutter=false highlight_lines=”1″]
root@colinux# mount -t nfs -o tcp linux:/home /mnt
[/plain]

うまくいったら、必要に応じて/etc/fstabに書き込んで、 次回起動時に自動的にマウントされるようにしておきましょう。
[plain toolbar=false gutter=false highlight_lines=”1″]
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
[/plain]

ユーザ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機能がサポートされているので、 カーネルのコンパイルをする必要はありません。 サポートパッケージをインストールしてしましょう。
[plain toolbar=false gutter=false highlight_lines=”1,2″]
root@colinux# apt-get update
root@colinux# apt-get install nfs-kernel-server
[/plain]

次に、/etc/exportsを編集して外部に公開するディレクトリを指定します。 /homeディレクトリをIPアドレスが192.168.10.xのホストに公開するならば以下のようになります。
[plain toolbar=false gutter=false highlight_lines=”1″]
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)
[/plain]

NFSクライアントの構築

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

Linuxのディストリビューションの流儀に従って、 NFSクライアントのサポート機能をインストールしてください。 Debianなら以下の様な感じです。
[plain toolbar=false gutter=false highlight_lines=”1,2″]
root@colinux# apt-get update
root@colinux# apt-get install nfs-common
[/plain]

あとは以下のようにマウントするだけです。 ここでも「-o tcp」をつけることにより 「NFS over TCP」が有効としています。
[plain toolbar=false gutter=false highlight_lines=”1″]
root@linux# mount -t nfs -o tcp colinux:/home /mnt
[/plain]

ユーザIDの管理

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

フォローする