I have a 160GB drive which dual boots windows and Arch. The disk is nearly entirely full. I bought a 500GB hard disk. I'd like to preserve the original data on the drive, but allocate more size to certain partitions, so I don't think this exactly falls under the guise of "cloning" since the source and destination partition size will be different:

/dev/sda1 = ntfs 119Gb ------> /dev/sdb1 = ntfs 200Gb
/dev/sda2 = ext4 200Mb (/boot partition) --------> /dev/sdb2 = ext4 200MB (/boot partition)
/dev/sda3 = ext4 20GB (/ partition) -------------->/dev/sdb3 = ext 100Gb (/ partition)
/dev/sda4 (extended partition) ------------------>/dev/sdb4 (extended partition)
/dev/sda5 = ext4 5Gb (/home partition) ----------->/dev/sdb5 = ext4 165GB (/home partition)
/dev/sda6 = swap 4GB------------------------------->/dev/sdb6 = swap 4GB

Because the partition sizes are different between source and destination -- what is the best way to go about this? I don't believe I want to use the dd command rather than the cp -a command? I would mount the various partitions and then cp from one partition to the other. What do I do however about the bootloader -- specifically GRUB?

Am I off in left field here, or is there a better way?