You just downloaded a Fedora ISO on your Mac
You plugged in a USB stick. You need that stick to boot a bare-metal machine or a virtual environment. The process looks straightforward until you realize macOS does not treat disk images like simple files. Write to the wrong identifier and you overwrite your internal SSD. Skip the unmount step and the write fails halfway through. Get the block size wrong and the transfer crawls. This guide walks through the exact commands and tools to turn that ISO into a reliable boot medium without guessing.
What is actually happening
A bootable USB drive is not a folder containing an ISO file. It is a raw block device that mirrors the exact byte layout of the source image. The ISO contains a partition table, a boot sector, an EFI system partition, and a root filesystem. When you write it to a USB stick, you are replacing the stick existing partition table and filesystem with the image structure.
macOS manages disks through diskutil, which abstracts the raw hardware behind volume mounts. The dd command bypasses that abstraction and writes directly to the hardware. Fedora Media Writer handles the abstraction, verification, and writing in a single graphical flow. Both paths achieve the same result. The difference is control versus convenience.
Understanding the raw write process matters because Linux bootloaders expect specific sector alignment and partition flags. A corrupted write leaves the EFI firmware unable to locate the boot manager. The system hangs or falls back to the internal drive. Treat the USB stick as a blank canvas. Every byte you write becomes part of the boot chain.
Verify the source image before you touch the hardware. A corrupted download produces a corrupted USB stick. Fedora publishes SHA-256 checksums for every release. The N-2 release goes EOL when N+1 ships, so always grab the checksum from the current release page. Plan your ISO downloads around that six-month cadence.
The fix or how-to
Start by identifying the exact disk identifier for your USB stick. macOS assigns identifiers sequentially. Your internal drive is usually disk0. External drives appear as disk1, disk2, or higher. Run the disk listing command to see the layout.
diskutil list
# WHY: Shows all connected storage devices, their partitions, and mount points.
# WHY: Look for the external drive by matching the size and partition scheme.
# WHY: Note the top-level identifier like /dev/disk2, not the partition like disk2s1.
Match the size in the output to your USB stick. If you have multiple external drives, unplug the USB stick, run the command again, plug it back in, and run it a third time. The newly appeared identifier is your target. Record it exactly. A single digit error targets the wrong drive.
Next, unmount the filesystem on the USB stick. Unmounting detaches the volume from the macOS file system hierarchy. It does not eject the hardware. The drive remains powered and accessible to low-level tools like dd. Ejecting the drive at this stage would cause the write command to fail with a device busy error.
diskutil unmountDisk /dev/disk2
# WHY: Detaches the volume so macOS does not lock the device for writing.
# WHY: Leaves the hardware connected and ready for raw block access.
# WHY: Replace disk2 with the identifier you recorded in the previous step.
Now write the ISO image to the raw disk. macOS provides two device paths for each physical drive. The /dev/diskN path uses buffered block I/O. The /dev/rdiskN path uses raw I/O. Raw I/O skips the kernel buffer cache and writes directly to the hardware. This makes the transfer significantly faster for large files like ISO images. Use the sudo prefix because writing to block devices requires root privileges.
sudo dd if=/path/to/Fedora-Workstation-Live-x86_64-41-1.4.iso \
of=/dev/rdisk2 \
bs=4m \
status=progress
# WHY: sudo grants the necessary permissions to write to the raw block device.
# WHY: if specifies the input file, which is your downloaded ISO image.
# WHY: of specifies the output device, using the raw rdisk path for speed.
# WHY: bs=4m sets the block size to four megabytes, optimizing throughput.
# WHY: status=progress prints periodic transfer statistics so you can track completion.
The command produces no output until it finishes, unless you include status=progress. When the transfer completes, dd prints the number of records in and out. macOS will likely display a dialog stating the disk is not readable. This is expected. The USB stick now contains a Linux filesystem that macOS cannot mount natively. Click Eject in the dialog. Do not click Initialize or Erase. Initializing reformats the drive and destroys the bootable structure you just wrote.
Run diskutil unmountDisk before every write. macOS locks mounted volumes aggressively.
Verify it worked
Verification happens in two stages. First, verify the ISO file before writing it. Second, verify the USB stick after writing. Both steps prevent wasted time troubleshooting a broken boot medium.
Check the ISO checksum against the official value published on the Fedora download page. macOS ships with shasum, which supports SHA-256 hashing.
shasum -a 256 Fedora-Workstation-Live-x86_64-41-1.4.iso
# WHY: Computes the SHA-256 cryptographic hash of the downloaded ISO file.
# WHY: Compare the resulting string to the checksum listed on the official download page.
# WHY: A mismatch means the file is incomplete or corrupted. Redownload before writing.
After writing, verify the USB stick contains the expected partitions. Run the disk utility info command to inspect the new layout.
diskutil info /dev/disk2
# WHY: Displays the partition map, filesystem type, and mount status of the target drive.
# WHY: Look for a GPT partition map and an EFI system partition.
# WHY: The volume will show as unmounted, which is correct for a Linux boot medium.
The definitive test is booting the target machine. Insert the USB stick, power on the computer, and interrupt the default boot sequence. On Intel Macs, hold the Option key immediately after the chime. On Apple Silicon Macs, hold the power button until the startup manager appears. On Windows or Linux machines, press the manufacturer boot menu key, usually F12, F10, or Esc. Select the USB drive. The Fedora boot menu should appear within seconds.
Boot the machine with the drive already inserted. Firmware scans for bootable devices during the initial power-on self-test, not after the OS has loaded.
Common pitfalls and what the error looks like
The most common failure is targeting the wrong disk identifier. dd does not ask for confirmation. It writes exactly what you tell it to write. If you accidentally use disk0, your internal drive gets overwritten. The system becomes unbootable. Always verify the size and partition count before running the write command.
Another frequent issue is skipping the unmount step. macOS locks mounted volumes to prevent data corruption. If you run dd against a mounted volume, the command fails immediately with a permission denied or device busy error.
dd: /dev/rdisk2: Resource busy
This error means the volume is still attached to the macOS file system. Run diskutil unmountDisk again and retry.
Some users report the USB stick appearing empty or unbootable after the process. This usually happens when the ISO was downloaded with a browser that appended .download or .part to the filename, or when the checksum verification was skipped. A corrupted ISO writes a corrupted partition table. The bootloader cannot find the kernel or initramfs. The system hangs at a grub rescue> prompt or fails to hand off to the EFI firmware.
macOS also caches disk information aggressively. If the USB stick does not appear in the boot menu, restart the target machine with the drive already inserted. The firmware scans for bootable devices during the initial power-on self-test, not after the OS has loaded.
If the boot menu is gone, GRUB rescue is your friend, not your enemy. Type ls to list partitions, then ls (hd0,gpt1)/ to inspect filesystems until you find the boot directory. Point GRUB to the correct vmlinuz and initrd.img files to complete the boot.
Convention aside: journalctl -xe reads better than journalctl alone. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu <unit> muscle-memory style. Keep that habit when you finally install Fedora and need to debug a service that fails to start.
When to use this vs alternatives
Use Fedora Media Writer when you want a guided process that handles downloading, checksum verification, and writing without opening a terminal. Use the dd command when you need precise control over the write process, want to script the operation, or are working on a system without a graphical environment. Use diskutil eraseDisk only when you are completely wiping a drive and do not care about preserving the existing partition table. Stay with the raw dd method for bootable Linux images. It preserves the exact byte layout required by the bootloader.
Trust the package manager. Manual file edits drift, snapshots stay.