I'd use a USB SATA adapter and dd.
You'll have to shrink the ~500GB HDD partition down to something smaller than the SSD's (smaller the partition, faster the overall copy - in your case, I'd make it 55GB), clone it (partition map/MBR/partition contents), then grow the SSDs partition to the max (Gparted has always worked perfectly for this task - and may also support cloning (haven't tried it, but I prefer to use dd as it's as low level as you can get)). Don't forget to set the boot flag.
Once complete, the contents on both drives should be identical.
dd block size will determine overall speed/time to complete. Today's hard disks can easily support 10s of MB/s transfers.
But first, if there is any important info on the drive at present, back it up!
I forgot one thing: sfdisk would need to be used before dd to clone the partition table.
I haven't done this for a while, but someone sent me these steps which I followed last time I upgraded a hard drive:
# Create a USB Linux boot disk. Boot from it. Open Terminal.
# Examine the drives layout
# (confirm that kernel has detected hard drives) and list the partitions.
# If the command is available:
hdparm -I /dev/sda
# will show you detailed info of /dev/sda
# sfdisk is a tool to back up partition tables (see man page)
sfdisk -d /dev/hda > hda.out
# Then to restore
sfdisk /dev/hda < hda.out
# So if you wanted to copy the partition table from /dev/sda to /dev/sdb
sfdisk -d /dev/sda | sfdisk /dev/sdb
# Assume sda is source, and sdb is target:
# Copy the MBR
dd if=/dev/sda of=/dev/sdb bs=512 count=1
fdisk -l /dev/sda
# Edit first partition to make sure they start at same sector, and is the size you want, then
# make sure you mark first partition bootable!
dd if=/dev/sda1 of=/dev/sdb2
# Should do the trick. (dcfldd provides is the same program but provides you with nice progress indicator)
# Could use those other options you specified if you like. If you have a failing disk, use dd_rescue..
# I prefer 512 as I seem to recall this is the standard access unit size (or whatever the term is) for hard drives.
# might want to boot new HDD to see if you can see windows, then reboot into linux and then do
- For the last step, I used GParted (to grow the partition and set the boot flag)
- Block size hasn't been defined above. I think in the past I used 1MB, or even 10MB
I suggest you study each of the commands used above before proceeding!