Hi. I usually do this:
0) *Backup all data* on the computer (not just on the partition you want to resize).
1) Run fdisk -l > ~/partitions.bak
to backup the actual configuration. Print or store the file "partitions.bak" in a safe place.
2) Make sure that you have enough free space *after* the partition you want to resize (the resized partition *must* start from the *same sector*).
3) Reboot the computer from a live CD instead of the HD. SystemRescueCD
is an excellent tool, but another live medium based on GNU/Linux will do.
4) Once booted, run e2fsck -f /dev/<partition>
(for example "sda2").
5) If all is well with e2fsck, then open fdisk with fdisk /dev/<disk>
(for example "sda").
6) Write down the start sector of the partition that must be resized.
7) Delete that partition (this will *not* delete your data). Create the partition again, starting from the *original* start sector! When asked for the end sector, you can type the partition's new size, like "20G" as in your case.
9) Save and exit from fdisk.
10) Run e2fsck -f /dev/<partition>
11) If all is well with e2fsck, run resize2fs <partition>
. This will expand the filesystem to match the new partition's size.
If the start sector cannot be the same, i.e. you have to resize the partition "backwards", then you cannot use resize2fs: you will have to delete the partition, create a new one AND create a new filesystem with mkfs. Then restore your data. I assume that you are familar with the command line, fdisk, backups, and booting from live media. If you are not, then I would suggest that you read the relevant documentation and try the suggestions above on a test system, just in case something goes wrong.