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가 이 작업을 수행할 수 없는 걸까요?


모든 옵션에 대해 대답은 항상 "해당 파일 또는 디렉터리 없음"입니다. 단, 옵션 "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.

관련 정보