OErjan:
Many thanks for your reply. It was very useful.

Your suggestion to clone the whole of hda is a good idea, to catch any corruption of the MBR and partition table. My idea to copy only hda2 would not do that. For sure I will also follow your advice about flushing the USB drive cache.

I understand the reasons for not using LINUX to write to an NTFS filesystem but I was not planning to do this. Let me explain my idea better and you can tell me if it will work or if there are other problems that I have not identified yet.

If I do as you suggest and make sda1 as an ext3 filesystem. I can execute:

dd if=/dev/hda of=/mnt/sda1/backup.img

but this gives me no way to access the files inside this image from Windows - I do think the 'read ext3 files' utilities you mention can 'mount' an image of a filesystem or an image of a volume in the same way that LINUX can.

So my idea is to execute:

dd /dev/hda2 of=/dev/sda1

[I said before "of=/mnt/sda1" but I think that is wrong: I don't want sda1 as a filesystem]

Notice that this is a dd between two devices, not a dd from a device to a mounted filesystem - the dd command knows nothing about NTFS and is just copying the 'raw' data, so if /dev/hda2 did contain a Windows-written NTFS filesystem, then /dev/sda2 will become the same. I should be able to see it in Windows as a clone of C: and this will be a way to be sure the backup is good (but see later below).

For the restore I think I just need to execute:

dd if=/dev/sda1 of=/dev/hda2

Question 1: Is this OK or have I missed something?

Question 2 is about the partition sizing. Your method copies the hda device to a file. I guess this file will have exactly the correct size so the restore will copy the file back to hda with exactly the correct size, but in my method I am not sure how the size of the source and destination partitions should be set. I can guess that if the source partition is smaller than the destination, the dd command will succeed in
the backup operation (leaving some unwritten space at the end) but in this case the source partition of the restore operation will be bigger than the destination. Will dd truncate the source (which will be safe in this case if I had made sda1 larger than hda2) or overwrite beyond the end of the destination partition (which may corrupt the next partition)? The best idea would be to make sda1 EXACTLY the same size as hda2, but I do not know how to do this yet. The documentation for fdisk is not good. Maybe I use Windows to format sda1 and cross-check it did the right thing by physical inspection of the partition tables of both drives. Do you have any suggestions about this?

My idea does not back-up/restore the MBR and partition table but I am sure that's an easy job by itself. For a restore operation I can try restoring the MBR/partition table first and if I am lucky there may be no need for the full restore!

Question 3 is about how to test the back-up to be confident that the restore will work if I ever need it (but without actually making the restore over a working OS!). I will be able to see sda1 as E: or F: in Windows of course, but I do not think that will be enough to prove that it will boot if/when I copy it back to C:. Maybe I can add an extra operating system to BOOT.INI (in C:\) which will boot into the backup at sda1. To test the backup I can select it at boot time but still be able to return to the original if it didn't work. Will XP run from a USB drive or will it think it is a pirated copy?

Please tell me if you see any problems with my ideas. LINUX/Knoppix is very new to me but I am ready to learn.

Peter