Are you trying to make a complete duplicate of a Linux operating system, or just data from a drive?
To copy data only, you can use the dd command:
However you need to be careful about a few things:
1.) Using dd, "if" means "input file" and "of" means "output file", hence if you want to copy from say hda to sda your command "might" look something like:
dd if=/dev/hda of=/dev/sda
2.) You need to know that the available size of the output file destination exceeds the size of the input file source.
3.) You have to be root, or use sudo to accomplish this.
4.) Whatever is on /dev/sda will be erased in lieu of the newly copied file system from /dev/hda.
Another warning tip is long ago I made the choice to build a kernel and file system and then use dd to create exact copies of it, where I used the total amount of space on a compact flash card. Well it turns out that not all compact flash cards are the same even though they say they're 8 G, they're not, there are inconsistencies in the amount of data they can store, some can store more than others, and when I sourced my copy from a higher capacity flash and tried to copy to one that was within the 8G spec, but below the source, the copy failed and I didn't find that out until 10 minutes later when the dd was almost done, but failed. Since then I've done this via other means, not using dd at all.
If copying data, then use dd and follow the "make sure" tips above
If copying a Linux system, then it's a lot more involved, however repeatable and safer to develop a script to prepare your system copy.
Stated in steps, but not fully described, it would be like the following:
a. Partition your target drive - which also means removing any unwanted partitions.
b. Create file system(s) for each partition.
c. Install grub
d. Install your kernel
e. Copy over the RFS to your target drive
I can copy over a script I use, fairly large so I'll wait and see if the dd suggestion is best for your case.