If disk sizes are different, which they almost always are, AFAIK dd doesn't quite hack it, otherwise I would have just booted off a Ubuntu live CD and done that.
If the new volume is smaller (which it almost always is when switching to a SSD), you'd need to shrink the filesystem before you block-copied it with dd.
Indeed. Without this, though, I think his system still would have booted. Incremental progress is certainly better than wasting two days pressing buttons in a GUI, at least IMHO. (Once the system boots, you can worry about using the extra bits on the disk.)
You don't usually migrate between volumes of the same size. If the new one is bigger, you've now got unused space on the end. If the old one was bigger, you've now just fucked your filesystem -- not only will the metadata about the volume size be wrong, but all the inodes stored in blocks past the end of the new disk will be missing.
It's trivial to folks familiar with nix-a-likes but for others it is too unlike the abstractions they're used to for it to be entertained as anything other than some sort of bizarre incantation.
What about dd if=/dev/old-disk of=/dev/new-disk bs=16M ?