Back up your data!!!
(P.S. Back up your data!) Otherwise you might end up like this guy (warning: contains bad words).
For homegrown solutions, you can use tar(1) or rsync(1). The latter is particularly interesting as it can synch directory trees with minimal I/O. To copy to another machine/partition etc you can do rsync -av --rsh="ssh" sourcedir destdir. Other options you might like to consider on rsync(1) command line are -l which keeps symlinks intact, -z which compresses the data (useful over slow links), -u which checks that the destination is not newere, and --delete which deletes files which exist on the destination but not the source (use with caution!!)
When using rsync(1) it is important whether you have a slash at the end of the directory or not. If you have the slash the destination directory is where it copies it too, otherwise it is one level up. For example to synchronise a directory test in the home directory to a machine with name remotepc and deleting files that aren't in the source you can do: rsync -luvaz --delete ~/test remotepc:
rsync(1) has also been used as the basis for a number of Free tools, such as the excellent rsnapshot, which lets you keep multiple backups at only slightly more space usage than a single day by keeping only one copy of files unchanged across backups. Another rsync(1)-based tool is rdiff-backup(1), a Python program based on rdiff(1).