PXE 및 GRUB - 문제 해결 방법

PXE 및 GRUB - 문제 해결 방법

네트워크 부팅을 설정하고 한 마더보드에서 작동시키려고 하는데 다른 마더보드에서는 제대로 작동하지 않는 것 같습니다. 이유를 알 수 있을 만큼 충분한 출력이 표시되지 않습니다.

따라서 "PXE 서버"의 설정은 DHCP와 TFTP가 동일한 서버에 상주하고 DHCP는 다음과 같이 구성됩니다.

root@vogon:/etc/dhcp# cat dhcpd.conf
option domain-name "somewhere.com";
option domain-name-servers 192.168.50.9, 8.8.8.8;
allow booting;
allow bootp;

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

subnet 192.168.50.0 netmask 255.255.255.0 {
  range 192.168.50.10 192.168.50.190;
  option routers 192.168.50.1;
  option broadcast-address 192.168.50.255;
  next-server 192.168.50.9;
  #filename "debian-installer/amd64/bootnetx64.efi";
  filename "grubx64.efi";
}

/srv/tftpTFTP는 루트 디렉터리 로 사용되며 Debian 11 배포판의 부트로더를 사용하고 있으므로 grubx64.efi다음 내용을 읽습니다 ./debian-installer/amd64/grub/grub.cfg

root@vogon:/srv/tftp# cat debian-installer/amd64/grub/grub.cfg
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
set gfxpayload=text
set timeout=-1

menuentry 'Debian 11'{
    set background_color=black
    linux    /debian/11/amd64/linux priority=low vga=788 ---
    initrd   /debian/11/amd64/initrd.gz
}

menuentry "Ubuntu 20.04" {
        linux /ubuntu/20.04/amd64/linux only-ubiquity ip=dhcp ---
        initrd /ubuntu/20.04/amd64/initrd.gz
}

AMD Ryzen 9 5950X CPU가 장착된 ROG Strix X570-F 게이밍 마더보드에 이 설정을 사용하여 Debian 11 및 Ubuntu 20.04를 성공적으로 설치했습니다. /var/log/syslogTFTP 서버에서 다음을 볼 수 있습니다 .

Jul  8 13:33:33 vogon in.tftpd[45602]: RRQ from 192.168.50.161 filename grubx64.efi
Jul  8 13:33:33 vogon in.tftpd[45602]: tftp: client does not accept options
Jul  8 13:33:33 vogon in.tftpd[45603]: RRQ from 192.168.50.161 filename grubx64.efi
Jul  8 13:33:34 vogon in.tftpd[45604]: RRQ from 192.168.50.161 filename /debian-installer/amd64/grub/x86_64-efi/command.lst
Jul  8 13:33:34 vogon in.tftpd[45605]: RRQ from 192.168.50.161 filename /debian-installer/amd64/grub/x86_64-efi/fs.lst
Jul  8 13:33:34 vogon in.tftpd[45606]: RRQ from 192.168.50.161 filename /debian-installer/amd64/grub/x86_64-efi/crypto.lst
Jul  8 13:33:34 vogon in.tftpd[45607]: RRQ from 192.168.50.161 filename /debian-installer/amd64/grub/x86_64-efi/terminal.lst
Jul  8 13:33:34 vogon in.tftpd[45608]: RRQ from 192.168.50.161 filename /debian-installer/amd64/grub/grub.cfg
Jul  8 13:33:37 vogon in.tftpd[45609]: RRQ from 192.168.50.161 filename /ubuntu/20.04/amd64/linux
Jul  8 13:33:40 vogon in.tftpd[45610]: RRQ from 192.168.50.161 filename /ubuntu/20.04/amd64/initrd.gz

그러나 다른 마더보드인 ASUS ProArt Z690-CREATOR WIFI Intel Z690 PCIe 5.0 ATX 및 Intel Core i9 12900KS Special Edition 16코어 Alder Lake 잠금 해제 CPU를 사용하면 로그에 다음만 표시됩니다.

Jul 12 10:49:00 vogon in.tftpd[58652]: RRQ from 192.168.50.136 filename grubx64.efi
Jul 12 10:49:00 vogon in.tftpd[58652]: tftp: client does not accept options
Jul 12 10:49:00 vogon in.tftpd[58653]: RRQ from 192.168.50.136 filename grubx64.efi

클라이언트 화면에 "GRUB에 오신 것을 환영합니다!"라는 텍스트가 표시됩니다. 이 텍스트는 부트로더에서만 발견되므로 grubx64.efi실제로 실행되기 시작하는 것처럼 보이지만 다른 파일을 계속 찾지는 않습니다.

이 문제를 추가로 해결하기 위해 내가 할 수 있는 일에 대한 제안이 있습니까?

답변1

option boot-sizedhcpd 구성에 해당 줄이 없는 것 같습니다. 일부 UEFI 구현에서는 UEFI 펌웨어가 미리 올바른 양의 메모리를 할당할 수 있도록 UEFI PXE 부트로더 파일의 크기를 표시하기 위해 이 옵션이 필요합니다.

옵션을 추가(올바른 크기 지정)해도 해를 끼치지 않으며 일부 UEFI 구현에 도움이 될 수 있습니다. 따라서 실행하여 512바이트 청크로 du -B 512 /srv/tftp/grubx64.efi파일 크기를 결정한 다음 추가하십시오.grub64.efi

option boot-size <size in blocks>;

subnet문서 선언에 dhcpd.conf.

boot-size옵션을 정의하는 것은 이전 버전의 UEFI 사양에서 PXE 부팅에 대한 요구 사항이었던 것으로 보이지만 후속 버전에서 이를 선택 사항으로 만들거나 일부 펌웨어 작성자가 TFTP tsize옵션을 사용하여 PXE 부팅 파일 다운로드 루틴을 작성하기로 선택한 경우에도 놀라지 않을 것입니다. 시작하기 전에 들어오는 파일 전송의 전체 크기를 알려달라고 TFTP 서버에 요청합니다(이 옵션을 사용할 수 있는 경우).

해당 option boot-size라인을 추가해도 도움이 되지 않고 펌웨어가 유용한 진단 정보를 제공하지 않는 경우 TFTP 트래픽을 덤프하고 분석해야 할 수도 있습니다(예: 다음을 wireshark사용하여) PXE 부팅 서버에서는 다음을 수행할 수 있습니다.

tcpdump -i eno1 -Knpvv -s0 -w pxe-tftp.cap udp

그런 다음 tcpdump가 실행되는 동안 PXE 부팅을 시도하고 Ctrl+를 눌러 Ctcpdump를 중지합니다. TFTP 서버가 클라이언트에 데이터를 보내기 위해 다른 포트를 할당할 수 있고 해당 포트가 어떤 포트인지 미리 알 수 없기 때문에 tcpdump에서 TFTP 패킷만 필터링하지 못할 수도 있습니다.

Wireshark에서 덤프를 연 후 tftp필터 표현식 표시줄에 입력하면 관심 있는 TFTP 패킷만 표시됩니다. 그런 다음 패킷 목록 창에 표시된 TFTP 패킷을 마우스 오른쪽 버튼으로 클릭하고 Protocol Preferences-> Trivial File Transfer Protocol-> Reassemble fragmented TFTP files가 선택되어 있는지 확인하세요. 이제 각 TFTP 파일 전송의 마지막 패킷(유용하게 표시되어야 함)을 찾고 패킷 분석 창에서 분기를 열고 다음 (last)과 유사한 줄을 볼 수 있습니다.Trivial File Transfer Protocol

[nn TFTP Fragments (nnnnn bytes): ...]

(nnnnn bytes)섹션에서는 파일 전송의 총 크기를 알려줍니다. 전송된 파일의 실제 크기와 일치하지 않으면 이유를 알아냈을 수도 있습니다. 하지만 문제를 해결하려면 펌웨어 업데이트가 필요할 수 있습니다.

관련 정보