Linux

為 GRUB PXE 設置 nfsroot

  • January 10, 2020

哎呀朋友們。前段時間我有一個類似的問題,但現在我更接近解決方案。我在我的 tftp/pxe 伺服器上設置了一個簡單的 grub 菜單。我希望客戶端能夠以 efi 和傳統模式啟動 iso 文件!所以我決定使用 GRUB 而不是 SYSLINUX。但現在我遇到了一個問題。我必須掛載一個 nfs 共享才能載入 initrd 對嗎?我花了幾個小時的時間,但不幸的是只有少數人嘗試執行此操作。此外,我在執行 memtest 之類的 linux16 映像時沒有遇到任何問題。他們工作正常,沒有任何問題。

這就是我目前的 grub.cfg 菜單條目,用於從 pxegrub 引導我的 clonezilla live iso 文件。

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/出口

/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

我更喜歡 grub 而不是 syslinux,它更高級一些。

我希望有一個人可以幫助我。也許這是我的 nfs 共享的一些問題?我以前從未使用過它們。

不,GRUB 根本不支持 NFS。

即使該linux行包含 NFS 掛載參數,GRUB 也不會對這些參數起作用;它只是在核心實際啟動時將參數傳遞給 Linux 核心。一旦核心啟動並執行 initramfs,它將使用這些參數來設置 NFS 掛載的根文件系統。

GRUBinitrd.img使用與載入核心文件完全相同的機制來載入。在您的“簡單 tftp/pxe”解決方案中,該機制很可能是 TFTP。(最新版本的 UEFI 也可能支持 HTTP,但我不確定 GRUB 是否可以使用 UEFI 的 HTTP 功能。)

一旦 GRUB 將核心、initramfs 和引導選項字元串載入到 PXE 客戶端的 RAM 中,它就會將系統的控制權轉移給核心:GRUB 將不會參與超出該點的任何操作。

為了處理舊版和 UEFI PXE 引導,您的 DHCP 伺服器必須讀取 PXE 架構選項,使用它來辨識 PXE 客戶端是舊版還是 UEFI,然後將適當的引導文件路徑傳遞給舊版 PXE 引導載入程序(例如使用 ) 創建的 GRUB 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用指向 HTTP 伺服器的實際 URL 替換該部分,Clonezilla initramfs 將能夠從該伺服器下載 Clonezillafilesystem.squashfs文件。如果您更喜歡非美式鍵盤,也可以更改keyboard-layouts=us元件。此選項字元串最初是按照以下說明編寫的:

和 Clonezilla 引導選項參考:

我在舊版 PXE 引導和 iPXE.org 引導載入程序上將它與 SYSLINUX 一起使用,在 UEFI 上使用它,當我使用 clonezilla-live-20191024-eoan-amd64.zip 對其進行測試時,它可以工作。

引用自:https://unix.stackexchange.com/questions/546927