Move smaller hard drive to partition on a larger hard drive
Solution 1:
Moving your Windows XP installation is actually quite simple. To move your Windows image, I would recommend checking out DriveImage XML.
DriveImage XML can make a live, working copy of your Windows drive from inside Windows, and then restore it to the new drive.
To make the new hard drive bootable, you'll need to follow these steps from DriveImage's FAQ:
Q. How do I restore an image back to a working state?
A. Note that you must put the image into an existing partition. If necessary create a new partition with Windows Disk Management first. You do not need to format the drive. The size of the partition you create will determine the size of the drive - for example if you create a 20GB partition and then restore a 10GB size image to it, the size of the drive will still be 20GB.
To start Windows Disk Management click:
Start>Control Panel>Administrative Tools>Computer Management>Disk Management
If Windows Disk Management does not start, you can use the following commands from the command prompt:
net start dmserver
net start dmadmin
diskpart
To restore an image to an existing partition, click Restore in the main program window.
Note on boot drives: If you want your computer to boot from the new partition you must set it to "active" with Windows Disk Management.
Once you have your new drive with a working copy of Windows, you can resize the partition and add a new partition to it for Ubuntu.
If you're familiar with working with LiveCDs and Linux, you may want to take a look at my answer here involving Clonezilla.
Solution 2:
use dump (linux) and windows boot tools