The three major backup programs are dump(8), tar(1), and cpio(1).
The traditional UNIX(R) backup programs are
dump
and restore
. They
operate on the drive as a collection of disk blocks, below the
abstractions of files, links and directories that are created by
the file systems. dump
backs up an entire
file system on a device. It is unable to backup only part of a
file system or a directory tree that spans more than one
file system. dump
does not write files and
directories to tape, but rather writes the raw data blocks that
comprise files and directories.
If you use dump
on your root directory, you
would not back up /home
,
/usr
or many other directories since
these are typically mount points for other file systems or
symbolic links into those file systems.
dump
has quirks that remain from its early days in
Version 6 of AT&T UNIX (circa 1975). The default
parameters are suitable for 9-track tapes (6250 bpi), not the
high-density media available today (up to 62,182 ftpi). These
defaults must be overridden on the command line to utilize the
capacity of current tape drives.
It is also possible to backup data across the network to a
tape drive attached to another computer with rdump
and
rrestore
. Both programs rely upon rcmd(3) and
ruserok(3) to access the remote tape drive. Therefore,
the user performing the backup must be listed in the
.rhosts
file on the remote computer. The
arguments to rdump
and rrestore
must be suitable
to use on the remote computer. When
rdump
ing from a FreeBSD computer to an
Exabyte tape drive connected to a Sun called
komodo
, use:
#
/sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1
Beware: there are security implications to
allowing .rhosts
authentication. Evaluate your
situation carefully.
It is also possible to use dump
and
restore
in a more secure fashion over
ssh
.
dump
over ssh#
/sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \ targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz
Or using dump
's built-in method,
setting the environment variable RSH
:
dump
over ssh with RSH
set#
RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usr
tar(1) also dates back to Version 6 of AT&T UNIX
(circa 1975). tar
operates in cooperation
with the file system; it writes files and
directories to tape. tar
does not support the
full range of options that are available from cpio(1), but
it does not require the unusual command
pipeline that cpio
uses.
On FreeBSD 5.3 and later, both GNU tar
and the default bsdtar
are available. The
GNU version can be invoked with gtar
. It
supports remote devices using the same syntax as
rdump
. To tar
to an
Exabyte tape drive connected to a Sun called
komodo
, use:
#
/usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1
The same could be accomplished with
bsdtar
by using a pipeline and
rsh
to send the data to a remote tape
drive.
#
tar cf - . | rsh hostname dd of=tape-device obs=20b
If you are worried about the security of backing up over a
network you should use the ssh
command
instead of rsh
.
cpio(1) is the original UNIX(R) file interchange tape
program for magnetic media. cpio
has options
(among many others) to perform byte-swapping, write a number of
different archive formats, and pipe the data to other programs.
This last feature makes cpio
an excellent
choice for installation media. cpio
does not
know how to walk the directory tree and a list of files must be
provided through stdin
.
cpio
does not support backups across
the network. You can use a pipeline and rsh
to send the data to a remote tape drive.
#
for f in directory_list; do
find $f >> backup.list
done
#
cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"
Where directory_list
is the list of
directories you want to back up,
user
@host
is the
user/hostname combination that will be performing the backups, and
backup_device
is where the backups should
be written to (e.g., /dev/nsa0
).
pax(1) is IEEE/POSIX(R)'s answer to
tar
and cpio
. Over the
years the various versions of tar
and
cpio
have gotten slightly incompatible. So
rather than fight it out to fully standardize them, POSIX(R)
created a new archive utility. pax
attempts
to read and write many of the various cpio
and tar
formats, plus new formats of its own.
Its command set more resembles cpio
than
tar
.
Amanda (Advanced Maryland Network Disk Archiver) is a client/server backup system, rather than a single program. An Amanda server will backup to a single tape drive any number of computers that have Amanda clients and a network connection to the Amanda server. A common problem at sites with a number of large disks is that the length of time required to backup to data directly to tape exceeds the amount of time available for the task. Amanda solves this problem. Amanda can use a "holding disk" to backup several file systems at the same time. Amanda creates "archive sets": a group of tapes used over a period of time to create full backups of all the file systems listed in Amanda's configuration file. The "archive set" also contains nightly incremental (or differential) backups of all the file systems. Restoring a damaged file system requires the most recent full backup and the incremental backups.
The configuration file provides fine control of backups and the network traffic that Amanda generates. Amanda will use any of the above backup programs to write the data to tape. Amanda is available as either a port or a package, it is not installed by default.
"Do nothing" is not a computer program, but it is the most widely used backup strategy. There are no initial costs. There is no backup schedule to follow. Just say no. If something happens to your data, grin and bear it!
If your time and your data is worth little to nothing, then "Do nothing" is the most suitable backup program for your computer. But beware, UNIX(R) is a useful tool, you may find that within six months you have a collection of files that are valuable to you.
"Do nothing" is the correct backup method for
/usr/obj
and other directory trees that can be
exactly recreated by your computer. An example is the files that
comprise the HTML or PostScript(R) version of this Handbook.
These document formats have been created from SGML input
files. Creating backups of the HTML or PostScript(R) files is
not necessary. The SGML files are backed up regularly.
dump(8) Period. Elizabeth D. Zwicky
torture tested all the backup programs discussed here. The clear
choice for preserving all your data and all the peculiarities of UNIX(R)
file systems is dump
. Elizabeth created file systems containing
a large variety of unusual conditions (and some not so unusual ones)
and tested each program by doing a backup and restore of those
file systems. The peculiarities included: files with holes, files with
holes and a block of nulls, files with funny characters in their
names, unreadable and unwritable files, devices, files that change
size during the backup, files that are created/deleted during the
backup and more. She presented the results at LISA V in Oct. 1991.
See torture-testing
Backup and Archive Programs.
There are only four steps that you need to perform in preparation for any disaster that may occur.
First, print the bsdlabel from each of your disks
(e.g. bsdlabel da0 | lpr
), your file system table
(/etc/fstab
) and all boot messages,
two copies of
each.
Second, determine that the boot and fix-it floppies
(boot.flp
and fixit.flp
)
have all your devices. The easiest way to check is to reboot your
machine with the boot floppy in the floppy drive and check the boot
messages. If all your devices are listed and functional, skip on to
step three.
Otherwise, you have to create two custom bootable
floppies which have a kernel that can mount all of your disks
and access your tape drive. These floppies must contain:
fdisk
, bsdlabel
,
newfs
, mount
, and
whichever backup program you use. These programs must be
statically linked. If you use dump
, the
floppy must contain restore
.
Third, create backup tapes regularly. Any changes that you make after your last backup may be irretrievably lost. Write-protect the backup tapes.
Fourth, test the floppies (either boot.flp
and fixit.flp
or the two custom bootable
floppies you made in step two.) and backup tapes. Make notes of the
procedure. Store these notes with the bootable floppy, the
printouts and the backup tapes. You will be so distraught when
restoring that the notes may prevent you from destroying your backup
tapes (How? In place of tar xvf /dev/sa0
, you
might accidentally type tar cvf /dev/sa0
and
over-write your backup tape).
For an added measure of security, make bootable floppies and two backup tapes each time. Store one of each at a remote location. A remote location is NOT the basement of the same office building. A number of firms in the World Trade Center learned this lesson the hard way. A remote location should be physically separated from your computers and disk drives by a significant distance.
#!/bin/sh # # create a restore floppy # # format the floppy # PATH=/bin:/sbin:/usr/sbin:/usr/bin fdformat -q fd0 if [ $? -ne 0 ] then echo "Bad floppy, please use a new one" exit 1 fi # place boot blocks on the floppy # bsdlabel -w -B /dev/fd0c fd1440 # # newfs the one and only partition # newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a # # mount the new floppy # mount /dev/fd0a /mnt # # create required directories # mkdir /mnt/dev mkdir /mnt/bin mkdir /mnt/sbin mkdir /mnt/etc mkdir /mnt/root mkdir /mnt/mnt # for the root partition mkdir /mnt/tmp mkdir /mnt/var # # populate the directories # if [ ! -x /sys/compile/MINI/kernel ] then cat << EOM The MINI kernel does not exist, please create one. Here is an example config file: # # MINI - A kernel to get FreeBSD onto a disk. # machine "i386" cpu "I486_CPU" ident MINI maxusers 5 options INET # needed for _tcp _icmpstat _ipstat # _udpstat _tcpstat _udb options FFS #Berkeley Fast File System options FAT_CURSOR #block cursor in syscons or pccons options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device options NCONS=2 #1 virtual consoles options USERCONFIG #Allow user configuration with -c XXX config kernel root on da0 swap on da0 and da1 dumps on da0 device isa0 device pci0 device fdc0 at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr device fd0 at fdc0 drive 0 device ncr0 device scbus0 device sc0 at isa? port "IO_KBD" tty irq 1 vector scintr device npx0 at isa? port "IO_NPX" irq 13 vector npxintr device da0 device da1 device da2 device sa0 pseudo-device loop # required by INET pseudo-device gzip # Exec gzipped a.out's EOM exit 1 fi cp -f /sys/compile/MINI/kernel /mnt gzip -c -best /sbin/init > /mnt/sbin/init gzip -c -best /sbin/fsck > /mnt/sbin/fsck gzip -c -best /sbin/mount > /mnt/sbin/mount gzip -c -best /sbin/halt > /mnt/sbin/halt gzip -c -best /sbin/restore > /mnt/sbin/restore gzip -c -best /bin/sh > /mnt/bin/sh gzip -c -best /bin/sync > /mnt/bin/sync cp /root/.profile /mnt/root cp -f /dev/MAKEDEV /mnt/dev chmod 755 /mnt/dev/MAKEDEV chmod 500 /mnt/sbin/init chmod 555 /mnt/sbin/fsck /mnt/sbin/mount /mnt/sbin/halt chmod 555 /mnt/bin/sh /mnt/bin/sync chmod 6555 /mnt/sbin/restore # # create the devices nodes # cd /mnt/dev ./MAKEDEV std ./MAKEDEV da0 ./MAKEDEV da1 ./MAKEDEV da2 ./MAKEDEV sa0 ./MAKEDEV pty0 cd / # # create minimum file system table # cat > /mnt/etc/fstab <<EOM /dev/fd0a / ufs rw 1 1 EOM # # create minimum passwd file # cat > /mnt/etc/passwd <<EOM root:*:0:0:Charlie &:/root:/bin/sh EOM cat > /mnt/etc/master.passwd <<EOM root::0:0::0:0:Charlie &:/root:/bin/sh EOM chmod 600 /mnt/etc/master.passwd chmod 644 /mnt/etc/passwd /usr/sbin/pwd_mkdb -d/mnt/etc /mnt/etc/master.passwd # # umount the floppy and inform the user # /sbin/umount /mnt echo "The floppy has been unmounted and is now ready."
The key question is: did your hardware survive? You have been doing regular backups so there is no need to worry about the software.
If the hardware has been damaged, the parts should be replaced before attempting to use the computer.
If your hardware is okay, check your floppies. If you are using
a custom boot floppy, boot single-user (type -s
at the boot:
prompt). Skip the following
paragraph.
If you are using the boot.flp
and
fixit.flp
floppies, keep reading. Insert the
boot.flp
floppy in the first floppy drive and
boot the computer. The original install menu will be displayed on
the screen. Select the Fixit--Repair mode with CDROM or
floppy.
option. Insert the
fixit.flp
when prompted.
restore
and the other programs that you need are
located in /mnt2/rescue
(/mnt2/stand
for
FreeBSD versions older than 5.2).
Recover each file system separately.
Try to mount
(e.g. mount /dev/da0a
/mnt
) the root partition of your first disk. If the
bsdlabel was damaged, use bsdlabel
to re-partition and
label the disk to match the label that you printed and saved. Use
newfs
to re-create the file systems. Re-mount the root
partition of the floppy read-write (mount -u -o rw
/mnt
). Use your backup program and backup tapes to
recover the data for this file system (e.g. restore vrf
/dev/sa0
). Unmount the file system (e.g. umount
/mnt
). Repeat for each file system that was
damaged.
Once your system is running, backup your data onto new tapes. Whatever caused the crash or data loss may strike again. Another hour spent now may save you from further distress later.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.