Think it is much easier if you have a linux machine, but a Live CD will do. I have been cloning my install to a variety of SD cards for benchmarking and am pretty much in a groove as follows:
Take new SD card - usually formatted as 1 DOS partition
Use fdisk to check the start sector (on the assumption the manufacturer aligns the partition with erase block sizes) - has been 8192 sectors for 8GB Sandisk cards)
Use YaST (the main toolbox utility that comes with my SuSE desktop linux) to shrink the 1st partition to about 50MB
Back to fdisk to create second partition with start sector on an erase block boundary (
all of this cribbed from Terje's blog!)
Format the new partition
Copy the DOS partition from old card to new card - can be done on any machine
In linux mount both old and new cards - check in /media what they are called but for this example assume they are newcard and oldcard
The magic copy command is
rsync -axvS /media/oldcard /media/newcard
Yup I don't bother formatting a swap partition. I do add a swapfile once the card is running and can be done on the Pi itself, all done as root
dd if=dev/zero of=/swapfile bs=1024 count=262144
creates a 256MB file
mkswap /swapfile
chown root:root /swapfile
chmod 0600 /swapfile
swapon /swapfile
edit /etc/fstab so the swap line looks like
/swapfile none swap sw 0 0