![pxelinux 부팅 디스크를 선택하는 방법](https://linux55.com/image/89210/pxelinux%20%EB%B6%80%ED%8C%85%20%EB%94%94%EC%8A%A4%ED%81%AC%EB%A5%BC%20%EC%84%A0%ED%83%9D%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
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가 이 작업을 수행할 수 없는 걸까요?
모든 옵션에 대해 대답은 항상 "해당 파일 또는 디렉터리 없음"입니다. 단, 옵션 "2"는 정상적으로 부팅됩니다. (콘솔에서 로그를 가져올 수 없습니다.) 클라이언트에서 서버로의 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/default구성 파일:
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를 담당하는 사람이 누구인지는 확실하지 않지만 아마도 systemd가 아닌 xinetd에 의해 시작되는 것으로 나타났습니다. 내용을 바꿨어요/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
}
도움을 주셔서 감사합니다.
답변2
체인 로더를 사용해야 합니다(체인.c32) 에서시스템리눅스다른 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/
tftp /srv/tftp
도 작동함) 및 APPEND hd0 0
.