How should I format a USB prior to writing an ISO to it?

Writing to the device (/dev/sdX) instead of to a file system (/mount/point) deletes the file system on the device anyway so there's no need for mkfs before.

There is also no need to erase data in the non-written area. It is not visible anyway. Linux file systems can without problems be smaller than the block device they live on.


The dd command overwrites everything on the USB device. No preparaton is required.


You don't need to erase the old data first. But you can if you want to. Sometimes it's a good idea. Particularly if you're giving it to someone.

This should do the trick:

Linux:

dd if=/dev/zero of=/dev/sdx

Macintosh:

dd if=/dev/zero of=/dev/diskx
diskutil zeroDisk /dev/diskx

Where sdx or diskx is the target disk. Usually, sda/disk0 is the first disk, containing the main OS, etc. (i.e. SCSI/SATA Disk A), followed by sdb/disk1, sdc/disk2, and so on.
If you have one internal disk (/dev/sda or /dev/disk0), and you connect an external drive via USB; the external drive will be /dev/sdb or /dev/disk1. You get the idea. SD cards are designated names like /dev/mmcblk0 and so on, in a similar fashion.

Some refer to this as zeroing or low-level formatting. The pseudo-file /dev/zero can be thought of as being similar to /dev/null; but designed to be read from, rather than written to. It will supply a steady stream of ASCII NUL (0x00) bytes to whatever process tries to read from it.

The original filesystem will be overwritten.


Some additional options that people commonly like to use with dd, to manipulate block size & data read/write speeds follow the syntax:

bs=512kB count=1 

Also, I personally like to have a running status/progress report so I can tell what's going on; to do this, just add the following to the tail end of the command:

status=progress

Take care to specify the correct disk. Especially if copying/pasting commands like this directly into a shell. It takes milliseconds to bork the wrong partition table. To list your storage devices, begin with:

Linux:

lsblk

Macintosh:

diskutil list

The output will look something like this:

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            499.4 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3