NFS を介したルートファイルシステムのマウント (nfsroot) ====================================================== 著者:Gero Kuhlmann , 1996 年 更新:Martin Mares , 1997 年 日本語訳:野本浩一 ディスクレスシステムを X 端末やプリントサーバなどに使いたいなら、ディ スクではないデバイス上にルートファイルシステムを置かなければなりません。 これはラムディスク (さらに詳しい情報はこのディレクトリにある initrd.txt を参照してください [訳注:日本語訳が http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/initrd.txt.html にあります]) か、NFS を介しファイルシステムをマウントするかのどちらか で可能です。この資料では、「クライアント」はディスクレスシステムを、 「サーバ」は NFS サーバを、意味します。 1.) nfsroot 機能を有効にする ------------------------ nfsroot を使用するには、カーネルコンフィグレーションで NFS のサポー トを選択しなければなりません。この場合は NFS をモジュールとしてロード できないことに注意してください。その後、コンフィグレーションスクリプト は nfsroot を使用したいか、それが yes ならどの auto configuration シス テムを使用したいか、尋ねてきます。DHCP/BOOTP と RARP の両方の選択をお 勧めします。 2.) カーネルコマンドライン ---------------------- カーネルがブートローダ (loadlin, LILO, ネットワークブートプログラムの いずれか) によりロードされた場合、カーネルはどのデバイスをルート fs に 使用するのかと、ルートとしてマウントするサーバの場所およびサーバ上のディ レクトリ名が伝えられなければなりません。これは二三のカーネルコマンドラ インの引き数で設定できます - root=/dev/nfs これは仮想 NFS デバイスを有効にするために必要です。これは実デバイス ではなく、実デバイスの代わりに NFS を使用するようカーネルに伝えるこ とを単に意味します。 nfsroot=[:][,] nfsroot 引き数がコマンドラインに与えられなかった場合、既定値の "/tftpboot/%s" が使用されます。 NFS サーバの IP アドレスを指定します。このフィールドが 与えられない場合、ip 変数 (以下を参照してください) に より決められる既定のアドレスが使用されます。この引き数 を使用するものの一つとして、RARP と NFS で異なるサーバ を使用させる例があります。通常これはブランクです。 ルートとしてマウントするサーバ上のディレクトリ名。文字 列内に "%s" トークンがある場合、トークンはクライアント の IP アドレスの ASCII 表現に置き換えられます。 標準的な NFS オプション。すべてのオプションはカンマで 区切られます。オプションフィールドが与えられない場合、 次の既定値が使用されます - port = サーバの portmap デーモンに より与えられます rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac ip=:::::: この引き数は、デバイスの IP アドレスの設定方法、さらに IP ルーティン グテーブルの設定方法をカーネルに伝えます。これは元々 nfsaddrs と呼ば れていましたが、今ではブート時の IP 設定は NFS と関係なく動作するの で、ip に改名されました。また、古い名前は互換性の理由から別名として 残りました。 この引き数がカーネルコマンドラインに無い場合、フィールドはすべて空で あると仮定され、下記に述べる既定値が用いられます。この場合は一般的に、 カーネルは RARP と DHCP/BOOTP の両方を使用して、すべての設定をしよう とします (カーネルコンフィグレーションで何が有効になっているかに依存 し、両プロトコルのうち最初に答えのあったものを使用します)。 クライアントの IP アドレス。空の場合、アドレスは RARP か DHCP/BOOTP のどちらかで決められます。どのプロトコル が使用されるかはカーネルコンフィグレーションで何が有効 になっているかと、 引き数に依存します。この 引き数が空でない場合、RARP も DHCP/BOOTP も使用されま せん。 NFS サーバの IP アドレス。RARP がクライアントアドレス を決めるために使用され、この引き数が空でない場合のみ、 指定されたサーバからの応答が受付けられます。RARP と NFS で異なるサーバを使用するには、ここに RARP サーバを 指定 (あるいはブランクのまま) し、nfsroot 引き数で NFS サーバを指定します (上記を参照してください)。このエン トリがブランクの場合、サーバのアドレスは RARP の答えか、 DHCP/BOOTP の応答内のサーバアドレスが使用されます (DHCP/BOOTP サーバ自体ではないことに注意してください)。 サーバが異なるサブネット上にある場合のゲートウエイ IP アドレス。このエントリが空で、DHCP/BOOTP の応答により 決められない場合、ゲートウエイは使用されず、サーバはロー カルネットワーク上にあると仮定されます。 ローカルネットワークインターフェース用ネットマスク。こ れが空で、DHCP/BOOTP の応答により決められない場合、ネッ トマスクはクライアント IP アドレスから導かれ、そのクラ ス全体のアドレスを使うものと仮定されます。 クライアント名。空で、DHCP/BOOTP の応答により決められ ない場合、クライアント IP アドレスの ASCII 記法が使用 されます。 使用するネットワークデバイス名。これが空の場合、すべて のデバイスが RARP および BOOTP の要求用に使用され、最 初に応答を受取ったデバイスが設定されます。一つのデバイ スしかない場合、ブランクのままが安全です。 autoconfiguration 用に使用する方法。これが 'dhcp', 'bootp', 'rarp' のいずれかなら、指定されたプロトコルが 使用されます。値が 'both' か空の場合、BOOTP および RARP がカーネルに構成されていれば、その両方が使用され ます (後方互換用に、BOOTP が構成されていない限り、DHCP はこの場合使用されません)。値が 'off' の場合、どんな種 類の autoconfiguration も行われません。 引き数は autoconfiguration を使用する場合、ip 引き数の値 に含まなくてもいいようです (文字の前の ':' も必要ありません)。 3.) カーネルローダ -------------- メモリにカーネルを入れるには、いくつかの異なる方法が使用できます。それ らはどの仕組みが使用可能かに依存します - 3.1) dd を用いフロッピー上にカーネルを書き込む - いつものように、dd を用いフロッピー上にカーネルを書き込めますが、 いずれにしてもカーネルコマンドラインを使用することはできません。 'root=' 引き数の代用に、mknod を用いメジャー番号 0, マイナー番 号 255 のダミーデバイスを任意の Linux システム上に作成します - mknod /dev/boot255 c 0 255 次に dd を用いフロッピー上にカーネル zImage ファイルをコピーし ます - dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0 最後に、ルートデバイスを設定するために rdev を用います - rdev /dev/fd0 /dev/boot255 その後、ダミーデバイス /dev/boot255 を削除できます。それは使用 可能な実デバイスではないので。 他の二つのカーネルコマンドラインパラメータは rdev で代用できま せん。したがってこの方法を用いた場合、カーネルは DHCP/BOOTP や RARP を既定値で使用し、RARP を介した答えがある場合、そのルート としてディレクトリ /tftpboot// をマウントします。 DHCP/BOOTP の答えがある場合、その答えの中のディレクトリ名が使 用されます。 3.2) LILO の使用 LILO を使用する場合、必要なコマンドラインパラメータを LILO の 設定ファイル内の 'append=' コマンドですべて指定できます。しか しながら、'root=' コマンドを使用するには、上記の 3.1 で述べた ようにダミーデバイスをここでも設定する必要があります。LILO お よびその 'append=' コマンドの使用法は LILO の資料を参照してく ださい。 3.3) loadlin の使用 ルートとしてマウントするローカルハードディスクを持たずに、DOS コマンドプロンプトから Linux をブートしたい場合、loadlin を使 用できます。それは動作すると聞いていますが、私自身まだ使用した ことがありません。一般的に LILO がそれを行う方法と同様に、カー ネルコマンドラインの作成が可能なはずです。詳しい情報は loadlin の資料を参照してください。 3.4) ブート ROM の使用 これはたぶんディスクレスクライアントを起動する最も上品な方法で す。ブート ROM により、カーネルは TFTP プロトコルを使用してロー ドされます。私が知る限り、ネットワークから Linux のブートをサ ポートする商用ブート ROM はまだありませんが、フリーのブート ROM の実装は二つあり、sunsite.unc.edu およびそのミラーサイトか ら入手できます。それらは 'netboot-nfs' および 'etherboot' と呼 ばれます。両方ともディスクレス Linux クライアントのブートに必 要なものすべてを含んでいます。 4.) 謝辞 ---- カーネル内の nfsroot コードおよび RARP サポートは Kuhlmann により書かれました。 IP 層を除く autoconfiguration コードは Martin Mares により書かれました。 nfsroot の初版を書くために、私を支援してくれた Jens-Uwe Mager に感謝します。