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:
dd if=/dev/zero of=/dev/sdx
dd if=/dev/zero of=/dev/diskx
diskutil zeroDisk /dev/diskx
diskx is the target disk. Usually,
disk0 is the first disk, containing the main OS, etc. (i.e. SCSI/SATA Disk A), followed by
disk2, and so on.
If you have one internal disk (
/dev/disk0), and you connect an external drive via USB; the external drive will be
/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
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:
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:
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:
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