[HowTo] Booting manjaro iso directly with grub

Difficulty: ★☆☆☆☆

We are all familiar with burning live usb stick to boot our Manjaro isos. That is useful when you are installing manjaro on a new machine. However, if you already have linux installed with grub, there is a better way to boot Manjaro iso files. I usually do this when I test new iso files for a new release or when I need to use a rescue system because one of my experiments rendered my installation unbootable.

You can boot the iso file directly from your hard drive without burning an usb stick. Not only is this less hassle, it also gives you better performance because your hdd or ssd is much faster than your average usb stick. And your kids are usually less likely to eat your hard drive than your usb sticks. I learnt his from @gohlip, who posted a similar tutorial on the archived forum: Booting Manjaro iso using grub2 - Tutorials - Manjaro Linux Forum

How to do it

  1. Save your iso file to directory /miso. You can also use a different folder, but you need to adjust the configuration file path accordingly. If you use btrfs subvolumes, you need to include your subvolume in path, like this /@/miso.

  2. Create the file /boot/grub/custom.cfg with following contents:

    menuentry "Manjaro  grub_iso"  {
        set isofile="/miso/manjaro-gnome-20.1-stable-x86_64.iso"
        set dri="free"
        set lang="en_US"
        set keytable="fi"
        set timezone="Europe/Helsinki"
        search --no-floppy -f --set=root $isofile
        probe -u $root --set=abc
        set pqr="/dev/disk/by-uuid/$abc"
        loopback loop $isofile
        linux  (loop)/boot/vmlinuz-x86_64  img_dev=$pqr img_loop=$isofile driver=$dri tz=$timezone lang=$lang keytable=$keytable copytoram
        initrd  (loop)/boot/intel_ucode.img (loop)/boot/initramfs-x86_64.img
    }
    
  3. Adjust the keytable, timezone and language parameters to match your needs. Make sure your isofile variable matches the name and location of your iso file.

  4. If you have an AMD CPU, change intel_ucode.img to amd_ucode.img.

  5. Profit. When you reboot, your grub has an extra entry that let’s you boot into the live system.


This menu entry loads the iso to ram. It increases the performance further, and let’s you mount and manipulate the partition that the iso is located on. However, it also requires more ram. If you don’t have enough ram for this, you can remove the parameter copytoram from the configuration.

13 Likes

Really nice, never thought about that although aware it is possible. And damn easy too.

Also very helpful if the system does not want to boot and you don’t have a stick at hand or can’t flash one from another device. (At least if grub and the drive is still ok)

First thing I will do after work tomorrow :wink:

1 Like

I usually have btrfs subvolumes and timeshift-autosnap with grub-btrfs set up, plus this. So, if an update messes up my boot, I boot into the snapshot that was taken right before the update, and restore that. But if that doesn’t work, I can still boot into my live system and fix the issue from there. Booting into a snapshot is just quicker though if I’m in hurry.

Hi!
Very great guide!!
But I have a doubt though, it’s necessary to run sudo update-grub after create the file and if I’m using an AMD CPU, i need to change intel_ucode.img for amd_ucode.img?

Nope, this is direct gru configuration and not touched by update-grub

Yes.

Not needed.

Changes to /boot/grub/custom.cfg do not require re-running *grub-mkconfig* , since /etc/grub.d/41_custom adds the necessary source statement to the generated configuration file.

Hi!
Thanks!!! I’m gonna try it right now!!!

Update
I’m not able to boot up with the iso, this are the errors

  1. Can’t find the disk
  2. Can’t find the iso
  3. Can’t find server
  4. load the kernel first
    I recheck the path, the options i change in the custom.cfg

Could be because of the UUID?

Damn, this is a wet dream for distro hoppers also. :joy:
Faster than setting up a VM and you can try on bare metal right away.

There should be some tool to automate this (select distro(s), download iso(s), make cfg, reboot :wink: :joy:

The problem is that different distros need different Grub menu code.
I used to get the code by analysing the ISO, I mounted it with
mount -o loop *.iso /mnt
then checked what is in the /mnt/boot folder and tried to recreate it. It was still not possible to boot many ISOs this way.

I’ve used this method for a long time and it works great. But, it’s a hassle when updating the iso. With the release of ventoy and its ability to autodetect the image(s), is it not possible to update the script for a true “drag & drop & forget” method?

1 Like

There is also

And

Yes, auto detection is quite possible. Ventoy is even more simple because you don’t need to update the menu when you add isos. Not sure how to use ventoy directly from the disk, but that might be possible too.

You can use ventoy from disk - I wouldn’t recommend it though - especially since ventoy formats the disk to exfat.

I’ll have to try ventoy at some time and examine the grub config. Maybe it could be used as template for drag and drop iso booting from disk too? I dunno, have to see.

2 Likes

Thanks for this very useful tip…I will try it for my new laptop. :hugs:

1 Like

I followed the first post, modified the custom.cfg to match my needs (AMD cpu, nonfree drivers, fr keytable, Paris timezone), and with no surprise it worked flawlessly this is really great to have a ‘live media’ always on hands! great tutorial thanks!

Something that could be noted is the possibility to customize the dri variable (free or nonfree), and the menu entry name can also be changed.

:+1: