PXEを使ってPCもディスクレスにしよう

YAMAMORI Takenori ●yamamori

ここでは,PXE(Preboot eXecution Environment)対応のネットワークカードを用い, Linux/FreeBSD/DOSなどのOSをディスクレスブートするための方法を解説します.


●PCでもできるディスクレスブート

ハードディスクもフロッピーディスクもCD-ROMも使わずに ネットワークのみからブートしてOSが立ち上がるディスクレスブートは, 本来はUNIXワークステーションが得意とするところです. SPARCなどのUNIXワークステーションのROMモニタには, RARP/TFTPといった,ネットワークブートの機能が標準で備わっています. さらにUNIX系のOSであれは,rootファイルシステムをNFS上に取ることができるため, ローカルディスクが一切必要なくなり,これでディスクレスマシンが実現できます.

一方PCでは,ディスクレスブートはあまり一般的ではありません. しかし,PXEを使えばPCもディスクレスブートできます.(※注) そこでこのページでは,LinuxやFreeBSD,さらにDOSなどのOSを, PXEを用いてディスクレスブートする方法について説明します.

※注
PXE以外にも,RPL(Remote Program Load), Etherboot(http://etherboot.sourceforge.net/)や, FreeBSDで以前に用いられていたnb3c509.romやnb8390.romを用いる方法も 存在します.

なお,Linux/FreeBSDに限らず,PC UNIXのネットワークインストールなら 行なったことがあるという方は多いと思いますが, その場合,マシンの起動用にフロッピーディスクを使用したはずです. 今回はそのフロッピーディスクすら使用せず, 完全にネットワークからブートする方式について考えます.


●ディスクレスブートの概要(BpBatchの場合とpxebootの場合)

PXEを使うためには, ディスクレスマシン側にPXE対応のネットワークカード(以下NIC)が必要です. NIC上のフラッシュROMには,PXEのブートコードが書き込まれています. サーバマシン側ではDHCP/TFTP/NFSの設定が必要です.(※注) サーバ側のOSは,Linux/FreeBSD/Solarisなど,UNIX系OSであれば何でもよく, ディスクレスクライアントのOSとは異なるOSでも構いません.

※注
ちなみにUNIXワークステーションでの例として, SPARCマシンでSolaris/SunOSなどをディスクレスブートする場合は, DHCPは使われず,代わりにRARP/bootparamが用いられます.

もうひとつ,PXE対応のNICがTFTPを使って読み込むブートローダが必要です. ブートローダは,ディスクレスクライアントがLinuxやDOSなどの場合は BpBatch(後述)を, FreeBSD(4.1-RELEASE以降)の場合はOSに付属のpxebootを使います. できればひとつのブートローダで統一したいところですが, BpBatchは残念ながらFreeBSDをブートできません. たとえ,いったんBpBatchをロードしたあとに, pxebootをロードしようとしてもうまくいきません.

そこで,ディスクレスクライアントのOSの種類に応じて, DHCPサーバの設定(後述)でブートローダを BpBatchかpxebootかに切替えて使うことになります.

PXEとBpBatchによるLinuxのディスクレスブートの様子と, PXEとpxebootによるFreeBSDのディスクレスブートの様子を,下図に示します.

ディスクレスマシンの電源を入れると,まずNIC上のPXEのブートコードが動作し, DHCPでIPアドレスやブートファイルなどをサーバに問い合わせます. サーバからの返答のあと,ディスクレスマシンは, TFTPでサーバからブートファイルであるbpbatchまたはpxebootをダウンロードし, これに制御を移します.

このあとの流れはBpBatchとpxebootとでは若干違いますが, いずれも最終的にNFS rootをrootファイルシステムとしてマウントした状態でOSが立ち上がります.


●PXEとBpBatchによるLinuxのディスクレスブートの様子
+--サーバマシン--+                                  +--ディスクレスマシン---+
|                |                                  |                       |
|  +----------+  |                                  |  +------------------+ |
|  |          |←-----------(DHCP要求)-----------------|                  | |
|  |          |-------------(DHCP応答)---------------→|                  | |
|  |DHCPサーバ|  |                                  |  | NIC上の          | |
|  |          |←---(DHCP要求)---*            *--------| PXEのブートコード| |
|  |          |  |                \        /      |  |                  | |
|  |          |-----(DHCP応答)---*  \    /  *------→|                  | |
|  +----------+  |                \  \/  /      |  +------------------+ |
|                |                  \/\/        |          ↓           |
|  +----------+  |                  /\/\        |  +------------------+ |
|  |          |←---(TFTP要求)-----*  /\  \      |  |                  | |
|  |          |  |                  /    \  \    |  |                  | |
|  |          |-----(bpbatch転送)--*        *   *   |  |                  | |
|  |TFTPサーバ|  |                          |   |   |  |                  | |
|  |          |  |                          |   |   |  |     bpbatch      | |
|  |          |←---(TFTP要求)-------------------------|                  | |
|  |          |  |                          |   |   |  |                  | |
|  |          |-----(vmlinuzなど読み込み)------------→|                  | |
|  |          |  |                          |   |   |  |                  | |
|  +----------+  |                          |   |   |  +------------------+ |
|                |                          |   |   |          ↓           |
|  +----------+  |                          |   |   |  +------------------+ |
|  |          |  |                          |   *------|                  | |
|  |          |  |                          |       |  |                  | |
|  |          |  |                          *--------→|                  | |
|  |NFSサーバ |  |                                  |  |    Linux         | |
|  |          |←------------------------------------→|     カーネル     | |
|  |          |  |   (NFS root上にOSが立ち上がる)   |  |                  | |
|  +----------+  |                                  |  +------------------+ |
|                |                                  |                       |
+----------------+                                  +-----------------------+


FreeBSD の pxeboot を使う場合は下図のようになります。BpBatch の場合と若干異なりますが、大まかな動作は同じです。

●PXEとpxebootによるFreeBSDのディスクレスブートの様子
----

+--サーバマシン--+                                  +--ディスクレスマシン---+
|                |                                  |                       |
|  +----------+  |                                  |  +------------------+ |
|  |          |←-----------(DHCP要求)-----------------|                  | |
|  |          |-------------(DHCP応答)---------------→|                  | |
|  |DHCPサーバ|  |                                  |  | NIC上の          | |
|  |          |←---(DHCP要求)---*            *--------| PXEのブートコード| |
|  |          |  |                \        /      |  |                  | |
|  |          |-----(DHCP応答)---*  \    /  *------→|                  | |
|  +----------+  |                \  \/  /      |  +------------------+ |
|                |                  \/\/        |          ↓           |
|  +----------+  |                  /\/\        |  +------------------+ |
|  |          |←---(TFTP要求)-----*  /\  *----------|                  | |
|  |TFTPサーバ|  |                  /    \        |  |                  | |
|  |          |-----(pxeboot転送)--*        *--------→|                  | |
|  +----------+  |                                  |  |                  | |
|                |                                  |  |     pxeboot      | |
|  +----------+  |                                  |  |                  | |
|  |          |←---(NFSマウント)----------------------|                  | |
|  |          |  |                                  |  |                  | |
|  |          |-----(loader.rc, kernelなど読み込み)--→|                  | |
|  |          |  |                                  |  +------------------+ |
|  |NFSサーバ |  |                                  |          ↓           |
|  |          |  |                                  |  +------------------+ |
|  |          |  |                                  |  |    FreeBSD       | |
|  |          |←------------------------------------→|     kernel       | |
|  |          |  |   (NFS root上にOSが立ち上がる)   |  |                  | |
|  +----------+  |                                  |  +------------------+ |
|                |                                  |                       |
+----------------+                                  +-----------------------+

※注
図で,「DHCP要求」「DHCP応答」と2本の線で書いている部分では, 実際にはDHCPDISCOVER・DHCPOFFER・DHCPREQUEST・DHCPACKという 4つのパケットがやりとりされます.

To『PXEを使ってPCもディスクレスにしよう』[index]


このページは、技術評論社 「パワーアップFreeBSD」および SoftwareDesign 2000年10月号、11月号『PXEによるネットワークブート設定術』の原稿を元に、Web 用に再構成したものです。
To 謎の処理系 SunOS 4.1.4 [Home]
yamamori