為 GRUB PXE 設置 nfsroot
哎呀朋友們。前段時間我有一個類似的問題,但現在我更接近解決方案。我在我的 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 掛載的根文件系統。GRUB
initrd.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 對其進行測試時,它可以工作。