I've crashed and I can't get up!

There are many, many different ways to back up your Ubuntu system. Here we’re going to look at two of them, one of which is a full system backup and the other is a way to copy folders and files. The point of this article isn’t to be super inclusive of every method under the sun, but to provide a guide as to how I do this and why it works for me.

All of my backups are done to an external drive. In my case, this is a firewire drive that is mounted in my /media directory. There’s nothing stoping you form doing this to a network drive, a separate partition or even your primary partition. However, you do have to be cautious of your space limitations. Backing up a 3 GB install onto a 40 GB disk is fine, but backing up 63GB of data to your 80GB drive… not so good. This is one of the two reasons I use an external 200 GB drive. Lots of space. The other reason is that moving a backup file off of my primary partition after I’m done backing it up just seems like an extra step.

There are two types of backups that I do. The first is a backup of several key folders, not my entire system. This is in case I blow something away, or lose some data that I’d want to get back quickly.

I use the rsync command for this. Rsync is a simple and fast way to make an exact copy of something. That something can be a single file or a whole file system.

Now my external hard drive is a firewire drive, which Ubuntu thoughtfully mounts in /media for me with the wonderful name of ‘ieee1394disk’. That’s where I want to keep this backup copy. Let’s open up a terminal session and go backup some stuff.
cd /media/ieee*
Now I’m in my external drive. If you have a USB disk, chances are it’s under /media/usbdisk or /media/whatevertheheckyoucalledit. I’m going to make a folder to store this backup in because I’m something of a filesystem neat freak.
mkdir arsgeek_backup
cd arsgeek_backup

Now there are four directories that I back up on a regular basis. These are my /home directory, my /etc directory my /opt directory and my mp3 collection. :) My mp3’s are located on a FAT32 partition mounted in /media/sda5 in a folder called music. So here’s the command I use to copy all of these.
rsync -arvu /home /etc /opt /media/sda5/music .
Here’s what the switches after the rsync command mean. a= archive, r= recursive, v= verbose, u= update and z= compress.

What I like about this is that while the first rsync does take some time to copy all of these files and folders the first time it’s run, the next time it’s run it only adds new stuff. So if I run this once a week and the only changes that were made was that I added several new mp3s to my music directory, it will only copy those new files.

If I accidentally deleted an mp3 that I wanted, I could easily (and through the GUI) go to my external drive and copy it back. Or if I accidentally deleted my /home directory (yikes!) I could rsync it back by reversing the command:
cd /home
rsync -arvu /media/iee*/arsgeek_backup/home .

I also plan on upgrading my laptop, which is my primary work computer, to Edgy Eft when it comes out on October 26th. (PLUG!) I’ve put a lot of work into getting my laptop just the way I like it, so I’m going to take a complete backup of the system before I do the upgrade. In fact, I’m doing a new backup while I type this howto. To do that, I use the tar command.

I’m going to back up all of the most important folders to me, however I’m not going to back up certain parts of my install, like the /tmp directory, or the /sys directory or anything mounted in /media like DVD’s or the external disk that I’m backing up too! That would be messy. So we’ll use the tar command with some excludes built into it. It’s a bit long and ungainly looking but it works like a charm.

First, I move into my external drive.
cd /media/iee*
Then I make another directory for my complete backup
mkdir arsgeek_wholeshebang
cd argeek_w*

Now I’m ready to back my machine up. This is going to take a while, so it’s a good idea to do it when you won’t need to power off your computer.
sudo tar cvpzf arsgeek.backup.tgz –exclude=”/proc/*” \
–exclude=”/lost+found/*” –exclude=”/dev/*” \
–exclude=”/mnt/*” –exclude=”/media/*” –exclude=”/sys/*” \
–exclude=”/tmp/*” –exclude “/var/cache/apt/*” /

As you can see, that’s quite the command. Here’s how it breaks down. Tar is the program we’re using to make a backup copy.

The switches work out as follows: c= create, v= verbose, p= preserve permissions, j= bzip2, f= file.

arsgeek.backup.tgz is the file we’ll end up with, a complete and compressed archive of my entire ext3 filesystem.

– -exclude=”/something” is a directory or file that you’re explicity telling tar not to back up. If we were doing this in the same filesystem we were backing up, it would be important to exclude the arsgeek.backup.tgz file. Since we’re doing it to an external drive however, we don’t have to worry about that.

the / at the end tells it to start from the top level (or root) directory of my filesystem. It will start taring at / and get everything that lives beneath it except for those directories and files we told it not to get.

This will chug along for quite some time until eventually we’re left with a massive file called arsgeek.backup.tgz. So if things go horribly, horribly wrong how do I restore my computer?

Here’s how I would do it. I’d first reinstall my laptop with a fresh Dapper install. No updates, same hard drive partitions as before. Then, I’d log in, attach my external drive and go to the backup file.
cd /media/iee*/arsgeek_w*
sudo tar xvpfz backup.tgz -C /

Be warned however that this will overwrite anything and everything in any of the directories you’ve tared up. So /home will get completely over written with whatever’s in your tar file and the same for everything else. Again, this will take some time.

Once that’s done (and note that you’re doing it from within a running OS! Neat!) simply log off and log back in again. This is how I backup my personal documents along with the ArsGeek business website. Phew! Glad you had a backup plan!