EFI + Legacy PXE Boot

Loading

測試環境為 Red Hat Enterprise Linux Server release 6.0 (Santiago) + dhcp-4.1.1-12.P1.el6.x86_64

什麼是 uEFI!! 什麼是 PXE!!

  • uEFI
    Extensible Firmware Interface (EFI) 的功能就類似傳統 BIOS ,他是 OS 與硬體之間溝通介面. 不過相較於傳統的 BIOS EFI 他的架構更模組化,功能更強大.EFI 的架構是由 Intel 提出的, 目前是交由 Unified EFI Forum 來管理.也就是我們現在所稱的 Unified Extensible Firmware Interface (UEFI)
  • PXE
    PXE (Preboot eXecution Environment) 是透過網路來安裝作業系統,在網卡上有一塊 ROM(firmware) 裡面存放了一些基本的網路協定如:Internet Protocol (IP), User Datagram Protocol (UDP), Dynamic Host Configuration Protocol (DHCP) 以及 Trivial File Transfer Protocol (TFTP) 透過這一些協定使得 PXE 可以進行網路的存取進一步安裝作業系統.

建議先設定好你的 Legacy PXE 環境再來升級到 uEFI 的環境

那 Legacy PXE 和 EFI PXE Boot 有可能處於同一台機器上嗎?在 Fedora 的官方網站有點出 PXEBoot (EFI + Legacy) 多種選擇的 https://fedoraproject.org/wiki/QA:Testcase_UEFI_pxeboot 的開機方式, 主要是 DHCP 的設定檔不同而已.

IPv4

[root@gulf linux-install]# cat /etc/dhcp/dhcpd.conf
#ddns-update-style interim;
ddns-update-style none;
ignore client-updates;

allow booting;
allow bootp;

option space PXE;
  option PXE.mtftp-ip    code 1 = ip-address;
  option PXE.mtftp-cport code 2 = unsigned integer 16;
  option PXE.mtftp-sport code 3 = unsigned integer 16;
  option PXE.mtftp-tmout code 4 = unsigned integer 8;
  option PXE.mtftp-delay code 5 = unsigned integer 8;
  option arch code 93 = unsigned integer 16;

subnet 192.8.1.0 netmask 255.255.255.0 {
        range 192.8.1.50 192.8.1.250;
        option broadcast-address 192.8.1.255;
        option subnet-mask 255.255.255.0;
        option domain-name-servers 192.8.1.1;

          class "pxeclients" {
                  match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
                  next-server 192.8.1.1;

                  if option arch = 00:07 {
                          filename "linux-install/BOOTX64.efi";
                  } else if option arch = 00:06 { 
                          filename "linux-install/bootia32.efi";
                  } else  {
                          filename "linux-install/pxelinux.0";
                  }
          }
}

DHCP 可支援的 Architecture Type 如下,詳細請參考 – https://www.ietf.org/assignments/dhcpv6-parameters/dhcpv6-parameters.txt .

  • 0x00:0x00 – x86 BIOS
  • 0x00:0x01 – NEC/PC98
  • 0x00:0x02 – Itanium
  • 0x00:0x03 – DEC Alpha
  • 0x00:0x04 – Arc x86
  • 0x00:0x05 – Intel Lean Client
  • 0x00:0x06 – x86 UEFI
  • 0x00:0x07 – x64 UEFI
  • 0x00:0x08 – EFI Xscale
  • 0x00:0x09 – EBC
  • 0x00:0x0a – ARM 32-bit UEFI
  • 0x00:0x0b – ARM 64-bit UEFI
  • 0x00:0x0c – PowerPC Open Firmware
  • 0x00:0x0d – PowerPC ePAPR
  • 0x00:0x0e – POWER OPAL v3
  • 0x00:0x0f – x86 uefi boot from http
  • 0x00:0x10 – x64 uefi boot from http
  • 0x00:0x11 – ebc boot from http
  • 0x00:0x12 – arm uefi 32 boot from http
  • 0x00:0x13 – arm uefi 64 boot from http
  • 0x00:0x14 – pc/at bios boot from http
  • 0x00:0x15 – arm 32 uboot
  • 0x00:0x16 – arm 64 uboot
  • 0x00:0x17 – arm uboot 32 boot from http
  • 0x00:0x18 – arm uboot 64 boot from http
  • 0x00:0x19 – RISC-V 32-bit UEFI
  • 0x00:0x1a – RISC-V 32-bit UEFI boot from http
  • 0x00:0x1b – RISC-V 64-bit UEFI
  • 0x00:0x1c – RISC-V 64-bit UEFI boot from http
  • 0x00:0x1d – RISC-V 128-bit UEFI
  • 0x00:0x1e – RISC-V 128-bit UEFI boot from http
  • 0x00:0x1f – s390 Basic
  • 0x00:0x20 – s390 Extended

我還沒有實際試過.最近給他試了一下,的確是可行的.重點如下:

if option arch = 00:07 {
       filename "linux-install/BOOTX64.efi";
} else if option arch = 00:06 { 
       filename "linux-install/bootia32.efi";
} else  {
       filename "linux-install/pxelinux.0";
}

主要是用 if else 的判斷句,決定開機是要用 UEFI 的 BOOTX64.efi , bootia32.efi 還是 Legacy 的 pxelinx.0

IPv6

ipv6 一樣可以使用 Architecture Type 的設定.

[root@localhost ~]# cat /etc/dhcp/dhcpd6.conf
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
option dhcp6.vendor-class code 16 = {integer 32, integer 16, string};
subnet6 3ffe:501:ffff:100::1/64 {
range6 3ffe:501:ffff:100::100 3ffe:501:ffff:100::200

        if option dhcp6.arch-type = 00:010 {
        option dhcp6.vendor-class 0 0 “HTTPClient”;
        option dhcp6.bootfile-url “http://3ffe:501:ffff:100::1/EFI/Shell.efi”;
        } else  {
        option dhcp6.bootfile-url “http://3ffe:501:ffff:100::1/EFI/grub64.efi”;
        }
}

需注意如果 isc-dhcp 版本為 4.4 參數 dhcp6.arch-type 需改成 dhcp6.client-arch-type .

遇過的問題
作業系統為 CentOS 8 ISC DHCP v4.4
無法啟動 dhcpd6 服務,透過 # journalctl -xe 顯示以下的錯誤訊息.

no option named arch-type in space dhcp6

檢視官方文件 https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcp-options#standard-dhcpv6-options 說明 dhcp6.arch-type 參數需改成 dhcp6.client-arch-type .

沒有解決問題,試試搜尋本站其他內容

5 thoughts on “EFI + Legacy PXE Boot

  1. 自動引用通知: IPV6 PXE boot – Benjr.tw
  2. Legacy PXE boot 是讓本機,以包在NIC 的 boot ROM裡的UNDI,或BIOS裡LOM的 UNDI driver (低階語言寫成的LAN driver) 來做 NIC或LOM的初始設定工作。而且執行的PXE Base code也是包在NIC 的 boot ROM裡的、或是BIOS裡LOM binary裡的。這是因應從前各NIC廠商各有各的 LAN driver 功能與PXE動作的產物,又不得不使用uEFI BIOS的妥協辦法。BIOS的本機控制看似一致了,但是網路功能能如舊時代各行其是。

    Native EFI 才是使用包在BIOS裡的 LAN driver 和 Tiano或uEFI裡標準的 PXE base code來執行 PXE preboot 工作。BIOS的本機控制與網路行為表現都一致了,而且在uEFI shell執行網路相關 uEFI comand 命令,就像在Linux shell 或 Window CMD 裡一樣有很高的 一致性。

  3. 自動引用通知: uEFI PXE Boot | Benjr.tw
  4. 自動引用通知: services | Benjr.tw

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料