dd should do what you're looking for - dd reads raw data from one source and writes it to the other. Simple.
dd if=/dev/sda of=/dev/sdb bs=32M
This command would make an exact copy of the input file /dev/sda and write it to the output file /dev/sdb, provided that /dev/sdb is large enough to contain all of /dev/sda's data. This will copy absolutely everything, including the bootloader and partition tables, so you won't have to re-install the bootloader or anything like that - both hard disks will be exact copies of each other. Be very careful with this command, though. One small typo and you could destroy data.