How to create a Bootable USB stick, with free space, from an ISO image
So you too don't like burning a new DVD each time you have a new ISO image to play with? This guide should help you create a bootable USB flash drive from the linux terminal without using any third-party applications. Rinse and repeat as needed and you won't have stacks of shiny plastic masquerading as coasters sitting all over the house.
All of this can be achieved using the 'dd' command, which I specifically did not use. Why? Couple reasons:
- * These steps are fairly dangerous to begin with but 'dd' is even more dangerous as it's command options are not only cryptic but highly similar.
- * These steps leave you with 'free space' on the USB stick. Do copy your .bashrc and any other files that make your life easier to the USB stick so you have them immediately after the USB boots.
WARNING!: If you don't know what you're doing, or you make a typo, you can easily FUBAR your computer.
DISCLAIMER!: While the author has successfully followed the steps given, the author, and Internet Design Alliance, are not liable, directly or indirectly, for any damages, losses, or impairments you receive related to the completeness, accuracy, or timeliness of any information contained on this site.
Now that the legal crap is over with, if you get stumped or have a situation this doesn't cover add a comment or send me an email through the contact form above. I tried to cover everything I hit along the way, but I'm sure there are other speed bumps out there...
Best,
Michael
Commands
Most of the steps are fairly self evident. References at the end can give you greater details for related items. If you encounter errors see Problem Children. If that that doesn't help, use your search-fu and add what worked for you in a comment so I can give you link joy.
Conventions and Definitions
This is all command line. I usually have at least two shells open at a time, one for root and one for user commands.
- * For sections labeled {root} perform those actions as root or use sudo. [1]
- * For sections labeled {user} perform those actions as yourself.
[1] For those distributions that kill off access to root, you can use 'sudo -i' to open a root prompt.
You should be able to copy Instructions to a text document and then find & replace all the 'Items named below' with your values (ymmv).
Items named below | What it is |
---|---|
/media/iso-mx-18.1/ | Place you're mounting the ISO image (read only) |
/home/michael/Downloads/transmission/MX-18.1_x64.iso | The ISO image file |
/media/michael/CENTON_USB | Place auto mount has mounted the USB stick |
/dev/sdb1 | Device name your system has given to the filesystem on your USB stick. Note the "1"! |
/media/michael/CENTON_USB/boot/isolinux | Where the isolinux directory has been placed by the ISO builder |
Instructions
Shove the USB stick into your computer and let it auto mount. If it won't auto mount then follow the commands in the Reference link. Back up any files you have on it. Then we need to verify that your USB stick is formated as FAT 32. Most are, surprisingly the one I grabbed out of the bin was ext2.
{user}
lsblk
Find where your USB "filesystem" is mounted to determine what the device name is.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 1 15G 0 disk --sdb1 8:17 1 15G 0 part /media/michael/CENTON_USB
The SIZE should tell you which one is your USB and TYPE labeled 'part' should tell you which is the filesystem on the USB.
{user}
findmnt /dev/sdb1
Does "FSTYPE' show up as "vfat"? If not then do section "USB not already FAT 32?" before proceeding.
{root}
mkdir /media/iso-mx-18.1/
mount -t iso9660 -o loop /home/michael/Downloads/transmission/MX-18.1_x64.iso /media/iso-mx-18.1/
{user}
cp -a /media/iso-mx-18.1/. /media/michael/CENTON_USB
Coping files can take some time, more coffee anyone?
{root}
syslinux -s /dev/sdb1
{user}
cd /media/michael/CENTON_USB
Now find if you have both the isolinux and syslinux directories. Most of the time it's like the first entry, but it depends on the ISO builder and mine happened to be like the second one:
- /media/michael/CENTON_USB/isolinux
- /media/michael/CENTON_USB/syslinux
- /media/michael/CENTON_USB/boot/isolinux
- /media/michael/CENTON_USB/boot/syslinux
If you have both, you should be good to go and can finish with:
- * Open up a file manager and copy your .bashrc and all your other 'nice to have' files to the USB.
- * Check your desktop for the USB drive icon. Right click on it and select Unmount and/or Safely Remove as available.
- * As needed change the boot order in BIOS to allow booting from a USB drive.
- * Boot from USB...
Don't have a syslinux directory? Or the USB stick didn't boot?
You'll need to copy the isolinux directory to syslinux and rename the .cfg and .bin files, which truthfully is easiest to do in a file manager, but here's the commands.
{user}
mkdir -p /media/michael/CENTON_USB/boot/isolinux
cp -a /media/michael/CENTON_USB/boot/isolinux. /media/michael/CENTON_USB/boot/syslinux
cd /media/michael/CENTON_USB/boot/isolinux
mv isolinux.cfg syslinux.cfg
mv isolinux.bin syslinux.bin
Okay, now try the finishing steps...
Problem Children
USB not already FAT 32?
This will most likely change your USB auto mounting point, so make sure to take note of that.
{root}
umount /dev/sdb1
Did you get the message?
umount: /media/michael/CENTON_USB: device is busy.
Change the directory of each shell session (and file manager) that is sitting on the path /media/michael/CENTON_USB to something else. Going up one level by 'cd ..' to get to /media/michael is usually the easiest. Then repeat the umount command. Once umount completes (e.g. gives no message at all) do the next command.
{root}
mkdosfs -F 32 -I /dev/sdb1
- * Check your desktop for the USB drive icon. Right click on it and select Unmount and/or Safely Remove as available.
- * Remove the USB stick from the computer
- * Wait a bit (Get more coffee, go to the bathroom, whatever...)
- * Stick the USB stick back into your computer and let it auto mount again.
{user}
lsblk
Check if "sdb1" has changed and note the NEW auto mount point. In my case /media/michael/CENTON_USB became /media/michael/8714-CEEC . Redo your find & replace and go back to where you where in the main Instructions.
Missing Software (command not found)?
This is for Debian derivatives, you'll need to track down your own otherwise.
{root}
apt-get install syslinux mtools
apt-get install dosfstools
References
How to mount/access a usb flash drive from the terminal?
Creating a bootable Ubuntu USB flash drive from terminal
https://askubuntu.com/a/376430
How To Find The Mounted Filesystem Type In Linux
https://www.ostechnix.com/how-to-find-the-mounted-filesystem-type-in-linux/
How to format a usb drive with FAT32 file system on Linux
https://www.garron.me/en/go2linux/format-usb-drive-fat32-file-system-ubuntu-linux.html
Add new comment