Recently I upgraded my macbook its SSD drive for a bigger version. Since I wanted to start with a fresh OS X copy, I decided not to use the Migration Assistant but rather just manually copy over the home folders (like Documents, Pictures etc).
I want to re-use the old, smaller SSD, but there might be some files which I forgot to copy. So what I was looking for, is a way to create a disk image like I'm used to when running Linux.
Below, the procedure is documented. It's probably wise to stick nice -n 20 before the commands dd and cat, so normal desktop usage is not bothered by the I/O, but for clarity, I've removed it.
First, connect your USB drive and type mount to show which drive got connected:
$ mount /dev/disk0s2 on / (hfs, local, journaled) devfs on /dev (devfs, local, nobrowse) /dev/disk1s2 on /Volumes/storage (hfs, local, journaled) map -hosts on /net (autofs, nosuid, automounted, nobrowse) map auto_home on /home (autofs, automounted, nobrowse) /dev/disk2s2 on /Volumes/MacSSD (hfs, local, nodev, nosuid, journaled, noowners)
In this case, the last line shows that /dev/disk2 is the device we need, and partition 2 contains an HFS-formatted partition (or volume, in OS X speak). You can zoom in on this disk with the command diskutil list and show all partitions of all disks.
Since OS X automatically mounts volumes that a user attaches, we can now change to the directory where it's mounted, and zero the empty space:
$ cd /Volumes/MacSSD $ cat /dev/zero > zero.file;rm zero.file
We'll now unmount the volume so we can make a copy of the whole partition (instead of the contents of the volume):
$ cd $ hdiutil detach /dev/disk2s2
Now, we can make a literal copy of this partition:
$ dd if=/dev/disk2s2 of=MacSSD.hfs bs=1m
Over USB, this could take a loooong time, though. After that, compress the image with:
$ gzip MacSSD.hfs
Now it's safe to move this file somewhere else. If you want, you can encrypt the file before doing so.