Well you can do it with linux. Providing it's a file format that Linux can deal with you can use the cp command.
I've done it to move linux installs from one place to another. It's easiest when the computer is down and your using a boot cd of course, because then you don't have to aviod directorie like /tmp /proc that have information about the proccess your using to copy.
You partition and format the drive and all that. Say your first HD is setup as the primary master and the second harddrive is setup as the secondary master (and all your information is on the first partition of both drives) and your using a boot cd or whatnot you can go like this:
mount /dev/hda1 /mnt/harddrive1
mount /dev/hdc1 /mnt/harddrive2
cp -dpR /mnt/harddrive1/* /mnt/harddrive2
That probably wouldn't work with Windows stuff. NTFS isn't supported well and the permissions for Fat32 may get Fubared. Also MS may have some special files setup that may cause it not to work.
That would work great for just data files, except for NTFS stuff.
The second way that people use is the dd command, which does the samething that ghost does, just minus all the fancy stuff.
If both harddrives are the same size, or the second drive is bigger and you can take parted or partition magic to resize the partitions later on you can go:
dd if=/dev/hda of=/dev/hdc
And that will mirror the information from drive 1 to drive 2. (in linux the names are /dev/hda = primary master, /dev/hdb = primary slave, /dev/hdc = secondary master, and /dev/hdd = secondary slave. Partitions are the number of the partition added onto the name of the harddrive. So that /dev/hdc3 would be the third partition on the secondary master IDE device. CDROMS and such will also use the /dev/hd# type stuff most of the time if they are IDE based (and not under SCSI emulation), but they don't have partitions)
The advantage to that command is that it will save the entire drive. Including MBR, so that if the first drive was bootable the second drive would be too.
If you just want the info on the partition, then make a partition on the second drive as close to the same size (maybe a bit bigger) as the partition you want to save. Then you would go like this:
dd if=/dev/hda1 of=/dev/hdc1
That won't save the MBR or anything like that, but you can copy stuff from the first partition and stick it into the second or third partition or whatever on the second harddrive.
DD rocks.
Of course all this will make more sense if you understand some linux basics. But this is pretty much what ghost does on a basic level. You can even make drive images if you'd like. like this:
dd if=/dev/hda of=driveimage.img
or cdrom images like this:
dd if=/dev/hdb of=cdrom.iso
Which you can go and burn to any CD "as a iso image" in Linux and in Windows.