Quick Links

Linux's GRUB2 boot loader can boot Linux ISO files directly from your hard drive. Boot Linux live CDs or even install Linux on another hard drive partition without burning it to disc or booting from a USB drive.

We performed this process on Ubuntu 14.04 -- Ubuntu and Ubuntu-based Linux distributions have good support for this. Other Linux distributions should work similarly.

Get a Linux ISO File

Related: How to Configure the GRUB2 Boot Loader's Settings

This trick requires you have a Linux system installed on your hard drive. Your computer must be using the GRUB2 boot loader, which is a standard boot loader on most Linux systems. Sorry, you can't boot a Linux ISO file directly from a Windows system using the Windows boot loader.

Download the ISO files you want to use and store them on your Linux partition. GRUB2 should support most Linux systems. if you want to use them in a live environment without installing them to your hard drive, be sure to download the "live CD" versions of each Linux ISO. Many Linux-based bootable utility discs should also work.

Check the Contents of the ISO File

You may need to look inside the ISO file to determine exactly where specific files are. For example, you can do this by opening the ISO file with the Archive Manager/File Roller graphical application that comes with Ubuntu and other GNOME-based desktop environments. In the Nautilus file manager, right-click the ISO file and select Open with Archive Manager.

Locate the kernel file and the initrd image. If you're using a Ubuntu ISO file, you'll find these files inside the casper folder -- the vmlinuz file is the Linux kernel and the initrd file is the initrd image. You'll need to know their location inside the ISO file later.

vmlinuz-and-initrd-file-locations

Determine the Hard Drive Partition's Path

GRUB uses a different "device name" scheme than Linux does. On a Linux system, /dev/sda1 is the first partition on the first hard disk -- a means the first hard disk and 1 means its first partition. In GRUB, (hd0,1) is equivalent to /dev/sda0. The 0 means the first hard disk, while the 1 means the first partition on it. In other words, in a GRUB device name, the disk numbers start counting at 0 and the partition num6ers start counting at 1 -- yes, it's unnecessarily confusing. For example, (hd3,6) refers to the sixth partition on the fourth hard disk.

You can use the fdisk -l command to view this information. On Ubuntu, open a Terminal and run the following command:

sudo fdisk -l

You'll see a list of Linux device paths, which you can convert to GRUB device names on your own. For example, below we can see the system partition is /dev/sda1 -- so that's (hd0,1) for GRUB.

fdisk-l-command

Create the GRUB2 Boot Entry

The easiest way to add a custom boot entry is to edit the /etc/grub.d/40_custom script. This file is designed for user-added custom boot entries. After editing the file, the contents of your /etc/defaults/grub file and the /etc/grub.d/ scripts will be combined to create a /boot/grub/grub.cfg file -- you shouldn't edit this file by hand. It's designed to be automatically generated from settings you specify in other files.

You'll need to open the /etc/grub.d/40_custom file for editing with root privileges. On Ubuntu, you can do this by opening a Terminal window and running the following command:

sudo gedit /etc/grub.d/40_custom

Feel free to open the file in your favorite text editor. For example, you could replace "gedit" with "nano" in the command to open the file in the Nano text editor.

Unless you've added other custom boot entries, you should see a mostly empty file. You'll need to add one or more ISO-booting sections to the file below the commented lines.

add-custom-boot-menu-entries-to-grub

Here's how you can boot an Ubuntu or Ubuntu-based distribution from an ISO file. We tested this with Ubuntu 14.04:

menuentry "Ubuntu 14.04 ISO" {

set isofile="/home/name/Downloads/ubuntu-14.04.1-desktop-amd64.iso"

loopback loop (hd0,1)$isofile

linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splash

initrd (loop)/casper/initrd.lz

}

Customize the boot entry to contain your desiredmenu entry name, the correct path to the ISO file on your computer, and the device name of the hard disk and partition containing the ISO file. If the vmlinuz and initrd files have different names or paths, be sure to specify the correct path to those files, too.

(If you have a separate /home/ partition, omit the /home bit, like so: set isofile="/name/Downloads/${isoname}").

Important Note: Different Linux distributions require different boot entries with different boot options. The GRUB Live ISO Multiboot project offers a variety of menu entries for different Linux distributions. You should be able to adapt these example menu entries for the ISO file you want to boot. You can also just perform a web search for the name and release number of the Linux distribution you want to boot along with "boot from ISO in GRUB" to find more information.

add-a-linux-iso-file-to-grub-boot-loader

If you want to add more ISO boot options, add additional sections to the file.

Save the file when you're done. Return to a Terminal window and run the following command:

sudo update-grub

generate-grub.cfg-on-ubuntu

The next time you boot your computer, you'll see the ISO boot entry and you can choose it to boot the ISO file. You may have to hold Shift while booting to see the GRUB menu.

If you see an error message or a black screen when you attempt to boot the ISO file, you misconfigured the boot entry somehow. Even if you got the ISO file path and device name right, the paths to the vmlinuz and intird files on the ISO file may not be correct or the Linux system you're booting may require different options.