JF-INDEX (document list of JF Project)

NFS-Root Mini-Howto

Andreas Kostyrka, andreas@ag.or.at

V8, 8 August 1997

井伊 亮太, pessi@kmc.kyoto-u.ac.jp
中野 博樹, cas@kaba.or.jp, cas@kuis.kyoto-u.ac.jp
早川 仁, cz8cb01@linux.or.jp

v8j, 1999年 9月15日


この Mini-HOWTO では、ルートファイルシステムを NFS でマウントする ``ディスクレス'' Linux マシンをセットアップする方法について説明します。この Mini-Howto の最新版は常に ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/mini/NFS-Root もしくは最寄りの sunsite ミラーサイトから取得できます。

1. Copyright

2. 概観

3. サーバーの設定

4. ディスクレスマシンを起動

5. 既知の問題

6. その他の話題

7. 翻訳について


1. Copyright

(訳注:読者の利便を考え日本語訳をしますが、原文の Copyright が優先します)

(c) 1996 Andreas Kostyrka (e9207884@student.tuwien.ac.at or andreas@ag.or.at)

Unless otherwise stated, Linux HOWTO documents are copyrighted by their respective authors. Linux HOWTO documents may be reproduced and distributed in whole or in part, in any medium physical or electronic, as long as this copyright notice is retained on all copies. Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

特に断らない限り、Linux HOWTO ドキュメントはそれぞれの著者の著作物です。Linux HOWTO ドキュメントは、全てのコピーにおいて copyright が保持されている限り、どのような物理的あるいは電子的なメディアによっても、全部あるいはその一部を複製し、配布することができます。商用の再配布についても許可や奨励をされていますが、そのようないかなる配布に関しても、著者は通知されることを望んでいます。

All translations, derivative works, or aggregate works incorporating any Linux HOWTO documents must be covered under this copyright notice. That is, you may not produce a derivative work from a HOWTO and impose additional restrictions on its distribution. Exceptions to these rules may be granted under certain conditions; please contact the Linux HOWTO coordinator at the address given below.

全ての翻訳、派生的な著作物、あるいはいずれかの Linux HOWTO 文書の内容を取り入れて集合的な著作物はこの copyright の下で保護される必要があります。つまり、いずれかの HOWTO をもとにした著作物を作ってもその配布に制限を追加してはいけません。ある条件の下では、これらの規則に対する例外が認められる場合があります。下記のアドレスの Linux HOWTO のコーディネータに連絡を取ってください。

In short, we wish to promote dissemination of this information through as many channels as possible. However, we do wish to retain copyright on the HOWTO documents, and would like to be notified of any plans to redistribute the HOWTOs.

要するに、私たちは可能な限り多くの経路を通じてこの情報の普及を促進することを望んでいます。しかし、私たちは HOWTO の文書の著作権を保持することも強く望んでいますし、 またそれら HOWTO の文書を再配布するどんな計画も私たちに知らせていただければ幸甚に思います。

If you have questions, please contact Andreas Kostyrka <mailto:andreas@ag.or.at>, the author of this mini-HOWTO, or Tim Bynum, the Linux HOWTO coordinator, at <mailto:linux-howto@sunsite.unc.edu> via email.

もしご質問があれば e-mail で、この mini-HOWTO の著者である Andreas Kostyrka <mailto:andreas@ag.or.at>、あるいは Linux HOWTO のコーディネーターの Tim Bynum <mailto:linux-howto@sunsite.unc.edu> までどうぞ。

1.1 この文書に協力してくれた方々

  • Avery Pennarun <apenwarr@foxnet.net> (LILOなしで起動する方法について)
  • Ofer Maor <ofer@hadar.co.il> (ディスクレスマシンの設定についてよい mini howto を提供してくれた)
  • Christian Leutloff <leutloff@sundancer.tng.oche.de> (netboot に関しての情報)


2. 概観

一般に、ディスクレスマシンには以下のような問題があります。

  • 自身の IP アドレスを見つける必要があり、また必要ならその他の Ethernet の設定もです。
  • NFS サーバーと、自身の root ファイルシステムのマウントすべきパスを知る必要があります。

カーネル(1.3.7x 以降)の現在の NFSROOT の実装では、次の ``やりかた'' で上記の問題を解決しています。

  • IP アドレスを RARP で取得したり、Ethernet 関係の設定全てを LILOLOADLIN から渡されるカーネルパラメータから取得することができます。
  • マウントする NFS のパスをカーネルパラメータで渡すこともできます。渡されなかった場合、カーネルは RARP サーバーを NFS サーバーでもあると見なして、パスにはコンパイル時に指定されたデフォルト値を使用します。(現在のデフォルト値は /tftpboot/<そのマシンのIP アドレス>です)
  • クライアントの設定は BOOTP から取得することもできます。

ディスクレス環境の設定を始める前に、ブートするために LILOLOADLIN のどちらを使用するかを決めておいた方がよいでしょう。これらを使用すると融通性があるという利点がありますが、速度の点では不利です。LILO が無いほうが Linux カーネルの起動はより早くなります。この点は考慮した方がよいかも知れません。


3. サーバーの設定

3.1 カーネルのコンパイル

サーバーのカーネルには RARP サポートを設定しておいたほうがよいでしょう。カーネルパラメーター無しで起動する時には必要になりますから。ただしクライアントがサーバーと同じサブネット内になければ RARP は役に立たないでしょう。

ディスクレスマシン用のカーネルには最低限、次のような機能をコンパイル時に組み込む必要があるでしょう。

  • NFS ファイルシステム(ext2 サポートを組み込む必要はありません。モジュールで充分です)
  • ``Root on NFS'' の有効化(enabled)
  • ディスクレスマシンのネットワークカード用の Ethernet ドライバー
  • ニーズにもよりますが、NFS-Root の為に RARPBOOTBP サポートを組み込む必要があるかも知れません。(これらは make config をしたときに NFS の後に聞かれます)

ディスクレスマシンをカーネルパラメーター無しで起動する場合、ルートデバイスを 0:255 にセットする必要もあります。ダミーデバイスを作るには mknod /dev/nfsroot b 0 255 を実行します。デバイスファイルを作成した後、カーネルイメージのルートデバイスを rdev <kernel-image> /dev/nfsroot で設定することができます。

3.2 root ファイルシステムの作成

ファイルシステムのコピー

Warning/警告:これらの指示はうまく動作するかもしれませんが、環境によっては決して適切なものではありません。クライアントのためのルートファイルシステム設定の、よりよい方法については Ofer Maor <ofer@hadar.co.il> の NFS-Root-Client mini howto を参照してください。

クライアントのためのルートツリーをサーバー上のどこに置くのかを決めた後、(例えば)mkdir -p <directory>tar cClf / - | tar xpCf <directory> - を実行して作成してください。

LILO を使わずにカーネルを起動する場合、ルートディレクトリは /tftpboot/<IP-address> の必要があります。それが嫌なら、カーネルソースの一番上(訳注:つまり /usr/src/linux)にある Makefile で変更できます。 NFS_ROOT = -DNFS_ROOT="/tftpboot/%s" のような行を探してください。変更した場合カーネルを再コンパイルする必要があります。

ルートファイルシステムに対する変更

さて、不必要なファイルを取り除いて、/etc/rc.d スクリプトをチェックしましょう。いくつかの重要な点があります。

  • 重要なことの一つとしては eth0 の設定があります。ディスクレスマシンは eth0 を、少なくとも部分的には、設定して起動します。ディスクレスマシンの IP アドレスをサーバの IP アドレスとして設定するのは、利口な行為とはいえませんね。(筆者が最初のころにやってしまったことの一つです)
  • もう一つの点はディスクレスマシンの /etc/fstab です。NFS ファイルシステム用の設定の必要があります。
  • 警告/WARNING: サーバーのルートファイルシステムと、クライアント(ディスクレスマシン)のファイルシステムを混同しないこと。(サーバーの rc.inet1 を修正してしまい、なぜ(rc.int1 で設定したにもかかわらず)クライアントが動作しないのか、と考え込んだことがあります)

ファイルシステムの export

ルートディレクトリをディスクレスマシン用に export します。方法が不明の場合、exports(5) を参照してください。大抵の場合、変更後に nfsd/mountd の再起動が必要となります。RedHat の場合、/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start を実行することで簡単にできます。

RARP の設定

RARP をネットワーク上のどこかでセットアップします。クライアントを nfsroot パラメーターなしで起動する場合、RARP サーバーは NFS サーバーの必要がありますが、普通は NFS サーバーでしょう。このためには、RARP サポート付きのカーネルを走らせる必要があります。

設定をするために、次のスクリプトを実行してください(また、サーバーの /etc/rc.d のどこかにそのスクリプトをインストールしておきましょう)

/sbin/rarp -s <IP アドレス> <ハードウェアアドレス>

IP アドレス

はディスクレスマシンの IP アドレス

ハードウェアアドレス

はディスクレスマシンのネットワークカードの Ethernet アドレスです。

例: /sbin/rarp -s 131.131.90.200 00:00:c0:47:10:12

IP アドレスの代わりにホスト名を使うこともできます。ただし、サーバーが IP アドレスを(/etc/hosts や DNS を検索して)見つけることができれば、ですが。

BOOTP の設定

BOOTP を設定するためには /etc/bootptab を編集する必要があります。bootpd(8)bootptab(5) の man page を参照してください。

ハードウェアアドレスを見つける

ハードウェアアドレスなんて知りません。どうすれば見つけられるんでしょうか?

  • 作ったカーネルを起動して、ネットワークカードが認識されている行が表示されるのを待ちましょう。通常 6 バイトの 16 進数が含まれていますが、それがそのカードのハードウェアアドレスのはずです。
  • TCP/IP ネットワークを有効にした何かの OS でディスクレスマシンを起動します。それからそのマシンからサーバーへ ping を実行し、/sbin/arp -a で ARP キャッシュの中を見ます。


4. ディスクレスマシンを起動

4.1 boot rom を使用

私はまだそういう力業な物を使ったことがありませんから、次の tips を挙げることしかできません(Christian Leutloff <leutloff@sundancer.tng.oche.de> のお作法)。

  • ``normal'' の boot rom を使うことはできません。
  • Gero Kuhlmann による netboot パケットが存在します。これは Linux 用の boot rom と、さらなる情報を提供します。netboot はお近くの Linux ミラーサイト、または Debian package(netboot-0.4)から入手できます。
  • boot rom に付属のドキュメントを注意深く読んでください。
  • おそらく、サーバーの tftpd を有効化する必要があるでしょうが、使用する boot rom のカーネルのロード方法に依存します。
  • 各 Linux ディストリビューションの bootrom ベンダーについて、上記で述べた以外のどのような情報でも歓迎します。ここに追加しますので。

4.2 raw カーネルディスクを使う

デフォルトのネーミングに従った正しい名前でルートファイルシステムを export していて、NFS サーバーが RARP サーバーである場合(つまり両者のマシンは同一のサブネット内に存在)、カーネルをディスクに cat するだけで起動することができます。(カーネルのルートデバイスを 0:255 にする必要があります) これはつまり、サーバーのルートディレクトリが /tftpboot/IP アドレス にあると仮定します(この値はカーネルコンパイル時に変更できます)。

4.3 ブートローダーと RARP を使う

カーネル起動時に必要なパラメーター全てと、nfsroot=<サーバーの IP アドレス>:</path/to/mount> を渡してください。ここで サーバーの IP アドレス は NFS サーバーの IP アドレスを、/path/to/mount はルートディレクトリのパスを表します。

Tips:

  • LILO を使うのであれば、``lock'' 機能の使用は考慮に値します。まず単純に全ての正確なパラメーターを入力し、``lock'' を追加してください。次回の起動時に LILO をタイムアウトさせます。 [訳注:lock すると次のブートでも同じパラメータで起動します。詳しくは LILO の README を参照してください。]
  • ディスクレスマシン用のブートディスクを作るときに、lilo.confappend= 機能を使うこともできます。

4.4 RARP なしでブートローダーを使う

カーネルに、nfsroot に加えて nfsaddrs=<client-IP>:<srv-IP>:<gw-IP>:<netm-IP>:<hostname> 引数を渡してください。カーネルは eth0 を渡された引数で設定します。

client-IP

ディスクレスマシンの IP アドレス

srv-IP

NFS サーバーの IP アドレス

gw-IP

ゲートウェイ

netm-IP

ネットマスク

hostname

マシンの名前(ホスト名)


5. 既知の問題

5.1 /sbin/init が起動しない。

/sbin/init でよくある問題は、いくつかの(少なくとも)現行のディストリビューションの /sbin/init は動的リンクになっていることです。ですからクライアントに対して正しい /lib の設定をする必要があります。簡単な方法としては、(クライアント用の)/sbin/init を、静的リンクされた ``Hello World'' プログラムと置き換えてみることです。これにより、もっと根本的な問題か``単なる'' 動的リンクの問題かを見極めることができます。

5.2 /dev トラブル

起動時に tty に関するよくわからないメッセージが表示された場合、クライアントの /dev ディレクトリで MAKEDEV スクリプトを実行する必要があるでしょう。これは dev 番号に 64 bit を使用している、いくつかのサーバー OS では動作しないと言う噂がありますが、実行すべきでしょう。この問題が発生した場合、どの os で起きたかを私にメールしてください。可能性のある解決方法は起動プロセスの初期で、ram ディスクに小さな /dev を作成して、毎回デバイスのノードを再インストールすることです。


6. その他の話題

  • BOOTP のクライアントは ftp://sunsite.unc.edu/system/Network/admin/bootpc.v045.tgz にあります。

    initrd(Linux 2.0 以降からサポートされました)により、ディスクレスマシンはとてもうまく動作します。実際 initrd はさらにカスタマイズした設定を行う場合の、より進んだ選択肢です。

  • bootpd をそのまま用いる起動の場合には、これ(BOOTPクライアント)は実のところ必要ないと思われます。というのも、Linux 2.0 では RARP の代わりに BOOTPを使用するオプションも提供されているからです(より正確には、両方をカーネルコンパイル時に組み込むことができます。その場合は、最初に応答が返ってきた方で動作することになります)。
  • カーネルソースのドキュメントディレクトリに、NFS ルートシステムについてのドキュメントがあります。
  • NFS 経由で swap を可能にするパッチもあります。それは私にメールで送られてきましたが(個人的に非常に忙しかった時ので)、メールを無くしてしまいました :( おそらく http://www.linuxhq.com/ の unofficial patches セクションから入手できるはずです。
  • 私の PGP 公開鍵は andreas@ag.or.at を finger することで手に入れられます。 fingerprint はこれです: F1 F7 43 D5 07 C4 6C 87 BF 6B 33 A2 2C EE 5A F9.


7. 翻訳について

当文書は井伊 亮太さん、中野 博樹さんの翻訳した 1996/08/06 版を、早川が最新版(1997/08/08)の LDP で更新したものです。

日本語訳:井伊 亮太 <pessi@kmc.kyoto-u.ac.jp>
     中野 博樹 <cas@kaba.or.jp>, <cas@kuis.kyoto-u.ac.jp> (1996/08/06)
日本語訳:早川 仁  <cz8cb01@linux.or.jp> (1999/09/15)


sgml21html conversion date: Sat May 20 22:29:26 JST 2000

[