Das FreeBSD-Handbuch
Zurück | Kapitel 18. Speichermedien | Weiter

# 18.12. Datensicherung

Die drei wichtigsten Programme zur Sicherung von Daten sind dump(8), tar(1) und cpio(1).

## 18.12.1. Sichern und Wiederherstellen

`dump` und `restore` sind die traditionellen Backupprogramme in UNIX® Systemen. Sie betrachten das Laufwerk als eine Ansammlung von Blöcken, operieren also unterhalb des Abstraktionslevels von Dateien, Links und Verzeichnissen, die die Grundlage des Dateisystemkonzepts bilden. Im Gegensatz zu anderen Backupprogrammen sichert `dump` ein ganzes Dateisystem auf einem Gerät. Es ist nicht möglich nur einen Teil des Dateisystems, oder einen Verzeichnisbaum, der mehr als ein Dateisystem umfasst, zu sichern. Das `dump`-Kommando schreibt keine Dateien oder Verzeichnise auf das Band, sondern die Blöcke, aus denen Dateien und Verzeichnisse bestehen. Wenn `restore` für das Extrahieren von Daten verwendet wird, werden temporäre Dateien standardmässig in `/tmp/` abgelegt - wenn Sie von einer Platte mit einem kleinen `/tmp`-Verzeichnis zurücksichern, müssen Sie möglicherweise die Umgebungsvariable `TMPDIR` auf ein Verzeichnis mit mehr freiem Speicherplatz setzen, damit die Wiederherstellung gelingt.

> Anmerkung: Wenn Sie mit `dump` das Root-Verzeichnis sichern, werden `/home`, `/usr` und viele andere Verzeichnisse nicht gesichert, da dies normalerweise Mountpunkte für andere Dateisysteme oder symbolische Links zu diesen Dateisystemen sind.

`dump` hat einige Eigenarten, die noch aus den frühen Tagen der Version 6 von AT&T UNIX (ca. 1975) stammen. Die Parameter sind für 9-Spur-Bänder (6250 bpi) voreingestellt, nicht auf die heute üblichen Medien hoher Dichte (bis zu 62.182 ftpi). Bei der Verwendung der Kapazitäten moderner Bandlaufwerke muss diese Voreinstellung auf der Kommandozeile überschrieben werden.

`rdump` und `rrestore` können Daten über Netzwerk auf ein Band, das sich in einem Laufwerk eines anderen Computers befindet, überspielen. Beide Programme benutzen die Funktionen rcmd(3) und ruserok(3) zum Zugriff auf das entfernte Bandlaufwerk. Daher muss der Anwender, der das Backup durchführt, auf dem entfernten Rechner in `.rhosts` eingetragen sein.

Die Argumente zu `rdump` und `rrestore` müssen zur Verwendung auf dem entfernten Computer geeignet sein. Wenn Sie zum Beispiel mit `rdump` von einem FreeBSD-Rechner aus auf ein Exabyte-Bandlaufwerk einer Sun mit Namen `komodo` zugreifen möchten, setzen Sie das folgende Kommando ab:

    # /sbin/rdump 0dsbfu 54000 13000 126 komodo:/dev/nsa8 /dev/da0a 2>&1

Zum Ausführen dieses Kommandos müssen Sie auf dem entfernten Rechner in `.rhosts` eingetragen sein. Die r-Kommandos sind ein großes Sicherheitsrisiko, daher sollten Sie deren Verwendung sorgfältig abwägen.

Es ist auch möglich, `dump` und `restore` über eine gesicherte Verbindung mit `ssh` einzusetzen:

Beispiel 18-1. `dump` mit ssh benutzen

    # /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \
          targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz

Sie können ebenfalls mit der internen Methode von `dump` auf entfernte Rechner zugreifen, indem Sie die Umgebungsvariable `RSH` setzen:

Beispiel 18-2. `dump` über ssh mit gesetzter `RSH` benutzen

    # RSH=/usr/bin/ssh /sbin/dump -0uan -f tatargetuser@targetmachine.example.com:/dev/sa0 /usr

## 18.12.2. `tar`

tar(1) stammt ebenfalls aus Version 6 von AT&T UNIX (ca. 1975). `tar` arbeitet mit dem Dateisystem, denn es schreibt Dateien und Verzeichnisse auf das Band. `tar` unterstützt zwar nicht alle Optionen, die bei cpio(1) zur Verfügung stehen, aber dafür erfordert es auch nicht die ungewöhnliche Kommando-Pipeline, die von `cpio` verwendet wird.

Seit FreeBSD 5.3 sind sowohl GNU `tar` als auch `bsdtar` verfügbar. Die GNU-Version starten Sie über `gtar`. Sie unterstützt auch entfernte Geräte, wobei die von `rdump` benutzte Syntax übernommen wurde. Um Daten mit `tar` auf ein an einer Sun-Workstation (namens `komodo`) angeschlossenes Exabyte-Bandlaufwerk zu archivieren, geben Sie Folgendes ein:

    # /usr/bin/gtar cf komodo:/dev/nsa8 . 2>&1

Alternativ können Sie für diese Sicherung auch `bsdtar` verwenden, indem Sie die Daten über eine Pipeline und `rsh` an das entfernte Laufwerk senden:

    # tar cf - . | rsh hostname dd of=tape-device obs=20b

Wenn Sie Bedenken bezüglich der Sicherheit beim Backup über das Netz haben, sollten Sie `ssh` anstatt `rsh` benutzen.

## 18.12.3. Cpio

cpio(1) ist das ursprüngliche Programm von UNIX Systemen zum Dateitransfer mit magnetischen Medien. `cpio` hat (neben vielen anderen Leistungsmerkmalen) Optionen zum Byte-Swapping, zum Schreiben einer Anzahl verschiedener Archivformate und zum Weiterleiten von Daten an andere Programme über eine Pipeline. Dieses letzte Leistungsmerkmal macht `cpio` zu einer ausgezeichneten Wahl für Installationsmedien. Leider kann `cpio` keine Dateibäume durchlaufen, so dass eine Liste der zu bearbeitenden Dateien über `stdin` angegeben werden muss.

`cpio` unterstützt keine Backups über das Netzwerk. Man kann aber eine Pipeline und `rsh` verwenden, um Daten an ein entferntes Bandlaufwerk zu senden.

    # for f in directory_list; do
    find $f >> backup.list
    done
    # cpio -v -o --format=newc < backup.list | ssh user@host "cat > backup_device"

Dabei steht `directory_list` für eine Aufzählung der Verzeichnisse, die Sie sichern wollen. `user`@`host` gibt den Benutzer auf dem Zielrechner an, der die Sicherung laufen lässt. Der Ort der Sicherung wird durch `backup_device` angegeben (z.B. `/dev/nsa0`).

## 18.12.4. `pax`

pax(1) ist die Antwort von IEEE/POSIX® auf `tar` und `cpio`. Über die Jahre hinweg sind die verschiedenen Versionen von `tar` und `cpio` leicht inkompatibel geworden. Daher hat POSIX, statt eine Standardisierung zwischen diesen auszufechten, ein neues Archivprogramm geschaffen. `pax` versucht viele der unterschiedlichen `cpio`- und `tar`-Formate zu lesen und zu schreiben, außerdem einige neue, eigene Formate. Die Kommandostruktur ähnelt eher `cpio` als `tar`.

## 18.12.5. Amanda

Amanda (Advanced Maryland Network Disk Archiver) ist ein Client/Server-Backupsystem, nicht nur ein einzelnes Programm. Ein Amanda-Server kann auf einem einzigen Bandlaufwerk Datensicherungen von jeder beliebigen Anzahl von Computern speichern, sofern auf diesen jeweils ein Amanda-Client läuft und sie über Netzwerk mit dem Amanda-Server verbunden sind.

Ein häufiges Problem bei Standorten mit einer Anzahl großer Festplatten ist, dass das Kopieren der Daten auf Band langsamer vor sich geht als solche Daten anfallen. Amanda löst dieses Problem durch Verwendung einer “Holding Disk”, einer Festplatte zum gleichzeitigen Zwischenspeichern mehrerer Dateisysteme.

Für Datensicherungen über einen längeren Zeitraum erzeugt Amanda “Archivsets” von allen Dateisystemen, die in Amandas Konfigurationsdatei genannt werden. Ein Archivset ist eine Gruppe von Bändern mit vollen Backups und Reihen von inkrementellen (oder differentiellen) Backups, die jeweils nur die Unterschiede zum vorigen Backup enthalten. Zur Wiederherstellung von beschädigten Dateisystemen benötigt man Das Letzte volle Backup und alle darauf folgenden inkrementellen Backups.

Die Konfigurationsdatei ermöglicht die Feineinstellung der Backups und des Netzwerkverkehrs von Amanda. Amanda kann zum Schreiben der Daten auf das Band jedes der oben beschriebenen Backuprogramme verwenden. Amanda ist nicht Teil des Basissystems, Sie müssen Amanda über die Ports-Sammlung oder als Paket installieren.

## 18.12.6. Tue nichts

“Tue nichts” ist kein Computerprogramm, sondern die am häufigsten angewendete Backupstrategie. Diese kostet nichts, man muss keinen Backupplan befolgen, einfach nur nein sagen. Wenn etwas passiert, einfach grinsen und ertragen!

Wenn Ihre Zeit und Ihre Daten nicht so wichtig sind, dann ist die Strategie “Tue nichts” das geeignetste Backupprogramm für Ihren Computer. Aber UNIX ist ein nützliches Werkzeug, Sie müssen damit rechnen, dass Sie innerhalb von sechs Monaten eine Sammlung von Dateien haben, die für Sie wertvoll geworden sind.

“Tue nichts” ist die richtige Backupmethode für `/usr/obj` und andere Verzeichnisbäume, die vom Computer exakt wiedererzeugt werden können. Ein Beispiel sind die Dateien, die diese Handbuchseiten darstellen - sie wurden aus Quelldateien im Format SGML erzeugt. Es ist nicht nötig, Sicherheitskopien der Dateien in den sekundären Formaten wie etwa HTML zu erstellen. Die Quelldateien in SGML sollten jedoch in die regelmäßigen Backups mit einbezogen werden.

## 18.12.7. Welches Backup-Programm ist am Besten?

`dump`, Punkt und Schluss. Elizabeth D. Zwicky hat alle hier genannten Backup-Programme bis zur Erschöpfung ausgetestet. Ihre eindeutige Wahl zur Sicherung aller Daten mit Berücksichtigung aller Besonderheiten von UNIX Dateisystemen ist `dump`.

Elizabeth erzeugte Dateisysteme mit einer großen Vielfalt ungewöhnlicher Bedingungen (und einiger gar nicht so ungewöhnlicher) und testete jedes Programm durch ein Backup und eine Wiederherstellung dieser Dateisysteme. Unter den Besonderheiten waren Dateien mit Löchern, Dateien mit Löchern und einem Block mit Null-Zeichen, Dateien mit ausgefallenen Buchstaben im Dateinamen, unlesbare und nichtschreibbare Dateien, Gerätedateien, Dateien, deren Länge sich während des Backups ändert, Dateien, die während des Backups erzeugt und gelöscht werden, u.v.m. Sie berichtete über ihre Ergebnisse in LISA V im Oktober 1991, s. Torture-testing Backup and Archive Programs.

## 18.12.8. Die Wiederherstellung in einem Notfall

### 18.12.8.1. Vor dem Unglück

Es sind nur vier Vorkehrungen zu treffen, um auf jedes erdenkliche Unglück vorbereitet zu sein.

Als erstes drucken Sie das bsdlabel jeder Ihrer Festplatten (z.B. mittels `bsdlabel da0 | lpr`), die Partitions- und Dateisystemtabelle jeder Festplatte (mit `/etc/fstab`) sowie alle Bootmeldungen, jeweils in zweifacher Ausfertigung.

Zweitens, überzeugen Sie sich, dass sowohl die Bootdiskette als auch die Reparaturdiskette (`boot.flp` bzw. `fixit.flp`) all Ihre Geräte ansprechen können. Die einfachste Methode dies nachzuprüfen ist, Ihren Rechner mit der Boot-Diskette im Floppylaufwerk neu zu starten und die Bootmeldungen zu durchzusehen. Wenn all Ihre Geräte aufgelistet sind und funktionieren, können Sie weiter zu Schritt drei gehen.

Ist das nicht der Fall, müssen Sie sich eine eigene Version der beiden zum Booten benötigten Disketten erstellen. Diese müssen einen Kernel enthalten, der all Ihre Platten mounten kann und Zugriff auf Ihr Bandlaufwerk gestattet. Diese Disketten müssen ferner folgende Programme enthalten: `fdisk`, `bsdlabel`, `newfs`, `mount` sowie jedes Backup-Programm, das Sie verwenden. Diese Programme müssen statisch gelinkt sein. Falls Sie `dump` verwenden, muss die Diskette auch `restore` enthalten.

Drittens, machen Sie oft Backups auf Band. Jede Änderung seit Ihrem letzten Backup kann unwiederbringlich verloren gehen. Versehen Sie die Backup-Bänder mit Schreibschutz.

Viertens, testen Sie aus, wie die Disketten (entweder `boot.flp` und `fixit.flp` oder Ihre beiden eigenen Disketten aus Schritt zwei) und die Bänder mit den Backups zu behandeln sind. Machen Sie sich Notizen zu diesem Test. Bewahren Sie diese Notizen zusammen mit den Bootdisketten, den Ausdrucken und den Bändern mit den Backups auf. Wenn der Ernstfall eintritt, werden Sie vielleicht so genervt sein, dass Sie ohne Ihre Notizen vielleicht das Backup auf Ihren Bändern zerstören. (Wie das geht? Man braucht nur unglücklicherweise den Befehl `tar cvf /dev/sa0` einzugeben um ein Band zu überschreiben).

Als zusätzliche Sicherheitsvorkehrung, kann man jeweils die Disketten und Bänder zweifach erstellen. Eine der Kopien sollte an einem entfernten Standort aufbewahrt werden. Ein entfernter Standort ist NICHT der Keller im gleichen Bürogebäude. Eine Anzahl von Firmen im World Trade Center musste diese Lektion auf die harte Tour lernen. Ein entfernter Standort sollte von Ihrem Computer und Ihren Festplatten physikalisch durch eine erhebliche Entfernung getrennt sein.

Beispiel 18-3. Ein Beispielskript zum Erstellen eigener Bootdisketten

    #!/bin/sh
    #
    # Erstellen einer Diskette zur Wiederherstellung eines Backups
    #
    # Diskette formatieren
    #
    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

    # Die Bootbloecke auf die Diskette schreiben
    #
    bsdlabel -w -B /dev/fd0c fd1440

    #
    # Dateisystem fuer die (einzige) Partition auf der Diskette
    #
    newfs -t 2 -u 18 -l 1 -c 40 -i 5120 -m 5 -o space /dev/fd0a

    #
    # Diskette mounten
    #
    mount /dev/fd0a /mnt

    #
    # Benoetigte Verzeichnisse erstellen
    #
    mkdir /mnt/dev
    mkdir /mnt/bin
    mkdir /mnt/sbin
    mkdir /mnt/etc
    mkdir /mnt/root
    mkdir /mnt/mnt          # fuer die Root-Partition
    mkdir /mnt/tmp
    mkdir /mnt/var

    #
    # die Verzeichnisse bevoelkern
    #
    if [ ! -x /sys/compile/MINI/kernel ]
    then
    cat << EOM
    Der MINI_Kernel existiert nicht, bitte einen erzeugen.
    Hier ein Beispiel einer Konfigurationsdatei:
    #
    # MINI -- Ein FreeBSD-Kernel, der auf die Diskette passt.
    #
    machine     "i386"
    cpu     "I486_CPU"
    ident       MINI
    maxusers    5

    options     INET            # notwendig fuer _tcp _icmpstat _ipstat
    #               _udpstat _tcpstat _udb
    options     FFS         #Berkeley Fast File System
    options     FAT_CURSOR      #Blockcursor in syscons oder pccons
    options     SCSI_DELAY=15       #traue nicht Joe's SCSI-Geraet
    options     NCONS=2             #2 virtuelle Konsolen
    options     USERCONFIG      #Konfiguration mit -c XXX zulassen

    config      kernel  root on da0 swap on da0 and da1 dumps on da0

    controller  isa0
    controller  pci0

    controller  fdc0    at isa? port "IO_FD1" bio irq 6 drq 2 vector fdintr
    disk        fd0 at fdc0 drive 0

    controller  ncr0

    controller  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        # von INET benoetigt
    pseudo-device   gzip        # komprimierte a.out-Dateien ausfuehren
    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

    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

    #
    # Minimale Dateisystemtabelle erstellen
    #
    cat > /mnt/etc/fstab <<EOM
    /dev/fd0a   /   ufs rw 1 1
    EOM

    #
    # Minimale Passwortdatei erstellen
    #
    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

    #
    # Die Diskette aushaengen und den Benutzer informieren
    #
    /sbin/umount /mnt
    echo "Die Diskette wurde ausgehaengt und ist jetzt bereit."

### 18.12.8.2. Nach dem Unglück

Die Schlüsselfrage ist, ob Ihre Hardware überlebt hat. Denn da Sie ja regelmäßig Backups angefertigt haben, brauchen Sie sich um die Software keine Sorgen zu machen.

Falls die Hardware beschädigt wurde, ersetzen Sie zuerst die defekten Teile bevor Sie den Computer benutzen.

Falls die Hardware funktioniert, überprüfen Sie die Disketten. Wenn Sie eigene Bootdisketten verwenden, booten Sie im Single-User-Modus (geben dazu Sie `-s` am Boot-Prompt `boot:` ein). Überspringen Sie den folgenden Paragrafen.

Wenn Sie die Standarddisketten `boot.flp` und `fixit.flp` verwenden, lesen Sie hier weiter. Legen Sie die Bootdiskette `boot.flp` in das erste Floppylaufwerk ein und starten Sie den Computer. Wie üblich wird dann das originale Installationsmenü von FreeBSD gestartet. Wählen Sie die Option `Fixit--Repair mode with CD-ROM or floppy`. Legen Sie die Diskette `fixit.flp` ein, wenn danach gefragt wird. `restore` und die anderen Programme, die Sie benötigen, befinden sich dann in `/mnt2/rescue` (`/mnt2/stand` vor FreeBSD 5.2).

Stellen Sie die Dateisysteme nacheinander, getrennt von einander, wieder her.

Versuchen Sie die Root-Partition Ihrer ersten Festplatte einzuhängen (z.B. mit `mount /dev/sd0a /mnt`). Wenn das Bsdlabel beschädigt wurde, benutzen Sie `bsdlabel` um die Platte neu zu partitionieren und zu benennen und zwar so, dass die Festplatte mit dem Label übereinstimmt, das Sie ausgedruckt und aufbewahrt haben.

Verwenden Sie `newfs` um neue Dateisysteme auf den Partitionen anzulegen. Hängen Sie nun die Root-Partition der Festplatte mit Schreibzugriff ein (mit `mount -u -o rw /mnt`). Benutzen Sie Ihr Backup-Programm um die Daten für das jeweilige Dateisystem aus den Backup-Bändern wieder her zu stellen (z.B. durch `restore vrf /dev/sta`). Hängen Sie das Dateisystem wieder aus (z.B. durch `umount /mnt`). Wiederholen Sie diesen Ablauf für jedes betroffene Dateisystem.

Sobald Ihr System wieder läuft, machen Sie gleich wieder ein vollständiges Backup auf neue Bänder. Denn die Ursache für den Absturz oder den Datenverlust kann wieder zuschlagen. Eine weitere Stunde, die Sie jetzt noch dranhängen, kann Ihnen später ein weiteres Missgeschick ersparen.

Zurück | Zum Anfang | Weiter
Backup-Strategien | Nach oben | Netzwerk-, speicher- und dateibasierte Dateisysteme

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.