iPXE discussion forum

Full Version: boot from a large iso file
You're currently viewing a stripped down version of our content. View the full version with proper formatting.

I have a large Centos OS (custom) iso file. The size of iso is 3GB. I am using following options and none of the options are working-

a. Sanboot
sanboot --no-describe --drive 0x80 <web server address>/<iso name>

Doing this gives error - EDD : Error 0400 reading sector 1300633
No DEFAULT or UI configuration directive found!

b. Memdisk
set base <web address>
kernel ${base}/memdisk
initrd ${base}/<iso file name>
imgargs memdisk iso raw

This gives error :- El Torito BVD sanity check failed
El Torito boot catalog sanity check failed
MEMDISK: Image seems to have fractional and cylinder
MEMDISK: Image appears to be truncated

Is there a way to load and boot large ISO files from http webserver using iPXE ?
Normally, you can't access the contents of an ISO after the kernel has booted. You'll need to tell the kernel how to access the files it needs from a network resource.

Here it seems like the ISO is generated in a way that is incompatible with memdisk. Since you're dealing with CentOS, I would recommend that you unpack the ISO and boot CentOS directly using the kernel and initrd found on the ISO.

There should be some tutorials on how to boot CentOS using PXE. The tutorials might be based on PXELINUX, but it should be quite simple to rewrite it to ipxe.

I have a small ISO which is loaded from network in iPXE using-

sanboot --no-describe --drive 0x80 <web server address>/<iso name>

The iso is loaded successfully. How can i access the contents of this ISO which is loaded, is this iso mounted locally ?
As soon as a realtime kernel takes over any iPXE driver and memory is more or less thrown out the window. Essentially the answer becomes - you can't.
Here is one example of a similar thread: http://forum.ipxe.org/showthread.php?tid=7052

What is your full usecase?

EDIT: also merging with previous thread since it seems to be a continuation rather then new topic
Thanks for the response. I will add fetching of the files in the main iso itself.

Now the earlier question about the large iso (~3GB). Is there a way of directly loading the iso from network, instead of using the network mount ?
I have several small ISO which are correctly loaded directly using sanboot, but the large ISO files are not loaded.
Loading large isos over network is generally a horrible bad Idea.

Instead Load the kernels properly as they should.
First of small isos will be easier to load because they are small.
But they generally succeed because they are not acutally used by the booted OS since they only contain a kernel and initrd - and the ISO contents is not actually used after kernel is started.

Large ISOs will take long to load, will fill up memory, and contents still won't be available after boot. If you still want to boot large isos over the network you might use iSCSI but it will need support by the booted kernel to load network drivers initialize iSCSI and connect to the target with data from the iBFT ACPI table. This is something that will only work for few of the isos that are available.

Instead of this, clearly explain what you are trying to boot and maybe we can help you on the way, also search the forum, many explanations for different distros have already been given.

One other similar discussion: http://forum.ipxe.org/showthread.php?tid=8017
I hate to threadjack. Please let me know if I should start a new thread. I'm trying to do the same but under a different application. I'm using FOG on Ubuntu and want to load a Hiren Boot DVD that is over 2gb. The issue is that I run out of memory on the client PC.
item --gap -- ---------------- iPXE boot menu ----------------
item hiren Hiren Boot CD 15.2
item shell ipxe shell
item return return to previous menu
choose --default return --timeout 5000 target && goto ${target}
initrd http://${fog-ip}/fog/iso/Hiren/hbcd-15.2-Restored-V1.1-dvd-proteus.iso
chain memdisk iso raw ||
goto MENU
shell ||
goto MENU
chain http://${fog-ip}/${fog-webroot}/service/ipxe/boot.php?mac=${net0/mac} ||
goto MENU
(2017-06-23 19:16)sleepybrown Wrote: [ -> ]I'm using FOG on Ubuntu and want to load a Hiren Boot DVD that is over 2gb. The issue is that I run out of memory on the client PC.

If you run out of memory then you need to get more memory. Does this even work on a machine with lots of memory?
Because as has already been explained in this thread a couple of times already, the linux kernel does not have any way (by default) to actually handle the memdisk loaded content, so even if the first stage boot process would succeed, it would fail when trying to mount the DVD-Image. There is a few live-cds that might have the kernel support and helper scripts to handle this, but most of the time it is a bad idea, both for boot times, the bootscripts not finding the ISO as just described and also for the memory issue or similar that you are having. Instead only the kernel and initrd should be loaded by iPXE and then a url or NFS root should be provided to access the ISO or squashfs.
I'm sorry I should rephrased the message. I understand that 2gb will inevitably fail. Most of the machine anywhere from 2gb-8gb ram. I was hoping there was a way to have a bootloader mount and read the directory of the extracted ISO. From what I've been researching iSCSI is the way to go, but I haven't found really anything about using it in linux, even more in fog. I also want to go for your idea which is pretty much the same direction I was heading in. Stupid question should there be a specific kernel and initrd I should be looking for?
Reference URL's