Creating bootable USB thumb drive from PXE boot files

pxe-bootusbusb-boot

Looked around and Googled but could not find a similar question. It seems most people want to take a bootable USB thumb stick and convert it into a PXE boot image. I actually need to go in the opposite direction, that is, create a bootable USB thumb stick from PXE boot files.

I have a PXE server used for disk imaging. Some devices on my network are not able to PXE boot because 1) PXE is already being used by something else on their subnet or 2) their network adapter doesn't support PXE. My only option would be to grab whatever files are being used to PXE boot the device and try to make a bootable USB thumb drive.

I have access to the PXE server which is using PXELinux. Here's what's in the "default" file being used by PXELinux.

default imaging
prompt 0
noescape 1

label imaging
kernel kernel/bzImage
append initrd=kernel/init.gz root=/dev/ram0 rw ramdisk_size=127000 ip=dhcp dns=10.10.10.5 storage=10.10.10.211:/imaging/images/ driversstorage=10.10.10.211:/imaging/drivers/ imaging_server=10.10.10.211:20444 symmetric_key=KsqRwghBK+l/LGQ83kOp3Gl8Xos9mrTItQ69MJabgAv5DqcKakVCwNpE4QJ+A9zzDoSAhdREIVK4lkUZP67XXg loglevel=4a

I'm mostly a Windows/Mac guy but can get around in Linux and am comfortable running command lines in a terminal. I know next to nothing about the Linux boot process nor how to make a bootable USB thumb drive. I gather from the above PXELinux config file that the bzImage and init.gz files are needed to PXE boot a client device. Is there a way to use these 2 files and the info from the PXELinux configuration to create a bootable USB thumb stick?

Thanks

Best Answer

You cannot easily do that; even if you manage to create a bootable USB loading the kernel and the initrd, the initrd parameters are going to still require network assets. from your example

append initrd=kernel/init.gz root=/dev/ram0 rw ramdisk_size=127000 ip=dhcp dns=10.10.10.5 storage=10.10.10.211:/imaging/images/ driversstorage=10.10.10.211:/imaging/drivers/ imaging_server=10.10.10.211:20444 symmetric_key=KsqRwghBK+l/LGQ83kOp3Gl8Xos9mrTItQ69MJabgAv5DqcKakVCwNpE4QJ+A9zzDoSAhdREIVK4lkUZP67XXg loglevel=4a

init.gz takes as parameter ip=dhcp telling the booting executive to get its IP by DHCP, next it loads storage=10.10.10.211:/imaging/images/ telling the booting executive that the rest of the boot/install components are stored on a network location, etc etc.

As you can see trying to do what you want requires editing your initrd parameters (Distro dependent) and removing all the network references; not a trivial task that can be made just by a canned utility.