You could simply use the tar command or cp -a to copy the files.
For example: suppose you create a 45 GB partition for /usr, and mount it temporarily on /mnt/usr, and you create a 150GB partition for home and mount it on /mnt/home.
tar -C / cf - /usr /home /var /bin /sbin /boot /etc /lib /lib64 | tar -C /mnt -xf -
The system directories that have partition will be filled in their respective filesystems. The system directories that aren't mountpoint will have directories created in their place.
The /usr & /home partitions will be the largest. The /usr partition will grow as you install new packages. Having dedicated partitions for /home as you have done already would make sense. A separate /boot partition might be a good idea as well. It is small and easy to back up. A 60 MB /boot partition could be imaged and restored easily if you have problems booting later. Make an image backup of your new MBR as well for insurance.
If you use ACLs then using cp may be better then using tar.
Don't bother copying /tmp, /sys, /dev, /media, /mnt or /proc. /sys & /proc are psuedo filesystems. The device nodes in /dev are created when you boot. If you have directories under /mnt/ to mount different filesystems, then use `mkdir' to recreate them.
The files in /tmp are temporary and copying them would be a waste of time.
Then use grub-install to make the new drive bootable. I'm assuming that you will be pulling the first HD. Check if UUID #'s are used in /boot/grub/menu.lst and /etc/fstab. If so, update them with values for the new locations. E.G. If the new disk has /home on the 3rd partition, you could run: `udevinfo -q env -n /mnt/home' or follow the /dev/disk/by-id/ path to the device.
Here is an example from /etc/fstab
Code:
/dev/disk/by-id/scsi-SATA_TOSHIBA_MK2049G_48CYT01OT-part3 /home ext3 acl,user_xattr 1 2
Here is an example from my laptop's menu.lst
Code:
title openSUSE 11.1 - 2.6.27.21-0.1
root (hd0,5)
kernel /boot/vmlinuz-2.6.27.21-0.1-default root=/dev/disk/by-id/ata-TOSHIBA_MK2049GSY_48CYT01OT-part6 resume=/dev/disk/by-id/ata-TOSHIBA_MK2049GSY_48CYT01OT-part5 splash=silent showopts vga=0x314
initrd /boot/initrd-2.6.27.21-0.1-default
Using the UUID or /disk/by-id/ will enable you to pull the first drive or add another on, and repartition and the entries will still be valid. The "root (hd0,5)" in this example would need to be changed however for grub to boot from the correct device.