February 20, 2026

<- Back to Blog

Install Linux Without USB: GRUB ISO Boot on Dual Boot

How to install Linux on a dual-boot system without a USB drive by booting an ISO from disk using GRUB.

Overview

This guide shows how to install a Linux distribution (CachyOS, Ubuntu, etc.) on a dual-boot system without using a USB drive, by booting the ISO directly from your hard disk using GRUB.

Prerequisites

  • An existing Linux installation with GRUB bootloader (Fedora, Ubuntu, etc.)
  • An ISO file of the Linux distribution you want to install
  • Free disk space on an unencrypted partition or separate hard drive
  • Root/sudo access

The Problem We Solved

GRUB cannot read files from encrypted (LUKS) partitions during boot. If your root partition is encrypted, you need to store the ISO on an unencrypted partition.

Solution: Extract Kernel & Initrd Method

Step 1: Prepare Storage Location

Option A: If you have an ext4/ext3/ext2 partition:

# Mount the partition
sudo mount /dev/sdX1 /mnt/temp

# Copy ISO
sudo cp ~/Downloads/your-distro.iso /mnt/temp/

# Get the UUID
sudo blkid /dev/sdX1

Option B: If you have exFAT partition (needs conversion):

# Backup your data first!
# Convert to ext4 using GParted or:
sudo umount /dev/sdX1
sudo mkfs.ext4 /dev/sdX1

# Then mount and copy ISO
sudo mount /dev/sdX1 /mnt/temp
sudo cp ~/Downloads/your-distro.iso /mnt/temp/
sudo blkid /dev/sdX1

Option C: If partition is too small, create a new one:

# Use GParted to:
# 1. Shrink existing partition
# 2. Create 5GB ext4 partition in unallocated space
# 3. Mount and copy ISO

Step 2: Extract Kernel and Initrd from ISO

# Create mount point
sudo mkdir -p /mnt/iso

# Mount the ISO
sudo mount -o loop ~/Downloads/your-distro.iso /mnt/iso

# Find kernel and initrd locations
find /mnt/iso -name "vmlinuz*"
find /mnt/iso -name "initr*"

# Check the ISO's grub config for boot parameters
cat /mnt/iso/boot/grub/grub.cfg

# Copy kernel and initrd to /boot
sudo cp /mnt/iso/path/to/vmlinuz-* /boot/
sudo cp /mnt/iso/path/to/initramfs-* /boot/

# Verify
ls -lh /boot/vmlinuz-* /boot/initramfs-*

# Unmount ISO
sudo umount /mnt/iso

Step 3: Create GRUB Menu Entry

# Edit GRUB custom entries
sudo nano /etc/grub.d/40_custom

Add this entry (adjust paths and parameters based on what you found in Step 2):

For CachyOS:

menuentry "CachyOS Installer" {
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root YOUR-BOOT-PARTITION-UUID
    linux /vmlinuz-linux-cachyos archisobasedir=arch img_dev=/dev/sdX1 img_loop=/your-distro.iso copytoram
    initrd /initramfs-linux-cachyos.img
}

For Ubuntu:

menuentry "Ubuntu Installer" {
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root YOUR-BOOT-PARTITION-UUID
    linux /vmlinuz boot=casper img_dev=/dev/sdX1 img_loop=/ubuntu.iso quiet splash
    initrd /initrd
}

Important variables to replace:

  • YOUR-BOOT-PARTITION-UUID = UUID of your /boot partition (use blkid /dev/nvmeXnYpZ or /dev/sdX)
  • /dev/sdX1 = The partition where ISO is stored
  • /your-distro.iso = Name of your ISO file
  • Kernel/initrd names and boot parameters = From Step 2

Step 4: Update GRUB

For Fedora/RHEL-based:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

For Debian/Ubuntu-based:

sudo update-grub

Step 5: Reboot and Install

  1. Reboot your computer
  2. Select your custom installer entry from GRUB menu
  3. The live environment will boot
  4. Install the distro normally

Installation Options:

  • Dual Boot: Install on a separate partition or the unused HDD
  • Replace Existing: Erase current OS and install new one

Important UUIDs Reference

Find your partition UUIDs:

# See all partitions
lsblk -fa

# Get specific UUID
sudo blkid /dev/sdX1

Common partitions:

  • /boot partition (ext4) - This is where we copy kernel/initrd
  • ISO storage partition (ext4) - Where the .iso file lives
  • EFI partition (vfat) - Keep this for dual boot

Troubleshooting

Error: "no such device: UUID"

  • GRUB can't find the partition
  • Check UUID is correct: sudo blkid
  • Make sure partition is not encrypted

Error: "file not found"

  • ISO path is wrong
  • Verify: sudo mount /dev/sdX1 /mnt/temp && ls /mnt/temp/

Error: "you need to load the kernel first"

  • Boot parameters are wrong
  • Mount ISO and check /mnt/iso/boot/grub/grub.cfg for correct parameters
  • Make sure kernel and initrd paths match what you copied to /boot

Error: exFAT module not found

  • GRUB doesn't support exFAT well
  • Convert partition to ext4 or create new ext4 partition

/boot partition full

  • Don't copy ISO to /boot - it's too small
  • Only copy kernel (~17MB) and initrd (~76MB) to /boot
  • Store ISO on root partition or separate drive

Example: Real Working Configuration

System:

  • Fedora 43 on encrypted NVMe drive
  • 1TB HDD with ext4 partition

Files:

/dev/sda1 (ext4, UUID: d95c77d1-8cd4-4b14-9865-954436110ccb)
  └── cachyos-desktop-linux-260124.iso

/boot (ext4, UUID: a02ac6ca-790c-498b-93fc-82d6d66fdc56)
  ├── vmlinuz-linux-cachyos
  └── initramfs-linux-cachyos.img

GRUB Entry:

menuentry "CachyOS Installer" {
    insmod part_gpt
    insmod ext2
    search --no-floppy --fs-uuid --set=root a02ac6ca-790c-498b-93fc-82d6d66fdc56
    linux /vmlinuz-linux-cachyos archisobasedir=arch img_dev=/dev/sda1 img_loop=/cachyos-desktop-linux-260124.iso copytoram
    initrd /initramfs-linux-cachyos.img
}

Why This Method Works

  1. Kernel and initrd are loaded directly from /boot (unencrypted, GRUB can access)
  2. ISO file is stored on unencrypted partition (HDD in our case)
  3. Boot parameters tell the kernel where to find the ISO (img_dev and img_loop)
  4. copytoram loads everything into RAM, so you can even erase the current OS during installation

After Installation

Once installed, the new OS will add itself to GRUB automatically. You'll have:

  • Your original OS (Fedora)
  • Your new OS (CachyOS/Ubuntu)
  • Both bootable from GRUB menu

Cleanup (Optional)

After successful installation, you can remove the installer files:

sudo rm /boot/vmlinuz-linux-cachyos
sudo rm /boot/initramfs-linux-cachyos.img
sudo rm /mnt/temp/cachyos-desktop-linux-260124.iso
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Notes

  • This method works for most Arch-based and Debian-based distributions
  • Boot parameters vary by distro - always check the ISO's grub.cfg
  • Keep your EFI partition intact for dual booting
  • Some distros use archisobasedir, others use boot=casper
  • The copytoram parameter is crucial if you plan to erase the current OS

Last Updated: February 2026
Tested On: Fedora 43, CachyOS 260124