I've got a legacy PXE server that does everything we need at my company, and entries that boot to a (custom) CentOS 7 livecd, again, in legacy PXE.

I'd like to get these things working under EFI PXE.

So far, depending on what .efi file I specify in my dhcpd.conf, I can get different things to appear on the EFI PXE booting system's screen for different loads; basically, I know that EFI PXE booting works on my network.

The trouble I'm having is which .efi image to use that will fulfill the functionality I need; ideally I'd have all the functionality of my legacy PXE menu just in EFI instead, but primarily I'm interested in getting my CentOS 7 Livecd to boot from EFI PXE.

Working with this forum post and grubx64.efi, I was able to get as far as having the EFI PXE booting system to load grub and the contents in the grub.cfg file.

Within the grub.cfg from the forum post, I modified the menu entry to match the same parameters I pass with my legacy PXE menu entry (note that the commented line is the original "linuxefi" line from the post):

menuentry 'Install CentOS 7' {
   #linuxefi /centos7-net/vmlinuz inst.repo=http://buildlogs.centos.org/centos/7/os/x86_64-latest/
   linuxefi /livecd/vmlinuz initrd=/livecd/initrd.img ksdevice=bootif lang=  root=live:/boot.iso kssendmac text  ks=http://XX.XX.24.21/cblr/svc/op/ks/profile/LiveCD
   initrdefi /livecd/initrd.img

Both the vmlinuz and initrd.img files that work with legacy PXE are present and permissions are set such that anyone can read.

What I get out of this is an error:

"Error: unable to load initrd"

But I'm not sure how to remedy this. The initrd is in the path specified both in the kernel parameters and in the initrdefi line entry.

Has anyone done this before?

How does one administrate a PXE EFI server in general - management of menus, sub menus, OS installs, etc?


on PXE you can TFTP load the kernel and the initrd and that's it; The rest i.e. the big squahfs file implementing a live distro will shurelly be moved by HTTP or a SMB share (NFS also an option).

then besides the error that you get about not being able to load initrd you won't be able to load the live image by using


that does not have the requiered network info. try to see how Serva does it here:


;-Serva v3.0 Non-Windows Asset Information File 
;  Red Hat Enterprise Linux / CentOS Linux
;-Tested on:
;  rhel-server-7.3-x86_64-dvd.iso
;  rhel-server-7.3-x86_64-boot.iso 
;  rhel-workstation-7.3-x86_64-dvd.iso
;  rhel-workstation-7.3-x86_64-boot.iso
;  rhel-client-7.3-x86_64-dvd.iso
;  rhel-client-7.3-x86_64-boot.iso
;  rhel-server-7.2-x86_64-dvd.iso
;  rhel-server-7.2-x86_64-boot.iso
;  rhel-workstation-7.2-x86_64-dvd.iso
;  rhel-workstation-7.2-x86_64-boot.iso
;  rhel-client-7.2-x86_64-dvd.iso
;  rhel-client-7.2-x86_64-boot.iso
;  rhel-atomic-installer-7.2-10.x86_64.iso
;  CentOS-7-x86_64-DVD-1611.iso
;  CentOS-Atomic-Host-7.1704-Installer.iso
;  rhel-workstation-6.5-x86_64-dvd.iso
;  rhel-server-6.5-x86_64-dvd.iso
;  CentOS-6.5-x86_64-bin-DVD1.iso
;  \SERVA_REPO\ offered as HTTP root
; For KickStart
;  7.3 > Add to append  inst.ks=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/images/pxeboot/ks.cfg
;  7.2 > Add to append  ks=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/images/pxeboot/ks.cfg
asset    = RHEL Server 7.3
platform = x86_64

kernel_bios    = /NWA_PXE/$HEAD_DIR$/images/pxeboot/vmlinuz
append_bios    = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img inst.repo=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/
;7.2 > append_bios    = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img root=live:http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/LiveOS/squashfs.img ksdevice=bootif repo=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/
;6.x > append_bios    = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img method=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$ noipv6 ksdevice=bootif
ipappend_bios   = 2

kernel_efi64   = /NWA_PXE/$HEAD_DIR$/images/pxeboot/vmlinuz
append_efi64   = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img inst.repo=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/
;7.2 > append_efi64   = initrd=/NWA_PXE/$HEAD_DIR$/images/pxeboot/initrd.img root=live:http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/LiveOS/squashfs.img ksdevice=bootif repo=http://$IP_BSRV$/NWA_PXE/$HEAD_DIR$/
ipappend_efi64 = 2

I'm related to Serva development.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.