
コンピューティングにおいて、プレブート実行環境(PXE、発音はしばしば/ ˈpɪksiː /ピクシー)は 、PXEブート(ピクシーブート)とも呼ばれ、PXE対応クライアント上でネットワークから取得したソフトウェアアセンブリを起動する標準化されたクライアント/サーバー環境を記述した仕様です。クライアント側では、PXE対応のネットワークインターフェイスコントローラ(NIC)のみが必要で、動的ホスト構成プロトコル(DHCP)やトリビアルファイル転送プロトコル(TFTP)などの業界標準のネットワークプロトコルの小さなセットを使用します。
PXE の背後にある概念は、BOOTP /DHCP /TFTP のようなプロトコルの初期の頃に始まり、2015 年現在これは、Unified Extensible Firmware Interface (UEFI) 標準の一部です。現代のデータセンターでは、PXE はオペレーティングシステムのブート、インストール、展開に最もよく使われる選択肢です[ 1 ] 。
コンピュータネットワークの黎明期から、適切なソフトウェアイメージと適切な構成パラメータを、起動時に1つ以上のネットワークサーバから取得して起動できるクライアントシステムに対するニーズが常に存在してきました。この目標を達成するには、クライアントは業界標準のネットワークプロトコルに基づいた一連のプリブートサービスを利用する必要があります。さらに、最初にダウンロードして実行されるネットワークブートストラッププログラム(NBP)は、クライアントファームウェアレイヤー(PXE経由でブートストラップされるデバイス上)を使用して構築され、周囲のネットワークブート環境とやり取りするためのハードウェアに依存しない標準化された方法を提供する必要があります。この場合、ネットワークブートプロセスのシステム相互運用性を保証するために、標準規格への準拠と可用性が重要な要素となります。
この点に関する最初の試みの 1 つは、1984 年に公開された TFTP 標準 RFC 906 を使用したブートストラップ ローディングでした。これは、ブートストラップ ローディングの標準ファイル転送プロトコルとして、1981 年に公開されたTrivial File Transfer Protocol (TFTP) 標準 RFC 783 を確立しました。その直後、 1985 年に公開されたBootstrap Protocol標準 RFC 951 (BOOTP) により、ディスクレスのクライアント マシンが自身の IP アドレス、TFTP サーバーのアドレス、およびメモリにロードして実行する NBP の名前を検出できるようになりました。BOOTP の実装上の困難などが、最終的に1997 年に公開されたDynamic Host Configuration Protocol標準 RFC 2131 (DHCP) の開発につながりました。先駆的な TFTP/BOOTP/DHCP アプローチは、当時、プロビジョニング 環境の必要な標準化されたクライアント側を定義していなかったため、不十分でした。
プレブート実行環境 (PXE) は、IntelのWired for Management [ 2 ]フレームワークの一部として導入され、Intel と SystemSoft が公開した仕様で説明されています。PXE バージョン 2.0 は 1998 年 12 月にリリースされ、アップデート 2.1 は 1999 年 9 月に公開されました。[ 3 ] PXE 環境では、DHCP や TFTP (現在は 1992 年に公開された RFC 1350 で定義されています) など、いくつかの標準的なクライアント/サーバー プロトコルが使用されます。PXE スキーマ内では、プロビジョニング方程式のクライアント側は PXE 標準の不可欠な部分であり、ネットワーク インターフェイス カード(NIC) BIOS拡張機能または現在のデバイスではUEFIコードで実装されています。この特徴的なファームウェア層により、クライアント側で基本的なユニバーサルネットワークデバイスインターフェイス(UNDI)、最小限のUDP / IPスタック、プリブート(DHCP)クライアントモジュール、およびTFTPクライアントモジュールの機能が利用可能になり、これらが一体となって、NBPがPXE環境のサーバー側が提供するサービスとやり取りする必要がある場合に使用するPXEアプリケーションプログラミングインターフェイス(API)を構成します。TFTPのスループットの低さ、特に高遅延リンクで使用した場合の低さは、当初1998年5月に公開されたTFTPブロックサイズオプションRFC 2348によって緩和され、その後2015年1月に公開されたTFTPウィンドウサイズオプションRFC 7440によって緩和され、潜在的に大きなペイロード配信が可能になり、スループットが向上しました。
PXEは、UDP/IP、DHCP、TFTPといった業界標準のインターネットプロトコルを組み合わせて使用します。これらのプロトコルは、クライアントのNICファームウェアに容易に実装できるため選択されており、標準化された小型のPXE ROMを実現しています。PXEファームウェアイメージの標準化、小型化、およびリソース使用量の低減は、設計における主要な目標であり、強力なクライアントコンピュータからリソースが限られたシングルボードコンピュータ(SBC)やシステムオンチップ(SoC)コンピュータまで、幅広いシステムでPXE標準のクライアント側を同一に実装できるように設計されています。
DHCPは、適切なクライアントネットワークパラメータ、特にダウンロード準備が整った初期ブートストラッププログラム(NBP)と関連ファイルをホストするTFTPサーバーの場所(IPアドレス)を提供するために使用されます。PXEブートストラップセッションを開始するには、クライアントのPXEファームウェアのDHCPコンポーネントが、 PXE固有のオプションを含むDHCPDISCOVERパケットをポート67/UDP(DHCPサーバーポート)にブロードキャストし、必要なネットワーク構成とネットワークブートパラメータを要求します。PXE固有のオプションは、開始されたDHCPトランザクションがPXEトランザクションであることを識別します。標準のDHCPサーバー(PXE非対応)は、ネットワーク情報(IPアドレスなど)を含む通常のDHCPOFFERで応答できますが、PXE固有のパラメータは応答できません。PXEクライアントは、PXE非対応のDHCPサーバーからのみ応答を受信した場合、ブートできません。
PXE が有効になっている DHCP サーバーの DHCPOFFER を解析した後、クライアントは、受信した TFTP サーバーの IP アドレスと NBP の名前に基づいて、自身のネットワーク IP アドレス、IP マスクなどを設定し、ネットワーク上のブート リソースを指すことができます。次に、クライアントは TFTP を使用して NBP を自身の RAM に転送し、必要に応じて検証 (UEFIセキュア ブートなど) を行い、最終的にそこから起動します。NBP はブート チェーン プロセスの最初のリンクにすぎず、通常は TFTP を介して、最小限の OS エグゼクティブ ( WindowsPE、または基本的なLinux カーネル+ initrdなど) を実行するための補完的なファイルの小さなセットを要求します。この小さな OS エグゼクティブは、独自のネットワーク ドライバと TCP/IP スタックをロードします。この時点で、完全な OS を起動またはインストールするために必要な残りの命令は、TFTP ではなく、堅牢な転送プロトコル ( HTTP、CIFS、NFSなど) を使用して提供されます。

PXEクライアント/サーバー環境は、既存のDHCPおよびTFTPサーバーインフラストラクチャとシームレスに統合できるように設計されています。この設計目標は、従来のDHCPプロトコルを扱う際に課題となりました。企業のDHCPサーバーは通常、PXE環境をサポートするために必要な追加パラメータやルールを簡単に追加できないように設計された厳格なポリシーの対象となります。このため、PXE標準ではDHCPリダイレクト、つまり「プロキシDHCP」の概念が開発されました。プロキシDHCPの基本的な考え方は、PXE DHCPの要件を2つの独立して実行および管理されるサーバーユニットに分割することです。
DHCP と proxyDHCP サーバー環境[ 3 ] : 18では、PXE クライアントは最初に 1 つの PXE DHCPDISCOVER パケットをブロードキャストし、2 つの補完的な DHCPOFFER を受信します。1 つは通常の PXE 非対応 DHCP サーバーから、もう 1 つは proxyDHCP サーバーから受信します。両方の応答を合わせると、PXE クライアントがブート プロセスを続行するために必要な情報が提供されます。この非侵襲的なアプローチにより、既に動作している DHCP サーバーの設定に手を加えることなく PXE 環境を設定できます。proxyDHCP サービスは、標準の DHCP サービスと同じホストで実行することもできますが、この場合でも、これらは 2 つの独立して実行および管理されるアプリケーションです。2 つのサービスが同じホストで同じポート 67/UDP を使用できないため、proxyDHCP はポート 4011/UDP で実行されます。proxyDHCP アプローチは、企業環境から家庭環境まで、幅広い PXE シナリオで非常に有用であることが証明されています。
PXE は、いくつかのシステム アーキテクチャを考慮して考案されました。仕様のバージョン 2.1 では、IA-64やDEC Alphaを含む 6 つのシステム タイプのアーキテクチャ識別子が定義されていました。しかし、PXE v2.1 はIA-32のみを完全にカバーしていました。この明らかな不完全性にもかかわらず、Intel は最近、新しいUEFI仕様内で PXE を広くサポートすることを決定し、PXE 機能をすべての EFI/UEFI 環境に拡張しました。現在の Unified Extensible Firmware Interface Specification 2.4A、セクション 21 ネットワーク プロトコル - SNP、PXE、および BIS では、UEFI ブート サービス環境で実行中にネットワーク デバイスへのアクセスを提供するプロトコルが定義されています。これらのプロトコルには、Simple Network Protocol (SNP)、PXE Base Code Protocol (PXE)、および Boot Integrity Services Protocol (BIS) が含まれます。[ 4 ] [ 5 ] 現在、PXE 環境では、クライアント アーキテクチャの検出は、PXE v2.1 仕様に元々含まれていた識別子に基づいて行われることはほとんどありません。代わりに、ネットワークから起動する各コンピュータは、クライアントのアーキテクチャを示すためにDHCPオプション93を設定する必要があります。これにより、PXEサーバーは(起動時に)最初のネットワークブートパケットからクライアントの正確なアーキテクチャを知ることができます。[ 6 ]
IPv6の登場に伴い、DHCPはDHCPv6へと進化しました。新しいDHCPプロトコル内でPXEをサポートするオプションの必要性は2010年に対処されました。[ 7 ]
オリジナルのPXEクライアントファームウェア拡張機能は、IA-32 BIOS用のオプションROMとして設計されたため、当初はPXEオプションROMを提供するネットワークインターフェースコントローラ(NIC)をインストールすることで、パーソナルコンピュータ(PC)をPXE対応にすることができました。現在では、クライアントPXEコードはNICのファームウェアに直接組み込まれているか、マザーボード上のUEFIファームウェアの一部として組み込まれています。
オリジナルのクライアント PXE ファームウェアは Intel によって作成され、製品開発キット (PDK) に含まれるリンク可能な IA32オブジェクト コード フォーマットモジュールとして常に無償で提供されてきましたが、オープンソースの世界では、長年にわたってgPXE / iPXEのような独自の ROM を提供する非標準の派生プロジェクトが生み出されてきました。Intel ベースの ROM は 20 年以上前から PXE 標準のクライアント側を実装してきましたが、一部のユーザーは安定性と PXE 標準への準拠のために追加機能を犠牲にすることをいといませんでした。[ 8 ]
PXEはバージョン2.1以降、広く普及しており、現在ではPXEファームウェアを搭載していないネットワークカードを見つけるのはほぼ不可能です。安価なギガビットイーサネットハードウェア(NIC、スイッチ、ルーターなど)の登場により、PXEは従来のCD、DVD、USBフラッシュドライブといった代替手段に対抗し、クライアントにオペレーティングシステムをインストールする最速の方法となっています。
長年にわたり、以下のようないくつかの主要プロジェクトでPXEサポートが導入されてきました。
NBPの開発に関して言えば、ブートメニューの拡張機能やスクリプト機能などを提供するブートマネージャを実装するプロジェクトがいくつかあります。
上記で述べたプロジェクトはすべて、複数のOSを起動/インストールできる場合、「ブートマネージャ - ブートローダー」というパラダイムに基づいて動作します。最初のNBPは、自身の構成を取得し、起動オプションのメニューを展開できるブートマネージャです。ユーザーが起動オプションを選択すると、選択した特定の起動手順を続行するために、OSに依存するブートローダーがダウンロードされ、実行されます。
Appleは、Boot Server Discovery Protocol (BSDP)仕様の下で、非常によく似たネットワークブート方式を開発しました。BSDP v0.1は1999年8月にAppleによって最初に公開され[ 9 ]、最後のv1.0.8は2010年9月に公開されました[ 10 ] 。Mac OS X Serverには、 NetBootと呼ばれるシステムツールが含まれていました。NetBootクライアントはBSDPを使用して、適切なオペレーティングシステムを起動するために必要なリソースを動的に取得します。BSDPは、標準のDHCPにはないNetBoot機能を追加するために、ベンダー固有の情報を使用してDHCPの上に構築されています。このプロトコルはクライアントファームウェアに実装されています。起動時に、クライアントはDHCP経由でIPアドレスを取得し、BSDPを使用してブートサーバーを検出します。各BSDPサーバーは、次の内容を含むブート情報で応答します。
クライアントはリストからオペレーティングシステムを選択し、その選択内容を示すメッセージをサーバーに送信します。選択されたブートサーバーは、ブートファイル、ブートイメージ、および選択されたオペレーティングシステムのダウンロードと実行に必要なその他の情報を提供して応答します。
マイクロソフトは、独自のブート情報ネゴシエーションレイヤー(BINL)によって、PXE環境の重複しない拡張機能を開発しました。BINLはサーバーサービスとして実装されており、リモートインストールサービス(RIS)およびWindows展開サービス(WDS)戦略の重要な構成要素となっています。BINLには、マイクロソフトが独自に開発したDHCP拡張機能とも言える、特定の準備プロセスとネットワークプロトコルが含まれています。BINLは、PXE標準クライアントファームウェアを使用するマイクロソフト独自の技術です。現在、BINLの仕様は公開されていません。
現代のデータセンターでは、管理者がDVDなどのリムーバブルメディアを使って新しいソフトウェアをインストールすることはほとんどありません。代わりに、管理者はPXE(Preboot eXecution Environment)によるイメージサーバーへのブートに依存しています。