Diskless PC Cluster 関連トピックス

管理者 小林
Updated,
Cluster の構成
Client の設定
トラブルシューティング
>> クライアント起動時にエラー「Root-NFS: NO NFS server available, giving up.
>> クライアント起動時にエラー「initial console を開くことが出来ない
>> クライアント用のディレクトリの作成に関して
>> クライアントログイン時にエラー「YPBINDPROC_DOMAIN: Domain not bound.
>> mpirun 実行時にエラー「p4_error: Timeout in making connection to remote process ...
>> mpirun 実行時にエラー「p4_error: : 14, MPI_BCAST: Message truncated...
参考文献
L I N K S
--> 夏目研究室 top
--> 中山研究室 top
--> 計算機関連のトピックス


Cluster の構成

サーバーマシン: 1台

  1. snowwhite:
    CPU= Intel Celeron CPU 1GHz
    MEMORY= 512MB
    サーバーマシンは、Boot server であり且つ File sever の役割を担っている(金銭的な問題?)。
    なので、BOOTP, TFTP, NFS などが動作している。

クライアントマシン: 8台
  1. dwarf1,dwarf2,dwarf3,dwarf4,dwarf5,dwarf6,dwarf7,dwarf8:
    CPU= Intel Celeron CPU 1GHz?
    MEMORY= 512MB?
    クライアントマシンは、Floppy で立ち上がり、etherboot でサーバーの kernel image を取ってきて linux を起動する。

Server の設定

Client の設定

まず、普通の NFS を用いる限りは、/tftpboot/192.168.2.~ の様に各クライアント毎にディレクトリを作成してやる必要がある。 これは、

# cd /tftpboot/192.168.2.~ <-- 適当なディレクトリ
# tar -c -f - /etc /bin /sbin /dev /lib /var | tar xp
そして、他に空のディレクトリ /home, /tmp なんかを作成してやり、パーミッションをルートディレクトリとあわせる。

このままでは、クライアント側で不要なデーモンが起動してしまうから /etc/init.d/ ないの不要なデーモンを起動しないように変更してやる。そのためには、不要なデーモンの起動スクリプトの先頭に、
exit 0
を加えてやる。
その他のクライアントに関しては、最初に作成したクライアントのディレクトリを /tftpboot/192.168.2.--- としたディレクトリにコピーしてやれば良い。このときも、パーミッションを変更してはいけないから、うえのように tar コマンドを使う。

最後に、各クライアントの /etc 内のファイルをいくつか変更してやる必要がある。次のものを変更する必要がある。
/etc/hostname
/etc/fstab
/etc/hosts

など...だけかな?

MPICH のインストール

$ ./configure --with-arch=LINUX --with-device=ch_p4 -prefix=/usr/local/bin/mpich [--with-comm=shared]
$ make
# make install

PATH の設定をする。
$ setenv MPIROOT /usr/local/bin/mpich
$ setenv MPIBIN $MPIROOT/bin
$ setenv PATH ${MPIROOT}:${MPIBIN}:${PATH}

machines.LINUX ファイルの設定。
mpi 実行順を以下の様に記述する。
# Change this file to contain the machines that you want to use
# to run MPI jobs on.  The format is one host name per line, with either
#    hostname
# or 
#    hostname:n
# where n is the number of processors in an SMP.  The hostname should
# be the same as the result from the command "hostname"
snowwhite
dwarf1
dwarf2
dwarf3
dwarf4
dwarf5
dwarf6
dwarf7
dwarf8


トラブルシューティング

クライアント起動時にエラー「Root-NFS: NO NFS server available, giving up.」

サーバー側のNFSが正常に動作しているのにこのエラーが出て、長いこと悩んだ。

まずは、やっぱりサーバー側のNFSが正常に動作していることを確認した方が良い。
NFSのインストールをしっかり行ったことを確認して、

# rpcinfo -p
と打って、NFSが動作しているればいいと思う。

サーバー側が正常でもクライアント側がサーバー側の設定どおりの要求をしていなければ良い返事は得られない。
なので、クライアント側が正しい要求をしてやるように設定してあげる。
つまり、クライアントの kernel の command line parameter というものを設定する。
僕が行った設定の方法は(etherbootの場合?)、kernel の再構築によって出来上がった kernel image を mknbi-linux で etherboot 用のイメージにしてやる時に、オプションで kernel command line parameter をいくつか与える。つまり、
# mknbi-linux -d "/tftpboot/192.168.2.101" --append "ip=bootp" bzImage bootImage
のように、-d で nfsroot を設定してやり、--append で ip を設定してやった。これにより、サーバー側、クライアント側のやり取りがうまくいった。
当然、クライアント側の kernel には Root over NFS の機能をオンにしておかなければならない。

クライアント起動時にエラー「initial console を開くことが出来ない」

原因はクライアント側(/tftpboot/[ip-address])の /dev/console が存在しないか、permission の問題でもあるものと思われる。クライアント側のディレクトリをしっかり作りましょう。

クライアント用のディレクトリの作成に関して

クライアント用のルートディレクトリとして、/tftpboot/[ip-address] のようなものを用意し、サーバー側の/usr/home をマウントするが、ルートディレクトリ内のその他のディレクトリはサーバーのものをコピーする。その際に、サーバー側の owner, group, permission も変えずにコピーしなければならない。
気をつけましょう。

クライアントログイン時にエラー「YPBINDPROC_DOMAIN: Domain not bound.」

サーバー側の NIS の設定が悪い。
$ rpcinfo -p
と打って、ちゃんと ypserv が動作していることを確認しましょう。
動作していなかったら、NIS の設定が悪いんです。
設定すべき箇所は、おそらく
/etc/defaultdomain
/etc/default/nis 内の NISSERVER= の部分
/etc/hosts
/etc/hosts.allow または、hosts.deny
のどれか。なおしたら、

# /usr/lib/yp/ypinit -m
として、/var/yp/ の中身がいろいろ変更されれば OK のはずです。
# /etc/init.d/nis stop
# /etc/init.d/nis start
でちゃんと治ったかな?

mpirun 実行時にエラー「p4_error: Timeout in making connection to remote process ...

どうも、rlogin か rsh での通信に問題がある様なので、しっかりパスワードなしでも通信が出来るように設定してやる必要がある。
クライアント側の /etc/hosts.equiv の中に通信をしたい hostname を書いてやる。そうすれば、そこに載っているホストとはパスワードなしで rlogin, rsh で通信が出来るようになる。
具体的には、クライアント側の /etc/hosts.equiv の中身は、

snowwhite
dwarf1
dwarf2
の様にしてやる。クライアント側の /etc/hosts.equiv にはどのクライアントからもパスワードなしで入れるようにするのでいいのかな?

mpirun 実行時にエラー「p4_error: : 14, MPI_BCAST: Message truncated...

症状としては、エラーで計算が速攻止まってしまう。しかし、同じプログラムでも計算する系によっては問題なく走り続ける場合がある。
未だに、未解決?
仕方なく、1つのノードで計算する。

参考文献