如何选择 pxelinux 启动盘

如何选择 pxelinux 启动盘

我已经用 pxelinux 配置了一台计算机,并且可以从 DHCP/TFTP 启动。我可以接收引导加载程序,然后从本地 HDD 或 SSD 引导。但我想使用引导加载程序选择应该从哪个设备引导。例如,在一台有两个设备的计算机上,我想选择从哪个设备启动。我已经摆弄了 pxelinux 的配​​置并阅读了文档,但它似乎只提到了网络启动过程。这是我的示例配置文件(默认)

default ssd
prompt 1
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL hdd
    MENU LABEL Boot local hard drive
    root= (hd0,2)
    kernel /boot/vmlinuz-3.11.6-4-desktop
    initrd=(hd0,2)/boot/initrd-3.11.6-4-desktop

LABEL ssd
    MENU LABEL Boot local hard drive
    LOCALBOOT -1

它有 pxelinux 6.0.3,我几乎尝试了所有组合,但唯一的答案始终是它找不到内核或initrd文件,无论我说/dev/sda2什么或(hd0,2)什么。

我是否遗漏了什么,或者 pxelinux 无法完成此任务?


对于每个选项,答案总是“没有这样的文件或目录”,除了选项“二”,启动正常。(我无法从控制台获取日志)。从客户端到服务器的 tftp 工作正常。

default menu.c32
prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL one
        MENU LABEL Boot local hard drive
    root= hd0 2
    kernel /boot/vmlinuz-3.11.6-4-desktop

LABEL two
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL three
        MENU LABEL Boot local hard drive
    root=/dev/sda2
    kernel vmlinuz-3.11.6-4-desktop
    initrd=/boot/initrd-3.11.6-4-desktop.gz

LABEL four
        MENU LABEL VIER
    root=/dev/sda2 rw
        KERNEL ftp://179.99.99.1/chain.c32

LABEL five
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL chain.c32

LABEL six
        MENU LABEL VIER
    root=(hd0,2) rw
        KERNEL /boot/chain.c32

LABEL seven
    MENU LABEL Hole chain.c32 uebers Netz
    root hd0 2
    KERNEL /boot/chain.c32
    initrd=/boot/initrd-3.11.6-4-desktop.gz 

xinetd 守护进程的状态显示客户端 tftp 正在向服务器请求文件。看起来好像客户端正在从服务器获取文件。但为什么不处理它......

xinetd.service - Xinetd A Powerful Replacement For Inetd
   Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled)
   Active: active (running) since Wed 2016-06-29 16:08:46 CEST; 21min ago
 Main PID: 1536 (xinetd)
   CGroup: /system.slice/xinetd.service
           |-1536 /usr/sbin/xinetd -stayalive -dontfork
           `-2938 in.tftpd -s /rde/installation/tftpboot -vvv

Jun 29 16:21:47 uaewg-srv in.tftpd[4161]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4279]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:32 uaewg-srv in.tftpd[4280]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:22:36 uaewg-srv in.tftpd[4288]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4544]: RRQ from ::ffff:199.99.99.10 filename pxelinux.0
Jun 29 16:24:17 uaewg-srv in.tftpd[4545]: RRQ from ::ffff:199.99.99.10 filename ldlinux.c32
Jun 29 16:24:17 uaewg-srv in.tftpd[4556]: RRQ from ::ffff:199.99.99.10 filename pxelinux.cfg/default
Jun 29 16:24:17 uaewg-srv in.tftpd[4558]: RRQ from ::ffff:199.99.99.10 filename menu.c32
Jun 29 16:24:34 uaewg-srv in.tftpd[4580]: RRQ from ::ffff:199.99.99.10 filename chain.c32
Jun 29 16:24:38 uaewg-srv in.tftpd[4588]: RRQ from ::ffff:199.99.99.10 filename chain.c32

答案1

我发现如何根据我的需要配置 pxelinux。 tftp 已经运行并工作,我做了一个“tail -f /var/log/messages”发现 chain.c32 不工作(它正在加载,但什么也没发生):

2016-06-29T16:15 uaewg-srv xinetd[1536]: START: tftp from=::ffff:172.99.199.9
2016-06-29T16:15 uaewg-srv in.tftpd[2939]: RRQ from ::ffff:172.99.199.9 filename chain.c32
2016-06-29T16:18 uaewg-srv sshd[3183]: Accepted keyboard-interactive/pam for uae_wg_sim from 127.0.0.1 port 54948 ssh2

然后我可以尝试使用其他文件,我在../tftpboot/pxelinux.cfg/默认配置文件:

prompt 0
ONTIMEOUT local
timeout 3000

MENU TITLE PXE Menu

LABEL local
        MENU LABEL Boot local hard drive
        LOCALBOOT 0

LABEL hdd
      kernel vmlinuz-3.11.6-4-desktop
      APPEND initrd=initrd-3.11.10-21-desktop  root=/dev/sda2

chain.c32、menu.c32 要么在系统上不起作用,我不知道为什么,也许我尝试找出是否还有时间,我很高兴它现在可以工作。 /var/log/消息对于错误诊断来说是一个很好的帮助,目前还不清楚谁负责tftpd,但我发现它大概是由xinetd而不是systemd启动的。我改变了内容/etc/xinetd.d/tftp到 :

service tftp
{
#   per_source      = 11
    cps         = 100 2
    socket_type     = dgram
    protocol        = udp
    wait            = yes
    user            = root
    server          = /usr/sbin/in.tftpd
    server_args     = -s /rde/installation/tftpboot -vvv
    flags           = IPv6 IPv4
}

问候并感谢 cas 的帮助!

答案2

您需要使用链式装载机(链.c32) 从系统Linux. 与其他syslinux模块一样,BIOS、efi32 和 efi64 也有不同的版本。

LABEL local
    MENU DEFAULT
    MENU LABEL Boot from Local Hard Disk
    KERNEL /path/to/chain.c32
    APPEND hd0 2

这是根据我的/srv/tftp/default文件稍微改编的 - 我的版本有KERNEL http://ip.ip.ip.ip/tftp/chain.c32(我的 httpd 配置为服务/tftp//srv/tftp- tftp 也可以工作)和APPEND hd0 0.

相关内容