Creating a bootable USB drive from an ISO image enables operating system installations, live environments, and recovery tools on hardware that no longer includes optical drives. Reliable removable media is essential when deploying new systems, testing distributions, or repairing unbootable machines.
On Linux, an ISO image typically uses the ISO 9660 format and contains both the filesystem content and bootloader data required for booting. The dd utility copies this image sector by sector from a regular file to a block device such as /dev/sdc, preserving the boot sector, partition table, and metadata that make the medium bootable.
Because dd performs raw writes, targeting the wrong device can erase an entire disk with all existing partitions and data. Correctly identifying the USB device, unmounting any of its partitions, and confirming the image type before writing reduces the risk of data loss and produces a USB drive that boots reliably on compatible systems.
Steps to create a bootable USB drive from an ISO image on Linux:
- Open a terminal on the Linux system.
- Verify the installation ISO image type using the file command.
$ file /root/sg-work/iso-demo/demo.iso /root/sg-work/iso-demo/demo.iso: ISO 9660 CD-ROM filesystem data 'DEMOISO'
Bootable installer images typically include a boot record; lightweight demo images may not be marked as bootable by file.
- List the current block devices to understand the existing disk layout.
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 512M 0 loop /mnt/bench ##### snipped ##### vda 254:0 0 1.8T 0 disk `-vda1 254:1 0 1.8T 0 part /etc/hosts /etc/hostname /etc/resolv.conf vdb 254:16 0 606.5M 1 disk ##### snipped #####
- Create a blank USB image file to avoid overwriting a physical device during testing.
$ sudo fallocate -l 64M /root/sg-work/iso-demo/usb.img
- Identify the USB drive device name by listing block devices again.
$ sudo losetup --find --show /root/sg-work/iso-demo/usb.img /dev/loop1 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 512M 0 loop /mnt/bench loop1 7:1 0 64M 0 loop ##### snipped ##### vda 254:0 0 1.8T 0 disk `-vda1 254:1 0 1.8T 0 part /etc/hosts /etc/hostname /etc/resolv.conf vdb 254:16 0 606.5M 1 disk ##### snipped #####
Match the USB drive by size and removable flag to avoid selecting an internal disk; for real devices, the name will look like /dev/sdb or /dev/sdc.
- Write the ISO image to the USB drive using dd.
$ sudo dd if=/root/sg-work/iso-demo/demo.iso of=/dev/loop1 conv=fdatasync 704+0 records in 704+0 records out 360448 bytes (360 kB, 352 KiB) copied, 0.00573143 s, 62.9 MB/s
Confirm the target device (for example /dev/sdc) carefully; using the wrong disk erases all existing data irreversibly.
- Verify that the target device now exposes the expected label and filesystem type.
$ sudo blkid /dev/loop1 /dev/loop1: BLOCK_SIZE="2048" UUID="2026-01-14-00-17-47-00" LABEL="DEMOISO" TYPE="iso9660"
The LABEL and TYPE fields confirm that the image was written correctly as an ISO 9660 filesystem.
- Disconnect the USB drive safely from the system once writing and verification are complete.
On desktop environments, use the graphical eject or safely remove option before unplugging the device.
Mohd Shakir Zakaria is a cloud architect with deep roots in software development and open-source advocacy. Certified in AWS, Red Hat, VMware, ITIL, and Linux, he specializes in designing and managing robust cloud and on-premises infrastructures.
