GRUB PXE용 nfsroot 설정

GRUB PXE용 nfsroot 설정

안녕 친구들. 얼마 전에 비슷한 문제가 있었지만 이제는 해결책에 더 가까워졌습니다. 저는 tftp/pxe 서버에 간단한 grub 메뉴를 설정했습니다. 클라이언트가 efi 및 레거시 모드에서 iso 파일을 부팅할 수 있기를 바랍니다! 그래서 SYSLINUX 대신 GRUB을 사용하기로 결정했습니다. 하지만 이제 문제가 생겼습니다. initrd를 로드하려면 nfs 공유를 마운트해야 합니다. 그렇죠? 나는 그것에 몇 시간을 보냈지만 불행하게도 소수의 사람들만이 이것을 시도합니다. 또한 memtest와 같은 linux16 이미지를 실행하는 데 문제가 없습니다. 아무런 문제 없이 잘 작동합니다.

이것은 pxegrub에서 내 clonezilla 라이브 iso 파일을 부팅하기 위한 현재 grub.cfg 메뉴 항목입니다.

menuentry "Netroot" {
   echo 'Trying to boot via nfs ...'
   load_video
   insmod gzio
   if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
   insmod part_msdos
   insmod ext2
   echo 'Loading Linux ...'
   linux /programs/clonezilla/live/vmlinuz root=/dev/nfs netboot=nfs nfsroot=192.168.2.55:/var/lib/tftpboot/programs/clonezilla/live/ rw  quiet
   echo 'Loading initial ramdisk ...'
   initrd initrd.img
}

그리고 내 내보내기 파일

/etc/export

/var/lib/tftpboot/programs/clonezilla/live 192.168.2.55/(rw,no_root_squash,sync,no_subtree_check)

불행히도 올바른 루트 디렉터리를 설정할 수 없으므로 아직 initrd를 로드할 수 없습니다. 여기에 문제가 있나요? 누구든지 grub을 통해 실행하도록 도와줄 수 있나요? SYSLINUX에 대한 몇 가지 예를 찾았지만 grub에서 실행할 수 있습니까?

DEFAULT ubuntu
LABEL ubuntu
KERNEL /vmlinux-4.8.17-040817-generic
APPEND ip=dhcp rw root=/dev/nfs nfsroot=192.168.1.254:/diskless/ubuntu/0185 raid=noautodetect quiet splash amdgpu.vm_fragment_size=9
INITRD /initrd.img-4.8.17-040817-generic

나는 syslinux보다 grub을 선호하며 더 발전했습니다.

누군가가 나를 도울 수 있기를 바랍니다. 내 nfs 공유에 문제가 있는 것은 아닐까요? 나는 전에 그것들을 사용한 적이 없습니다.

답변1

아니요, GRUB은 NFS를 전혀 지원하지 않습니다.

행에 NFS 마운트 매개변수가 포함되어 있어도 linuxGRUB는 해당 매개변수에 대해 작동하지 않습니다. 커널이 실제로 부팅될 때 단순히 매개변수를 Linux 커널에 전달합니다. 커널이 부팅하고 initramfs를 실행하면 이러한 매개변수를 사용하여 NFS 마운트 루트 파일 시스템을 설정합니다.

GRUB은 initrd.img커널 파일을 로드하는 데 사용하는 것과 정확히 동일한 메커니즘을 사용하여 이 파일을 로드합니다. "간단한 tftp/pxe" 솔루션에서 메커니즘은 TFTP일 가능성이 높습니다. (최신 버전의 UEFI도 HTTP를 지원할 수 있지만 GRUB가 UEFI의 HTTP 기능을 사용할 수 있는지 확실하지 않습니다.)

GRUB는 커널, initramfs 및 부팅 옵션 문자열을 PXE 클라이언트의 RAM에 로드한 후 시스템 제어권을 커널로 넘깁니다. GRUB은 추가 작업에 관여하지 않습니다.

레거시 PXE 부팅 및 UEFI PXE 부팅을 처리하려면 DHCP 서버가 PXE 아키텍처 옵션을 읽고 이를 사용하여 PXE 클라이언트가 레거시인지 UEFI인지 식별한 다음 적절한 부팅 파일 경로를 레거시 PXE 부트 로더에 전달해야 합니다( 예를 들어 ) grub-mkimage --format=i386-pc-pxe또는 UEFI 부트 로더로 생성된 이미지(예: grub.efi)를 사용합니다 grub-mkimage --format=x86_64-efi.

PXE를 통해 Clonezilla Live를 부팅하려면 nfsroot 옵션이 필요하지 않습니다. 대신 linux라인은 다음과 같을 수 있습니다.

linux /programs/clonezilla/live/vmlinuz boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=en_US.UTF-8 keyboard-layouts=us ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=http://URI_path_on_your_server_containing/filesystem.squashfs

http://URI_path_on_your_server_containing/filesystem.squashfs분명히 해당 부분을 Clonezilla initramfs가 Clonezilla 파일을 다운로드할 수 있는 HTTP 서버를 가리키는 실제 URL로 바꾸십시오 filesystem.squashfs. US 이외의 키보드를 선호하는 경우에도 이 keyboard-layouts=us섹션을 변경할 수 있습니다. 옵션 문자열은 원래 다음 지침에 따라 작성되었습니다.

Clonezilla 부팅 옵션 참조:

저는 이를 기존 PXE 부팅에서 SYSLINUX와 UEFI의 iPXE.org 부트로더와 함께 사용했고, clonezilla-live-20191024-eoan-amd64.zip으로 테스트했을 때 제대로 작동했습니다.

관련 정보