ext2 or ext3 filesystems only, but this might help someone. Let's assume your Fedora installation has only a root and swap partition, but these instructions can be modified for other uses.
What you need:
- A target hard drive that's at least as big as the source drive
- Fedora rescue disk - the later the better
- A bootable g4l CD - you can download the iso from http://sourceforge.net/projects/g4l
- Patience and the ability to follow instructions
Okay, here we go...
1. Here's the obligatory 'back up everything' step. The #1 rule of geek professionalism is to never go somewhere you can't get back from. I know, my grammar sucks but it's still true.
2. Insure your system's BIOS is set to boot from CD-ROM first.
3. Power down the system and hook up the new hard drive. Leave the existing hard drive in place.
4. Boot from the g4l CD. At the boot: prompt, type g4l. When you get to a shell prompt, type ./g4l
5. Clone the old drive to the new one in RAW mode using the 'click and clone' thing in g4l. Make DAMN sure you have the source and target drives right otherwise you'll overwrite your Linux installation with a blank hard drive and that would truly suck.
6. Power down the machine and remove the old hard drive from the system. Put it on a shelf so you can put stuff back the way it was if you get stuck or get interrupted or the power goes out or your cat or kid reboots your machine in the middle of the rest of the operation.
(For the rest of this howto we're gonna assume that your Linux partition is /dev/hda1 and your swap partition is /dev/hda2 - you may need to modify this stuff for your own needs.)
7. Boot from the Fedora rescue CD. Do *not* mount the filesystem when prompted - select 'Skip' instead.
8. Check the partition for errors. e2fsck -f /dev/hda1
9. Run parted. Move the swap partition to the very end of the hard drive. Exit parted.
10. Check the partition again. e2fsck -f /dev/hda1
11. Now here's the scary part. Assuming that your Linux partition is /dev/hda1 - run fdisk. Make sure you know where the start block for your Linux partition is - if it's the first partition on the hard drive normally this will be block 1. Write it down. Then delete the partition.
12. Still in fdisk, create a new primary partition with the same number as the one you just deleted and *insure* the start block is the same one as the partition you just deleted. Let the new partition take up all the remaining disk space. Write changes to the disk and exit fdisk.
13. Check the partition one more time. e2fsck -f /dev/hda1
14. Now what you've got is all the data on the proper size partition but the filesystem size hasn't changed. We fix that with resize2fs -f /dev/hda1
15. All done. Reboot. Enjoy
I've never had to reinstall grub using this method, but it'd be good to know how to do that just in case.
One more thing. If you decide to put the old hard drive back in be sure that if /etc/fstab and /boot/grub/device.map think you're booting off the first hard drive that you actually make sure the hard drive you just set up *is* the first hard drive in the system