You have not described the way you clone the disk but I increasingly come to the conclusion that you are cloning the whole disk. That will be consistent with getting repeatedly the error of "No Space Left on the Device".
If you have a source disk bigger than a target disk you must clone partition by partition.
To explain I paste the hard disk information you reported in Post #43 below
Code:
"Disk /dev/sda: 80.0 GB, 80000000000 bytes
255 heads, 63 sectors/track, 9726 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 6 48163+ de Dell Utility
/dev/sda2 * 7 3830 30716280 7 HPFS/NTFS
Disk /dev/sdb: 40.0 GB, 40000000000 bytes
255 heads, 63 sectors/track, 4863 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table"
It is very simple. If you clone the large source sda, which has 9726 cylinders, into a small target sdb which has 4863 cylinders dd will start from the 1 cylinder and run it to the end of the 9726 cylinder but finds the target has "No Space Left on the Device" after successfully clone the first 4863 cylinder over. You are effectively pouring gasoline from a 10-gallon container into a 5-gallon container. Of course it cannot work.
The resulting target disk cannot be read either because in its partition table, which was cloned as the very first sector, it is stated there are 9726 cylinders (because it is from the partition table of sda) whereas the physical number of cylinders of sdb is only 4836. Would this not cause the system to report "Disk /dev/sdb doesn't contain a valid partition table"? Any operating system on receiving such disk will not know what to do and so is forced to treat it as a raw disk (empty) if it is asked to make use this disk.
The whole process isn't complicated at all and you can reason it out.
To get successful result you should partition sdb by duplicate the partition boundary, to the exact cylinder number, of sda1 and sda2 onto sdb1 and sdb2 using cfdisk program, write the partition table and reboot the machine.
When you clone sda1 then dd can start from cylinder 1 and terminate at cylinder 6 because that is the starting and finishing point of both sda1 and sdb1. Similarly you do the same for sda2. The information will be read from cylinder 7 to 7830 of sda and transferred to the exact position in sdb. You should realise by now the scheme has to produce a mirror image of sda onto sdb and that is the reason why the cloned XP must boot because nothing has been altered.
All operating systems including XP do not check the spare hard disk capacity. On the first boot-up of xp it will detect the recorded hard disk ID no longer matches the cloned disk. As XP permit an upgrade of the hard disk it will amend the record and demand a reboot to finalize the change. XP will behave normally after the first reboot.