What's the recommended process to create an exact duplicate (boot sector and all) of a hard drive? Is it really as simple as: cat /dev/hda > /dev/hdb
In answer to the question, I would partition the new drive, then use
dd if=/dev/<old-drive> of=/dev/<new-drive>
Which would overwrite the partition table, so why bother to partition the drive in the first place?
Anyhow, using dd is better solution than using cat. One dd option to check (which might speed up things) is bs=n. By default it is 512 (one disk block), so dd will read 512 bytes at a time. Using bs=8192 should make things faster (this way dd will read/write 16 disk blocks in single system call). Just make sure size of the disk is multiple of whatever you use for bs (otherwise you might get error on last read), and that argument for bs is multiple of 512 bytes (disk blocks are 512 bytes long).
I'm not sure how happy the system will be if disk geometries are not the same (if you simply copy partition table using dd). Try something along the lines "dd if=/dev/hda of=/dev/hdb count=1" (this will copy just the MBR, which contains partition table), and than "fdisk /dev/hdb". See if it will complain, and if partition sizes look right.
If not, partition the drive manually, and use dd to copy individual partitions instead (dd if=/dev/hda1 of=/dev/hdb1 bs=n)...
Warning: when you copy over MBR (effectively repartitioning the disk), the kernel will not be aware of the new partition table. This is because kernel will read it at startup and will chache it. Quick workaround is to do "fdisk /dev/hdb", and exit from it using "w" command. fdisk reads partition table from the disk (not from the kernel), and when it writes it out, it calls ioctl that instructs the kernel to reread it. After that, you should be able to test-mount new disk.
-- Aleksandar Milivojevic <amilivojevic@xxxxxx> Pollard Banknote Limited Systems Administrator 1499 Buffalo Place Tel: (204) 474-2323 ext 276 Winnipeg, MB R3T 1L7