Found a nice post on how to transfer Windows to a new drive using Linux here:
http://www.nilbus.com/linux/disk-copy
Your mileage may vary but it is simple as:
1> Using fdisk -u /dev/sdX  (X=new drive), make an exact partition setup on the new drive as the original
The -u command allows to size the new drive exact as the old – this is important for step #3 #4
2> Then copy the old drives MBR data to the new drive using the command:
dd if=/dev/sdb of=/dev/sda bs=446 count=1
Note: /dev/sdb is the original drive    &    /dev/sda is the new drive { VERY IMPORTANT!! }
3> Then copy the contents from the original drive to the new drive
dd if=/dev/sdb1 of=/dev/sda1 bs=4096
Note: /dev/sdb1 is the original drive    &    /dev/sda1 is the new drive { VERY IMPORTANT!! }
Also note that this will take a lot of time (depending on how large your drive is), in a new termial run the “top” command (by itself) to see if the dd is taking up CPU cycles and ensure it is not hung). For example, a 100GB drive will take ~90 min with fast drives and a fast system!
4>Â Then resize the new drive with Gparted or qtparted or parted or via ntfsresize
ntfsrezize -f -v /dev/sda1
5>Â When you first boot your new drive allow the check disk to run and then allow the system to reboot and then reboot one more time for good measure.
6> When get into Windows, Windows will see the new drive load drivers and then ask to reboot once more. When done you’re complete.
This worked great for what I needed. Here I traded out an older 120GB drive (PATA) into a new 320GB SATA drive with little fan fair.
Your mileage may vary; but, follow the instructions and observe the command notes and you’ll be fine.
Enjoy!
~Jim