linux ð§
Creating boot USB sticks/microcards on macOS
A real quick-and-dirty way.
#1: Get an operating system image
You gotta get a *.img
file somehow. Most distributions distribute them as compacted versions (tar, gzip, xz, etc.).
If all you've got is a *.iso
file, convert it to *.img
using hdiutil
:
hdiutil convert -format UDRW -o /output.img /path/to/your/file.iso
#2: Prepare your removable
Format your removable as FAT32.
#3: Now, find the physical address of your removable
Plug your removable into your macOS system and run:
diskutil list
You'll see something like this:
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *100.0 GB disk0
1: EFI EFI 79.0 MB disk0s1
2: Apple_CoreStorage HD 99.0 GB disk0s2
3: Apple_Boot Recovery HD 650.0 MB disk0s3
/dev/disk1 (internal, virtual):
#: TYPE NAME SIZE IDENTIFIER
0: Apple_HFS HD +98.0 GB disk1
Logical Volume on disk0s2
A1B2C3D4-E5F6-G7H8-J9K1-0L11M12N13P1
Unencrypted
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *2.0 GB disk2
1: DOS_FAT_32 SD 2.0 GB disk2s1
Now figure out which one is the physical address of your removable disk.
TL;DR: diskutil list
lists all your disks, both physical and virtual. You'll have to figure out which physical disk is your removable, but you can generally check it through the storage capacities (in the example, it's a microsd capable of 2GB storage).
#4: Copy the raw data to your disk
After identifying the physical address of your removable, run:
diskutil unmountDisk <your removable disk address>
According to the example above, it would be:
# diskutil unmountDisk /dev/disk2
Then use dd
to copy the contents your ``*.img` file into your disk:
sudo dd if=path/to/your/file.img if=<your-removable-disk> bs=1ms
Pro tip: Use GNU dd to get progress reporting
The dd
binary that ships in macOS does not report progress during its operations, but the GNU version of dd
does. In macOS, you can install it through the Homebrew package coreutils
(brew install coreutils
). The GNU dd will then be available in your $PATH
as gdd
(the coreutils package prefixes its binaries with a g
- god knows why).
With GNU dd
in place, you can run it just like you would do in dd
, with an additional option, status=progress
:
gdd if=./your-image.img of=/dev/disk2 status=progress bs=8388608
Note: the parameter
bs
of GNU dd seems to work only with a quantity of bytes and does not understand magnitude suffixes (eg:K
fo kylobyte,M
for megabyte, etc.), so you must inform a number with no suffixes. It defaults to512
, but you must inform your own. Since512
is very small, you can use1024
for read/write 1KB at a time,2048
for 2KB, etc. - I've been using8388608
(8MB) and it works well - though writing to a microsd imposes its own writing speeds.
Additional resources: