iPXE 配合网卡唤醒技术(Wake-on-LAN, WOL)可以实现远程开机并进行网络引导,iPXE 是一个开源的网络引导程序,允许计算机通过网络加载操作系统。iPXE 提供了多种 API 和命令用于网络引导、配置和操作。以下是一些常见的 iPXE API 和功能:
iPXE 配合网卡唤醒技术(Wake-on-LAN, WOL)可以实现远程开机并进行网络引导。具体来说,iPXE 是一种通过网络进行启动的解决方案,而网卡唤醒功能则能够远程唤醒计算机,使得它从关闭状态(或待机状态)启动。两者的结合可以用于实现远程开机和网络引导。
1. 网卡唤醒(Wake-on-LAN, WOL)
网卡唤醒功能允许在计算机关闭或待机时,网络接口卡(NIC)仍保持接收特定“唤醒”信号。当计算机接收到这个信号时,它会自动开机。这种信号通常是一个特定的“魔术数据包”(Magic Packet),它由网络上另一台设备发送。
2. iPXE 的网络引导功能
iPXE 是一种开源的网络引导固件,通常用于代替传统的 BIOS 或 UEFI 引导程序。它可以从网络(例如通过 TFTP、HTTP、iSCSI 等)加载操作系统的引导程序,而不依赖本地硬盘。
3. 结合使用 iPXE 和网卡唤醒
将 iPXE 和网卡唤醒结合使用,可以实现以下流程:
-
计算机处于关闭或待机状态:目标计算机的网络接口卡启用了 WOL 支持,且计算机本身支持该功能。
-
发送魔术数据包:通过另一台设备(例如服务器或远程管理工具),发送一个包含目标计算机 MAC 地址的“魔术数据包”来唤醒它。
-
计算机开机:目标计算机接收到魔术数据包后,会启动并进入开机流程。
-
iPXE 启动:一旦计算机开机,它会使用网络引导功能(通常通过 PXE)加载 iPXE 引导程序。
-
通过 iPXE 进行远程引导:iPXE 可以通过网络加载操作系统映像,或者进行其他自定义操作,例如启动一个操作系统、安装系统、修复系统等。
4. 实现的步骤概述
步骤 1:配置计算机的网卡支持 WOL
在计算机的 BIOS 设置中,启用 Wake-on-LAN 功能,同时确保网卡驱动程序也支持 WOL。在许多操作系统中,WOL 需要在 BIOS 和操作系统内都进行配置。
步骤 2:使用 iPXE 配置网络引导
你需要在目标计算机中安装并配置 iPXE 来实现网络引导。可以通过 PXE 启动 iPXE,或者直接在系统内引导 iPXE。
步骤 3:配置发送魔术数据包的设备
从另一台计算机或设备上,你可以使用工具来发送魔术数据包。许多 WOL 工具都可以发送魔术数据包,例如:
- WakeMeOnLan(Windows 工具)
- etherwake(Linux 工具)
- WOL Command(命令行工具)
这些工具只需要知道目标计算机的 MAC 地址,就能发送唤醒信号。
步骤 4:远程引导操作系统
当目标计算机被唤醒并启动后,iPXE 将根据你的配置加载操作系统映像或其他引导程序。
5. 应用场景
结合 iPXE 和网卡唤醒技术,常见的应用场景包括:
- 远程维护:在远程无法直接访问的设备上执行操作系统安装、恢复或更新。
- 自动化部署:大规模网络引导并部署操作系统,适用于数据中心和企业环境。
- 节省能源:在需要时唤醒计算机进行维护或启动任务,避免设备长时间处于开启状态,节约能源。
6. 限制与注意事项
- WOL 需要在硬件和网络层面支持:确保目标计算机的网卡、主板和 BIOS 都支持 Wake-on-LAN。
- 网络配置:如果计算机位于不同的子网或有防火墙等网络设备,需要确保 WOL 魔术包能够穿越这些设备。
- iPXE 配置:需要正确配置 iPXE 脚本和网络引导服务器,确保引导过程顺利进行。
iPXE 配合网卡唤醒技术能够实现远程开机和网络引导的需求。通过远程唤醒计算机并启动 iPXE,可以从网络加载操作系统或执行其他自定义任务,非常适用于大规模部署、远程管理以及自动化运维等场景。
iPXE 是一个开源的网络引导程序,允许计算机通过网络加载操作系统。iPXE 提供了多种 API 和命令用于网络引导、配置和操作。以下是一些常见的 iPXE API 和功能:
1. 基本 iPXE 命令
这些是 iPXE 提供的基本命令和 API,用于网络引导、设备管理和配置。
-
dhcp:自动获取 DHCP 配置,通常用于动态分配 IP 地址。bashCopy Codedhcp -
ifstat:显示网络接口的状态。bashCopy Codeifstat -
ping:测试网络连接,发送 ICMP 数据包。bashCopy Codeping <IP地址> -
netstat:查看当前网络连接状态。bashCopy Codenetstat -
boot:启动指定的操作系统映像(例如:启动 TFTP 或 HTTP 引导)。bashCopy Codeboot <filename> -
sanboot:通过 SAN 网络启动操作系统。bashCopy Codesanboot <iSCSI/FC target> -
chain:链式引导到另一个引导程序(例如 GRUB 或其他引导加载程序)。bashCopy Codechain <filename> -
tftp:使用 TFTP 下载文件。bashCopy Codetftp <filename> -
http:通过 HTTP 下载文件。bashCopy Codehttp <filename> -
set:设置 iPXE 环境变量。bashCopy Codeset <variable> <value>
2. iPXE 内部 API(编程接口)
在编写自定义脚本或开发更复杂的功能时,iPXE 提供了与系统交互的编程 API。这些 API 允许你编写脚本或修改行为。以下是一些常用的内部 API:
-
netdev:用于操作和管理网络设备。例如,netdev可用于检测和配置网络接口。bashCopy Codenetdev <device_name> <command> -
ping:发送 ICMP 请求。bashCopy Codeping <target_ip> -
iPXE变量和环境:net0/ipaddr:设置或获取当前网络接口的 IP 地址。net0/hostname:设置或获取当前网络接口的主机名。filename:表示正在引导的文件名。
-
exec:执行一个命令并可以捕获返回值。这个命令可以通过脚本调用其他 iPXE 命令并传递参数。bashCopy Codeexec <command> -
file:文件操作 API。可以用来处理文件下载、存储等操作。bashCopy Codefile <filename> -
prompt:显示一个交互式提示,允许用户输入响应。可以用于配置或选择引导选项。bashCopy Codeprompt "Press F12 to boot from network."
3. 高级功能和 API
-
iSCSI:通过 iSCSI 协议从远程存储设备启动操作系统。
bashCopy Codesanboot iscsi:<ip>:<port>/<target> -
undionly.kpxe:指定引导程序的镜像,通常用于无盘工作站的网络启动。 -
multipath:支持多路径配置,用于处理多个网络路径的情况。 -
syslog:通过 syslog 服务发送日志信息。对于调试和日志记录非常有用。bashCopy Codesyslog <syslog_server> -
load:加载指定的引导文件。bashCopy Codeload <filename> -
wait:等待指定的时间(以秒为单位)。可以用于延迟某些操作,给用户更多的时间选择操作或加载网络配置。bashCopy Codewait <seconds> -
execute:执行自定义脚本文件。bashCopy Codeexecute <script_file>
4. 网络引导 API
这些 API 专门用于配置和管理网络引导过程。
-
bootp:使用 BOOTP 协议获取网络引导参数,适用于早期网络引导方案。bashCopy Codebootp -
pxe:基于 PXE 协议进行引导。iPXE 本身是一个增强版的 PXE 引导程序。bashCopy Codepxe <filename> -
nfs:通过 NFS(网络文件系统)引导操作系统。bashCopy Codenfs <server>:<path> -
ftp:通过 FTP 协议下载文件。bashCopy Codeftp <filename>
5. 网络接口和配置
iPXE 提供了强大的网络接口配置能力,以下是一些常用的网络接口 API:
-
ifopen:打开网络接口并启动网络通信。bashCopy Codeifopen <interface> -
ifclose:关闭网络接口。bashCopy Codeifclose <interface> -
ifconfig:配置和管理网络接口的 IP 地址、子网掩码、网关等参数。bashCopy Codeifconfig <interface> <ip_address> <subnet_mask> -
netstat:显示网络接口的状态和连接。bashCopy Codenetstat -
route:管理路由表,设置或查看网络路由。bashCopy Coderoute <destination> <gateway> <netmask>
iPXE 提供了一个强大的命令行和 API 环境,允许用户自定义网络引导流程、管理网络配置和文件操作。通过结合网络协议如 DHCP、PXE、iSCSI、NFS 和 FTP 等,iPXE 可以广泛应用于无盘工作站、数据中心和大型网络环境中的操作系统部署。
iPXE 还有一些其他的 API 和命令,能够帮助你在更复杂的网络引导环境中执行任务。下面是一些补充的 iPXE API 和功能。
1. menu API
menu 是用于创建交互式菜单的 API,使用户可以在启动时选择不同的操作系统或引导选项。这在需要手动选择引导镜像的场景中非常有用。
menu:创建一个交互式菜单,用户可以选择不同的引导选项。bashCopy Code
这个命令会显示一个菜单,用户可以按数字键选择操作系统,或者在超时后自动选择一个默认的操作系统。menu "Select OS" { item --key 1 "Ubuntu" shell /path/to/ubuntu.iso item --key 2 "CentOS" shell /path/to/centos.iso choose --timeout 5000 }
2. choose 和 timeout
choose 和 timeout 用于菜单的交互逻辑中,choose 允许选择不同的选项,而 timeout 设置自动选择的时间。
-
choose:选择某个项目或跳转到特定的操作。bashCopy Codechoose "Ubuntu" shell /path/to/ubuntu.iso -
timeout:设置菜单的自动超时时间,单位为毫秒。如果用户在指定时间内没有做出选择,菜单将自动选择默认项。bashCopy Codetimeout 5000 # 自动超时选择
3. exit
用于退出 iPXE 环境并返回到上一层的引导程序,通常在链式引导中使用。
exit:退出当前的引导程序或脚本。bashCopy Codeexit
4. ping6
ping6 是用于 IPv6 网络环境的命令,可以在支持 IPv6 的网络中执行。
ping6:发送 ICMPv6 请求。bashCopy Codeping6 <IPv6地址>
5. device
device API 用于检测和列出可用的硬件设备,特别是磁盘、网络接口等。
device list:列出所有可用的设备。bashCopy Codedevice list
6. write
write API 允许你将数据写入磁盘或其他存储设备,这在某些定制化引导场景中可能会用到。
write:将文件或数据写入到设备。bashCopy Codewrite <file> <device>
7. biosdev
biosdev API 可以控制系统的 BIOS 设置,允许修改和配置与引导相关的硬件设备。
biosdev:配置系统的 BIOS 设置。bashCopy Codebiosdev <command>
8. nfsroot
nfsroot 命令用于设置 NFS 根文件系统,适用于需要通过 NFS 引导操作系统的场景。
nfsroot:通过 NFS 设置根文件系统路径。bashCopy Codenfsroot <nfs_server>:<path_to_root>
9. blockcopy 和 blockwrite
这两个命令用于低级别的磁盘操作,允许将数据从一个地方复制到另一个地方,适用于一些低级别的存储操作。
-
blockcopy:从源设备复制数据到目标设备。bashCopy Codeblockcopy <source_device> <destination_device> -
blockwrite:将数据写入指定的块设备。bashCopy Codeblockwrite <device> <data>
10. trace 和 debug
trace 和 debug 命令用于调试和记录日志信息,帮助开发者和管理员排查问题。
-
trace:启用或禁用跟踪日志。bashCopy Codetrace on # 启用跟踪 trace off # 禁用跟踪 -
debug:设置调试级别,输出详细的调试信息。bashCopy Codedebug 3 # 设置调试级别为 3
11. exec 和 spawn
-
exec:执行指定命令,并等待其完成。bashCopy Codeexec <command> -
spawn:异步执行命令,不等待其完成。bashCopy Codespawn <command>
12. http-get 和 http-post
这两个命令用于通过 HTTP 协议与服务器进行交互,分别用于获取和提交数据。
-
http-get:通过 HTTP GET 请求获取数据。bashCopy Codehttp-get <url> -
http-post:通过 HTTP POST 请求提交数据。bashCopy Codehttp-post <url> <data>
13. setenv 和 unsetenv
这两个命令用于设置和删除环境变量,这对于管理引导配置和网络设置非常有用。
-
setenv:设置环境变量。bashCopy Codesetenv <variable> <value> -
unsetenv:删除环境变量。bashCopy Codeunsetenv <variable>
14. retry
retry 命令允许你重试某个操作或命令,这在网络连接不稳定时特别有用。
retry:重新尝试指定的操作。bashCopy Coderetry <command>
iPXE 提供了广泛的命令和 API,支持复杂的网络引导、设备管理、文件操作、调试等任务。无论是基于网络的操作系统引导、文件下载,还是与其他系统进行交互,iPXE 都能够提供丰富的支持。这些 API 和命令为用户提供了极高的自定义能力,可以满足各种不同场景下的需求。
更多的 iPXE API 和功能,可以帮助你在网络引导和系统部署过程中进行进一步的自定义和操作。
15. imgfetch
imgfetch 用于下载镜像文件。与 kernel 命令类似,但它允许你下载任意的二进制镜像。
imgfetch:从网络下载一个镜像文件(支持 HTTP、FTP 等协议)。bashCopy Codeimgfetch http://example.com/path/to/image.img
16. imgload
imgload 用于加载一个磁盘映像文件(如 .iso 文件或其他可引导镜像),并启动该镜像。
imgload:加载指定的映像文件。bashCopy Codeimgload /path/to/image.iso
17. menuentry
menuentry 用于在交互式菜单中创建一个新的选项,允许用户选择不同的操作系统或内核。
menuentry:定义一个菜单条目。bashCopy Codemenuentry "Ubuntu" { kernel /boot/vmlinuz-ubuntu initrd /boot/initrd.img-ubuntu boot }
18. initrd
initrd 用于加载一个初始 RAM 磁盘映像,这是 Linux 系统引导时的一个必要步骤,通常与内核一起使用。
initrd:加载初始 RAM 磁盘映像。bashCopy Codeinitrd /path/to/initrd.img
19. drive
drive 用于列出系统中的硬盘驱动器,并指定操作的目标设备。
-
drive:列出所有驱动器。bashCopy Codedrive list -
drive:选择一个驱动器。bashCopy Codedrive <device_name>
20. ifstat
ifstat 用于查看当前网络接口的状态,包括速率、接收/发送的字节数等信息。
ifstat:查看网络接口状态。bashCopy Codeifstat
21. macaddr
macaddr 用于获取或设置网络接口的 MAC 地址。此命令通常用于确保设备使用特定的网络配置。
-
macaddr:获取当前接口的 MAC 地址。bashCopy Codemacaddr -
macaddr:设置接口的 MAC 地址。bashCopy Codemacaddr <new_mac_address>
22. cfg
cfg 用于显示或修改 iPXE 配置的设置,包括网络参数、内核设置等。
-
cfg:显示当前配置。bashCopy Codecfg -
cfg:设置配置项。bashCopy Codecfg <parameter> <value>
23. ping
ping 命令用于检查网络连接的可达性。它发送 ICMP 请求包,检查目标主机是否响应。
ping:执行 ICMP ping。bashCopy Codeping <IP address or hostname>
24. fs0 等设备访问
iPXE 支持通过设备标识符来访问和操作不同的存储设备,例如 fs0 表示第一个文件系统设备。这个标识符用于从设备加载文件或访问文件系统。
-
fs0:访问第一个文件系统设备。bashCopy Codefs0: <file_name> -
fs1:访问第二个文件系统设备。bashCopy Codefs1: <file_name>
25. dhcp
dhcp 命令用于通过 DHCP (Dynamic Host Configuration Protocol) 获取 IP 地址等网络配置信息。iPXE 在启动时通常会自动进行 DHCP,但你也可以手动请求。
dhcp:手动请求 DHCP 配置。bashCopy Codedhcp
26. http/https
http 和 https 用于通过 HTTP 或 HTTPS 协议进行文件下载。iPXE 支持这两种协议进行镜像下载和文件传输。
-
http:使用 HTTP 协议获取文件。bashCopy Codehttp://example.com/file.iso -
https:使用 HTTPS 协议获取文件。bashCopy Codehttps://example.com/file.iso
27. time
time 命令用于测量命令执行的时间。可以帮助你分析脚本或操作的执行效率。
time:测量命令的执行时间。bashCopy Codetime <command>
28. wait
wait 命令可以使 iPXE 等待某些事件的发生。例如,等待一个特定的文件被加载,或者等待某个操作完成。
wait:等待特定的时间或事件。bashCopy Codewait <time_in_ms>
29. reset
reset 用于重新启动 iPXE,通常在需要重新启动并重新加载配置时使用。
reset:重新启动 iPXE。bashCopy Codereset
30. netstat
netstat 命令用于查看当前的网络连接状态,包括开放的端口、连接的主机等。
netstat:显示网络连接状态。bashCopy Codenetstat
31. set 和 unset
这些命令用于设置和删除 iPXE 变量,可以帮助你管理各种配置和动态参数。
-
set:设置环境变量。bashCopy Codeset <variable> <value> -
unset:删除环境变量。bashCopy Codeunset <variable>
32. blockread 和 blockwrite
blockread 和 blockwrite 是用于低级别磁盘操作的命令,支持直接从块设备读取和写入数据。
-
blockread:从块设备读取数据。bashCopy Codeblockread <device> <offset> <length> -
blockwrite:将数据写入块设备。bashCopy Codeblockwrite <device> <offset> <length>
iPXE 提供了丰富的 API 和命令,支持灵活的网络引导、设备管理、操作系统加载、调试等功能。你可以利用这些命令来定制引导过程,执行网络文件操作,进行调试和故障排查,甚至自动化整个引导过程。
iPXE 还有更多有用的 API 和功能可以补充。以下是一些常见的 iPXE API,它们在不同的网络引导和系统部署过程中非常有用:
33. setpci
setpci 命令用于直接与 PCI 设备进行交互,可以读取或写入 PCI 配置空间的值。这对于调试硬件相关的问题或自定义硬件设置非常有帮助。
setpci:读取或写入 PCI 配置空间。bashCopy Codesetpci -s <device> <offset> <value>
34. echo
echo 用于在屏幕上打印消息或变量的值。可以用于调试脚本或输出一些有用的信息。
-
echo:输出信息。bashCopy Codeecho "Hello, World!" -
echo:输出变量的值。bashCopy Codeecho $variable
35. exit
exit 用于退出当前的 iPXE 会话或脚本。可以用于在满足某些条件时停止执行并退出。
exit:退出 iPXE 会话。bashCopy Codeexit
36. exitstatus
exitstatus 用于返回最近命令的退出状态。它可以帮助你检查某个命令是否成功执行。
exitstatus:获取最近命令的退出状态。bashCopy Codeexitstatus
37. version
version 用于输出当前 iPXE 的版本信息。对调试和确认使用的 iPXE 版本非常有用。
version:显示当前 iPXE 版本。bashCopy Codeversion
38. ls
ls 用于列出目录中的文件。它可以帮助你查看文件系统的内容,特别是在从网络文件系统加载文件时。
ls:列出文件系统中的文件。bashCopy Codels /path/to/directory
39. test
test 用于进行条件测试,可以在脚本中实现类似 if 语句的功能。这对于脚本中的条件分支很有帮助。
test:测试某个条件。bashCopy Codetest $variable = "value"
40. ifconfig
ifconfig 用于配置或查看网络接口的状态,包括 IP 地址、子网掩码等信息。
-
ifconfig:查看网络接口的配置。bashCopy Codeifconfig -
ifconfig:设置接口的 IP 地址等。bashCopy Codeifconfig <interface> <ip_address> netmask <netmask>
41. interface
interface 用于指定要使用的网络接口,特别是在系统有多个网络接口时。
interface:选择一个网络接口。bashCopy Codeinterface <interface_name>
42. wdt
wdt 是用于设置或检查硬件看门狗定时器的命令。它有助于确保系统在故障时自动重启。
-
wdt:启用硬件看门狗定时器。bashCopy Codewdt enable -
wdt:禁用硬件看门狗定时器。bashCopy Codewdt disable
43. read
read 命令用于从文件中读取数据。它可以帮助你在脚本中获取文件的内容并处理。
read:从文件中读取数据。bashCopy Coderead <file_name>
44. write
write 用于将数据写入文件。它允许你在脚本中创建或修改文件。
write:将数据写入文件。bashCopy Codewrite <file_name> <data>
45. load
load 用于加载一个配置文件或脚本。这对于在启动时加载额外的配置或脚本非常有用。
load:加载配置或脚本文件。bashCopy Codeload /path/to/script.ipxe
46. root-path
root-path 用于指定 NFS 根文件系统的路径。通过这个命令,可以告诉 iPXE 应该在哪里查找根文件系统。
root-path:指定 NFS 根文件系统路径。bashCopy Coderoot-path nfs://<nfs_server>/path/to/root
47. dns
dns 用于查询 DNS 服务器,解析域名为 IP 地址。这对于网络引导过程中需要使用域名的场景很有帮助。
dns:查询 DNS 服务器。bashCopy Codedns <hostname>
48. dhcp 和 bootp
dhcp 和 bootp 是两个用于获取 IP 配置信息的命令。它们帮助设备在启动时自动获取网络配置。
-
dhcp:请求 DHCP 配置。bashCopy Codedhcp -
bootp:请求 BOOTP 配置。bashCopy Codebootp
49. blockread 和 blockwrite
blockread 和 blockwrite 用于与块设备进行交互,支持读取和写入磁盘数据。这对于底层磁盘操作很有用。
-
blockread:从磁盘读取数据。bashCopy Codeblockread <device> <offset> <length> -
blockwrite:向磁盘写入数据。bashCopy Codeblockwrite <device> <offset> <length>
50. path
path 用于设置或查询文件系统路径。它允许你指定文件系统根目录或当前工作目录。
-
path:显示当前路径。bashCopy Codepath -
path:设置路径。bashCopy Codepath <new_path>
iPXE 提供了丰富的功能和 API,支持从网络引导、设备管理、文件操作、硬件控制到调试等各种需求。通过这些命令和 API,你可以高度自定义网络引导流程,执行网络和磁盘操作,进行调试,并与硬件进行交互。

浙公网安备 33010602011771号