How to boot Debian ISO from USB flash drive

This is a follow up to the previous article. I will briefly describe a way to boot Debian installation ISO image from USB flash drive using syslinux bootloader.

This task requires more work then previously described Ubuntu or Clonezilla ISO, so I decided to write these instructions separately. It requires a little bit of Linux knowledge, but you can use these to boot Debian netinst CD or regular Debian DVD #1.

If you do not need to boot it from USB flash drive using custom boot menu then just use basic dd utility. Otherwise, I will save you some time and describe the whole process.

Step A

Perform steps described last week at How to create bootable USB flash drive.

Step B

Download Debian netinst ISO image from (debian-8.2.0-amd64-netinst.iso in this example) and store it inside /media/usb/images/ directory.

Step C

Create directory for initial boot loader image using text mode.

$ mkdir /media/usb/boot/debian-netinst-text

Change working directory and download required initrd image and Linux kernel.

$ cd /media/usb/boot/debian-netinst-text
$ wget
$ wget

Create directory for initial boot loader image using graphical mode.

$ mkdir /media/usb/boot/debian-netinst-gtk

Change working directory and download required initrd image and Linux kernel [hd-media].

$ cd /media/usb/boot/debian-netinst-gtk
$ wget
$ wget
Step D

Get the UUID of the USB flash drive to uniquely identify it.

$ sudo blkid /dev/sdc1
/dev/sdc1: UUID="159ec37e-19e4-478d-b603-f06d041a41cf" TYPE="ext4" PARTUUID="5110c451-01"
Step E

Modify initrd image to use specific device and ISO image.

Create temporary directory.

$ mkdir /media/usb/boot/debian-netinst-text/custom_initrd

Change working directory.

$ cd /media/usb/boot/debian-netinst-text/custom_initrd

Extract initrd.

$ gzip -d < ../initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames

Edit iso-scan.postinst shell script.

$ sudo vi /media/usb/boot/debian-netinst-text/custom_initrd/var/lib/dpkg/info/iso-scan.postinst

Modify use_this_iso function call (near the end of file) to use specific ISO image and device. You should also simplify main loop to speed-up the whole process. Simple devices names like /dev/sdc1 cannot be used due to unpredictable hardware configurations.

# iso-scan is divided in following stages:
# 1  : get list of devices (no debconf question)
# 2/3: select a device (or all detected ones)
# 4/5: parse selected devices looking for Debian ISOs and let choose one

# This conf script is capable of backing up
db_capb backup

modprobe ext4 >/dev/null 2>&1 || true
modprobe loop >/dev/null || true

mkdir /cdrom 2>/dev/null || true
mkdir /hd-media 2>/dev/null || true

log "Selected ISO: $iso on $device"
use_this_iso $iso $device

exit 0

Store modified initrd image.

$ find . | cpio -H newc --create --verbose | sudo gzip -9 > ../initrd.gz

Delete temporary directory.

$ cd ..
$ rm -r custom_initrd

Repeat these steps for graphical mode.

Step F

Create menu entry to boot


  LABEL - 
    MENU LABEL Debian 64bit netinstall:

  LABEL debian_netinstall_amd64_text
    MENU LABEL text mode
    LINUX /boot/debian-netinst-text/vmlinuz
    APPEND vga=788 initrd=/boot/debian-netinst-text/initrd.gz --- quiet

  LABEL debian_netinstall_amd64_gtk
    MENU LABEL graphical mode
    LINUX /boot/debian-netinst-gtk/vmlinuz
    APPEND vga=788 initrd=/boot/debian-netinst-gtk/initrd.gz --- quiet    

Boot USB flash drive and verify boot process.

Milosz Galazka's Picture

About Milosz Galazka

Milosz is a system administrator working for a successful Polish company and a long time supporter of Free Software Foundation and Debian operating system.

Gdansk, Poland