February 20, 2026
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
$ mount /dev/sdX1 /mnt/temp
# Copy ISO
$ cp ~/Downloads/your-distro.iso /mnt/temp/
# Get the UUID
$ blkid /dev/sdX1
Option B: If you have exFAT partition (needs conversion):
# Backup your data first!
# Convert to ext4 using GParted or:
$ umount /dev/sdX1
$ mkfs.ext4 /dev/sdX1
# Then mount and copy ISO
$ mount /dev/sdX1 /mnt/temp
$ cp ~/Downloads/your-distro.iso /mnt/temp/
$ 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
$ mkdir -p /mnt/iso
# Mount the ISO
$ 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
$ cp /mnt/iso/path/to/vmlinuz-* /boot/
$ cp /mnt/iso/path/to/initramfs-* /boot/
# Verify
ls -lh /boot/vmlinuz-* /boot/initramfs-*
# Unmount ISO
$ umount /mnt/iso
Step 3: Create GRUB Menu Entry
# Edit GRUB custom entries
$ 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 (useblkid /dev/nvmeXnYpZor/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:
$ grub2-mkconfig -o /boot/grub2/grub.cfg
For Debian/Ubuntu-based:
$ update-grub
Step 5: Reboot and Install
- Reboot your computer
- Select your custom installer entry from GRUB menu
- The live environment will boot
- 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
$ blkid /dev/sdX1
Common partitions:
/bootpartition (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.cfgfor 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
- Kernel and initrd are loaded directly from
/boot(unencrypted, GRUB can access) - ISO file is stored on unencrypted partition (HDD in our case)
- Boot parameters tell the kernel where to find the ISO (
img_devandimg_loop) - 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:
# Succesfull cleanup
$ rm /boot/vmlinuz-linux-cachyos
$ rm /boot/initramfs-linux-cachyos.img
$ rm /mnt/temp/cachyos-desktop-linux-260124.iso
$ 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 useboot=casper - The
copytoramparameter is crucial if you plan to erase the current OS