我已经用 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
.