使用 Virtualbox 进行 PXE 启动

使用 Virtualbox 进行 PXE 启动

我有一个 Linux 客户端,它是我的服务器。我还创建了另一个客户端作为没有磁盘的客户端。

我想知道哪种网络类型和适配器是正确的?NAT 还是内部网络?AMD 还是 Intel 芯片?

根据手册,

PXE booting is now supported in NAT mode. The NAT DHCP server provides a boot 
file name of the form vmname.pxe if the directory TFTP exists in the directory 
where the user's VirtualBox.xml file is kept. It is the responsibility of the 
user to provide vmname.pxe

vmname.pxe 的内容是什么?它是一个空文件吗?

Virtualbox 在 Windows 7 上运行,我安装了一台 Linux(科学 Linux 6.3,类似于 Redhat 和 Centos 6)作为服务器,并安装了另一台无盘 Linux 作为客户端。

在服务器上,我已经安装了tftp相关的文件。

# ls /var/lib/tftpboot/ -R
/var/lib/tftpboot/:
menu.c32  pxelinux.0  pxelinux.cfg  sl6

/var/lib/tftpboot/pxelinux.cfg:
default

/var/lib/tftpboot/sl6:
initrd.img  vmlinuz


# cat /var/lib/tftpboot/pxelinux.cfg/default 
timeout 100
default menu.c32
menu title ########## PXE Boot Menu ##########
label 1
   menu label ^1) Install Scientific Linux 6
   kernel sl6/vmlinuz
   append initrd=sl6/initrd.img method=http://10.0.2.51/sl6 devfs=nomount
label 2
  menu label ^2) Boot from local drive
  localboot 

答案1

哦,手册中的“使用 NAT 的 PXE 启动”部分已经提到了,但不是很清楚。

6.3.2. 使用 NAT 进行 PXE 启动 现在支持在 NAT 模式下进行 PXE 启动。NAT DHCP 服务器提供以下形式的引导文件名虚拟机名称.pxe如果目录 TFTP 存在于保存用户的 VirtualBox.xml 文件的目录中。用户有责任提供 vmname.pxe。”

--这里,手册告诉我们谁提供了启动文件:NAT DHCP服务器。OK
,我们来问一个问题:NAT DHCP服务器在哪里?

--在宿主机上,它集成在 VirtualBox 软件中。
(6.3. 网络地址转换(NAT):虚拟机从集成在 VirtualBox 中的 DHCP 服务器接收其在私有网络上的网络地址和配置。)

那么,VirtualBox 会在哪里搜索配置文件呢?当然是在主机上。
这意味着 virtualbox 会尝试在主机上搜索“vmname.pxe”。而不是在您的科学 Linux 服务器上。

并且手册告诉我们,除了VirtualBox.xml之外,我们还应该放置一个“tftp”目录。

在 Windows 7 上,VirtualBox.xml 位于 C:\Users<your username>.VirtualBox\ 。
(VirtualBox 版本 5.1.14,手册没有说 4.0 之后默认配置位置发生了变化)

当我阅读该部分时,我正尝试通过 PXE 启动安装 Debian 系统。所以我猜测“vmname.pxe”是文件 pxelinux.0 并重命名。

我试了几次,发现“vmname.pxe”应该是“ <vmname>.pxe”,其中<vmname>是你的虚拟机名称。

最后,我成功的使用 NAT 进行 PXE 启动是这样的:
在主机上(我的主机也是 Windows 7),目录结构是:

%USERPROFILE% (mostly it is C:\Users\<username>\)
 |-.VirtualBox
    |-VirtualBox.xml
    |-TFTP
    |  |-pxelinux.cfg
    |  |  |-default-> ..\debian-installer\amd64\boot-screens\syslinux.cfg
    |  |-DebianSid.pxe->pxelinux.0 (DebianSid is my virtual machine's name)
    |  |-pxelinux.0
    |  |-ldlinux.c32
    |  |-version.info
    |  |-debian-installer\ 
    |-other files

在 VirtualBox 客户机上,我的网络设置是“NAT”模式,网卡是“Intel PRO/1000MT 桌面(82640EM)”

我的VirtualBox版本是5.1.14。

不需要安装tftp-hpa,不需要第二个接口,也不需要“不使用Intel卡”,并且它使用内置的PXE功能。

无盘 PXE 启动应该是类似的。

所以问题是手册完全是一团糟,在 Virtualbox 中使用 NAT 进行 PXE 启动实际上非常简单。重点是,PXE 服务器是您的主机 Virtualbox 软件。

关于 tftp 目录结构的更新:(@codeshot 在评论中提出的问题)tftp 启动文件从以下位置下载(例如 debian sid): https://<debian-mirror>/debian/dists/sid/main/installer-<arch>/current/images/netboot/netboot.tar.gz

(如果您没有使用 sid,请更改它)。Ubuntu 类似。

tar xvf netboot.tar.gz并将目录重命名为“tftp”并移动到 VirtualBox 要求的适当位置。

如果这不起作用,请使用 Cygwin 手动将软链接更改为硬链接,或者只是简单地复制并重命名文件。

新信息:除了Cygwin之外,我们还可以在Win10上使用wsl将软链接改为硬链接。

唯一的例外是“目录硬链接” pxelinux.cfg。我们必须使用 cmd 的mklink命令来创建目录连接。

答案2

更新:

经过澄清,完全不使用 VirtualBox 的内置 PXE 功能似乎是可行的方法。相反,为服务器和客户端分配具有“仅主机”或“内部”网络的辅助 NIC,并绑定 DHCP 服务器以在第二个接口上进行监听。不要将英特尔卡用于第二个接口:PXE 以内部网络模式启动 Virtualbox 客户机吗?

VirtualBox NAT 和 PXE 答案:

vmname.pxe包含虚拟机下载后运行的代码,即所谓的 NBP(网络引导程序)

维基百科有关 PXE 的更多信息。

我引用一个使用 PXELinux 的示例:

  1. 安装tftp-hpa。(您不需要守护进程。只需要程序)

  2. 设置pxe目录根。

    mkdir $HOME/.VirtualBox/TFTP
    mkdir $HOME/.VirtualBox/TFTP/pxelinux.cfg
    
  3. 复制pxelinux.0$HOME/.VirtualBox/TFTP并建立指向pxelinux.0命名的符号链接<guest-vmname>.pxe

  4. 将内核和可能的 initrd 复制到$HOME/.VirtualBox/TFTP

  5. 编辑$HOME/.VirtualBox/TFTP/pxelinux.cfg/default,示例:

    LABEL linux
    KERNEL vmlinuz
    APPEND root=/dev/sdxY
    

来源:http://thegnar.org/sync/?p=68

相关内容