This is what I do to copy from an old HD to a new HD and it works.
1) Remove your old HD and set the new one as master
2) Fdisk it as if you were setting up a primary drive (set active partition, etc.)
3) Format the drive, making sure your active partition has the system files on it.
4) Powerdown make your old HD the bootable drive and the new drive as a secondary master or slave .
5) Disable your virtual memory and restart
6) when windows reboots you may get errors on not enough memory, unload as many TSR's as you can get away with to increase memory.
7) Go to Windows Explorer (File Manager), select all, copy and paste to the new hard drive.
8) When it asks if it's ok to over write io.sys say NO, for msdos.sys say YES
9) Powerdown and swap the HD's again, so the new HD is the bootable drive
10) When windows restarts re-enable virtual memory and reboot
11) transfer complete
OOPS!! forgot, make sure that Windows Explorer can see ALL FILES.
Of course this only works with win9X and earlier systems, you'll have to use a third party tool to do NT and 2K.