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

그런 다음 다른 파일로 시도해 볼 수 있습니다. vmlinuz 및 initrd 파일을../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
}

도움을 주신 Cas에게 감사 인사를 전합니다!

답변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파일에서 약간 조정되었습니다. 내 버전은 (내 httpd는 다음에서 KERNEL http://ip.ip.ip.ip/tftp/chain.c32제공하도록 구성되었습니다 . tftp도 잘 작동합니다) 및 ./tftp//srv/tftpAPPEND hd0 0

관련 정보