It's not the fastest way as it copies at the block level i.e. copies the lot, even empty space, but dd is a simple way to do it. Given sda is old HDD, and sdb is new one:
Code:
dd if=/dev/sda of=/dev/sdb bs=1M
You can do this from a LiveCD, just be very sure you know which drive is which, you can use fdisk -l to list partitions currently on any connected drives. Reversing the order will clone the blank drive to the old one, overwriting anything on it. But you have backups anyway, right?
After cloning, you will have a big chunk of empty space so you can either create another partition or expand an existing one with something like GParted. You can expand any partitions but you're more likely to have problems with any but the last partition on the drive and expanding any before that would involve moving other partitions, plus moving partitions is slow.