12.4. Simple backups
A simple backup scheme is to back up everything once,
then back up everything that has been modified since the
previous backup. The first backup is called a full
backup, the subsequent ones are incremental
backups. A full backup is often more laborious
than incremental ones, since there is more data to write to the
tape and a full backup might not fit onto one tape (or floppy).
Restoring from incremental backups can be many times more work
than from a full one. Restoration can be optimized so that
you always back up everything since the previous full backup;
this way, backups are a bit more work, but there should never
be a need to restore more than a full backup and an incremental
backup.
If you want to make backups every day and have six
tapes, you could use tape 1 for the first full backup (say, on
a Friday), and tapes 2 to 5 for the incremental backups (Monday
through Thursday). Then you make a new full backup on tape 6
(second Friday), and start doing incremental ones with tapes 2
to 5 again. You don't want to overwrite tape 1 until you've got
a new full backup, lest something happens while you're making
the full backup. After you've made a full backup to tape 6,
you want to keep tape 1 somewhere else, so that when your other
backup tapes are destroyed in the fire, you still have at least
something left. When you need to make the next full backup,
you fetch tape 1 and leave tape 6 in its place.
If you have more than six tapes, you can use the extra
ones for full backups. Each time you make a full backup, you
use the oldest tape. This way you can have full backups from
several previous weeks, which is good if you want to find an old,
now deleted file, or an old version of a file.
12.4.1. Making backups with tar
A full backup can easily be made with tar:
# tar --create --file /dev/ftape
/usr/src
tar: Removing leading / from absolute path names in
the archive
# |
The example above uses the GNU version of
tar
and its long option names. The traditional version of
tar only understands single character
options. The GNU version can also handle backups that don't
fit on one tape or floppy, and also very long paths; not all
traditional versions can do these things. (Linux only uses
GNU
tar.)
If your backup doesn't fit on one tape, you need to use
the --multi-volume (-M) option:
# tar -cMf /dev/fd0H1440
/usr/src
tar: Removing leading / from absolute path names in
the archive
Prepare volume #2 for /dev/fd0H1440 and hit return:
# |
Note that you should format the floppies before you begin the
backup, or else use another window or virtual terminal and do
it when
tar asks for a new floppy.
After you've made a backup, you should check that it is OK,
using the --compare (-d) option:
# tar --compare --verbose -f
/dev/ftape
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
....
# |
Failing to check a backup means that you will not notice that your
backups aren't working until after you've lost the original data.
An incremental backup can be done with
tar using the --newer
(-N) option:
# tar --create --newer '8 Sep 1995'
--file /dev/ftape /usr/src
--verbose
tar: Removing leading / from absolute path names in
the archive
usr/src/
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/modules/
usr/src/linux-1.2.10-includes/include/asm-generic/
usr/src/linux-1.2.10-includes/include/asm-i386/
usr/src/linux-1.2.10-includes/include/asm-mips/
usr/src/linux-1.2.10-includes/include/asm-alpha/
usr/src/linux-1.2.10-includes/include/asm-m68k/
usr/src/linux-1.2.10-includes/include/asm-sparc/
usr/src/patch-1.2.11.gz
# |
Unfortunately,
tar can't notice when a file's
inode information has changed, for example, that its permission
bits have been changed, or when its name has been changed.
This can be worked around using
find and
comparing current filesystem state with lists of files that have
been previously backed up. Scripts and programs for doing this
can be found on Linux ftp sites.
12.4.2. Restoring files with tar
The --extract (-x)
option for tar extracts files:
# tar --extract --same-permissions
--verbose --file
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
# |
You also extract only specific files or directories (which
includes all their files and subdirectories) by naming on the
command line:
# tar xpvf /dev/fd0H1440
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
# |
Use the
--list (
-t) option,
if you just want to see what files are on a backup volume:
# tar --list --file
/dev/fd0H1440
usr/src/
usr/src/linux
usr/src/linux-1.2.10-includes/
usr/src/linux-1.2.10-includes/include/
usr/src/linux-1.2.10-includes/include/linux/
usr/src/linux-1.2.10-includes/include/linux/hdreg.h
usr/src/linux-1.2.10-includes/include/linux/kernel.h
...
# |
Note that
tar always reads the backup volume
sequentially, so for large volumes it is rather slow. It is not
possible, however, to use random access database techniques when
using a tape drive or some other sequential medium.
tar doesn't handle deleted files
properly. If you need to restore a filesystem from a full and
an incremental backup, and you have deleted a file between
the two backups, it will exist again after you have done the
restore. This can be a big problem, if the file has sensitive
data that should no longer be available.