Datensicherung

Aus Mikiwiki
Zur Navigation springen Zur Suche springen

Als Datensicherung (auch: Backup, Sicherung, Sicherungskopie) wird das teilweise oder gesamte Kopieren der in einem Rechnersystem vorhandenen Daten auf ein anderes (häufig transportables) Speichermedium bezeichnet. Das Ziel ist, den Datenverlust bei einem Systemausfall zu begrenzen. Die Wiederherstellung einer Datensicherung wird als Datenrücksicherung (auch: Restore, Wiederherstellung) bezeichnet.

Zum Erstellen einer Datensicherung können unter Linux die Befehle cpio, dd, rsync, tar und ufsdump verwendet werden.

Daneben gibt es auch eigenständige Datensicherungslösungen:

  • Bacula ermöglicht die Sicherung, Widerherstellung und Überprüfung von Daten in einem heterogenen Netzwerk.
  • BackupPC ermöglicht eine zentrale Erstellung und Verwaltung von Datensicherungen verschiedener Rechner.
  • Make CD-ROM Recovery erstellt eine bootfähige CD, die bei der entsprechenden Einstellung das System vollautomatisch wiederherstellt.

FAQ

Datensicherung mit dd

Grundsätzlich genügt eine Datensicherung mit dd, um ein einzelnes Linux-System zu sichern. Beim Sichern einer Partition sollte diese aber entweder nicht oder nur lesbar (read-only) eingehängt sein. Beim Sichern einer vollständigen Festplatte sollte der Rechner entweder nicht laufen - sehr unpraktisch! - oder von einem externen Medium booten. Wird das nicht beachtet, entsteht als Ergebnis womöglich ein korruptes Dateisystem!

Die Datenrücksicherung mit einer solchen Lösung ist für den Systemverwalter nicht sehr schwierig, dauert aber für eine einzelne Datei ebenso lange wie für den ganze Datensicherung.

Datensicherung mit tar

Erstellen eines vollständigen Abbilds einer Linux-Installation in der Datei "backup.tar.bz2", die sich später (im Notfall oder zur Vervielfältigung) auf eine andere Festplatte und ein anderes Dateisystem entpacken lässt. Dabei wird ein Archiv erzeugt ("-c"), die Zugriffsrechte bleiben erhalten ("-p"), es erfolgt eine ausführliche Ausgabe auf dem Bildschirm ("-v") und die hinter der Option "-f" stehende Datei wird mit bzip2 komprimiert ("-j").

# tar -cvjpf /tmp/backup.tar.bz2 /

Eine Datensicherung dieser Art erzeugt einige Fehlermeldungen: weil tar ein Abbild von der Wurzel ("/") des Dateisystems an erzeugen soll, versucht es zwangsläufig, in einer Rekursion sich selber mit in die Datensicherung einzubinden. Bei diesem Versuch meldet es notgedrungen, dass die Abbilddatei sich während des Archivierens verändert hat. Zwar lässt sich mit dieser Fehlermeldung leben, doch ist es ohnehin nicht sinnvoll, alle Dateien und Verzeichnisse in die Abbilddatei mit aufzunehmen: die Daten im Heimatverzeichnis "/home" etwa sollten ohnehin regelmässig auf ein externes Speichermedium gesichert werden. In der Abbilddatei zur Systemwiederherstellung haben sice nichts zu suchen, denn zur eigentlichen Systemwiederherstellung tragen sie nichts bei und blähen nur den Tarball unnötig auf.

Mit dem Schalter "--exclude-from" können bestimmte Dateien und Verzeichnisse ausdrücklich aus dem Tarball ausgeschlossen werden. Diese Option liest auszuschliessende Dateien und Verzeichnisse aus einer Datei ein.

# cat << EOF >> /tmp/exclude
> /home/*
> /mnt/*
> /usr/portage/distfiles/*
> /tmp/backup.tar.bz2
> EOF
# tar -cvjp --exclude-from=/tmp/exclude -f /tmp/backup.tar.bz2 /

Die Wildcards ("*") hinter den Verzeichnisangaben blenden sämtliche Dateien und Unterverzeichnisse innerhalb des auszuklammernden Verzeichnisses aus. Fehlt die Wildcard, so übernimmt tar das gesamte Verzeichnis nicht mit ins Archiv. Auch der Dateiname der Abbilddatei selbst sollte in der Ausschlussdatei stehen (hier "/tmp/backup.tar.bz2").

Vor dem Erstellen der Abbilddatei sollte mit mount geprüft werden, was genau im System gerade eingehängt ist. Etwa eingehängte externe Datenträger oder Netzwerkfreigaben würden sonst mit ins Abbild einfliessen, falls sie nicht vorher ausgehängt oder ausdrücklich ausgeschlossen werden. Andererseits hängen manche Distributionen aus Sicherheitsgründen die Boot-Partition nicht mit ein. In diesem Fall muss darauf geachtet werden, dass auch sie mit ins Abbild gelangt.

Eine so erstellte Abbilddatei kann anschlissend auf eine DVD gebrannt werden.

Datenrücksicherung mit tar

Bei der Wiederherstellung der erzeugten Abbilddatei hilft eine Live-CD (z. B. Knoppix), wobei auch textbasierte Live-CDs wie Grml oder die Installationsdatenträger von SUSE oder Red Hat im Rescue-Modus völlig ausreichen. Damit nach dem Start der Live-Distribution das DVD-Laufwerk wieder für den Datenträger mit dem Abbild frei wird, muss die Live-CD so gebootet werden, dass das Betriebssystem im Arbeitsspeicher des Rechners abgelegt wird und von dort aus arbeitet. Dies erlaubt es, nach dem Hochfahren die Live-CD auszuhängen und gegen den Datenträger mit dem Abbild auszutauschen. Bei den meisten Live-Systemen heisst der entsprechende Bootparameter "toram". Knoppix wird also mit "knoppix toram" gestartet, bei Grml heisst der Befehl "grml toram", bei Gentoo "gentoo docache".

Vor dem Zurückspielen der Abbilddatei muss erst einmal die neue Festplatte partitioniert und formatiert werden, am besten mit cfdisk.

Nun müssen die neu erstellten Partitionen ins Dateisystem der Live-CD eingehängt werden. Bei Verwendung der Gentoo-Live-CD kann das Einhängen beispielsweise wie folgt aussehen. Der dabei verwendete Einhängepunkt "/mnt/gentoo" stellt eine spezielle Konvention von Gentoo Linux dar; bei anderen Live-CDs wird vorab ein geeigneter Einhängepunkt angelegt. Hier wird erst das Wurzelverzeichnis von der Festplatte eingehängt, danach werden die Einhängepunkte für die Boot- und Home-Partition angelegt, diese beiden Partitionen eingehängt und schliesslich die Swap-Partition aktiviert.

# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/{boot,home}
# mount /dev/hda1 /mnt/gentoo/boot
# mount /dev/hda4 /mnt/gentoo/home
# swapon /dev/hda2

Nun kann die Abbilddatei auf die Festplatte gespielt werden. Dazu wird zuerst die Live-CD aus dem System ausgehängt:

# umount /mnt/cdrom

Jetzt wird die DVD mit der Abbilddatei eingelegt und eingehängt. Im Beispiel steht "/dev/hdb" für die Gerätebezeichnung des DVD-Laufwerks, die aber auch anders lauten kann.

# mount /dev/hdb /mnt/cdrom

Schliesslich wird die Abbilddatei in die richtige Partition (hier "/mnt/gentoo") entpackt. Der Unterschied zum Anlegen der tar-Datei liegt dabei in der Option "-x", welche für das Entpacken des Archivs steht.

# cd /mnt/gentoo
# tar -xvjpf /mnt/cdrom/backup.tar.bz2

Bleiben Partitionen und Laufwerkshierarchie gegenüber der ursprünglichen Installation erhalten, so brauchen keine Konfigurationsänderungen am Bootmanager oder an der Partitionstabelle durchgeführt zu werden. Änderungen an der Partitionstabelle müssen aber in der zurückgesicherten Datei "/etc/fstab" eingetragen werden. Wurde das Abbild "umgezogen", also beispielsweise statt auf die erste auf eine zweite Festplatte entpackt, so müssen die Einträge in der Datei "/boot/grub/grub.conf" entsprechend angepasst werden.

Abschliessend muss bei der Wiederherstellung auf eine neue Festplatte auch der noch fehlende Bootmanager in den Master Boot Record der ersten Festplatte installiert werden - geschieht das nicht, läuft der erste Bootvorgang ins Leere. Fast alle aktuellen Distributionen verwenden als Bootmanager GRUB, der sich wie folgt aus den Daten des wiederhergestellten Abbild installieren lässt. Mit den folgenden Befehlen wird ins entpackte Abbild gewechselt, als sei davon gebootet worden; das ermöglicht der Befehl chroot. Im Verzeichnis "/proc" liegen etliche Systeminformationen, die GRUB benötigt. Deshalb ist es notwendig, dieses Verzeichnis zuvor einzuhängen.

# mount -t proc none /mnt/gentoo/proc
# chroot /mnt/gentoo /bin/bash

Nach dem Aufruf von GRUB innerhalb der chroot-Umgebung findet man sich wieder in einer Eingabeaufforderung. Der Befehl "root" zeigt dabei auf die Boot-Partition (hier mit "hd0,0" auf die erste Partition der ersten Festplatte; das wäre auch der richtige Befehl, falls es bei der Installation keine eigene Boot-Partition gibt, sondern "/boot" direkt in der Root-Partition sitzt. Bei einer Wiederherstellung auf die erste Partition der zweiten Festplatte müsste der Befehl dagegen "hd1,0" lauten.). Mit dem Befehl "setup" wird der Bootmanager in den MBR der Festplatte geschrieben, meist soll er auf "hd0" landen, also auf der ersten Festplatte im System.

# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit

Vor einem Neustart aus der Live-CD heraus ins neue, aus der Abbilddatei hergestellte Linux, werden alle eingehängten Partitionen mit umount aus dem System ausgehängt. Die Swap-Partition wird dabei mit "swapoff /dev/hda2" deaktiviert. Ein Reboot des Rechners führt dann zum Hochfahren des neu installierten Systems (hoffentlich ;-).

Datensicherung mit kombinierten Befehlen

1. Sicherung und gleichzeitige Komprimierung des Verzeichnisses "/etc".

$ cd /etc
$ find . -print | cpio -o | gzip | dd of=/tmp/etcbkg.cpio.gz

2. Datenrücksicherung.

$ mkdir /tmp/etc
$ cd /tmp/etc
$ dd if=/tmp/etcbkg.cpio.gz | gzip -d | cpio -idum

Datensicherung auf entferntem Rechner ("remote backup")

Erstellung eines remote backup von "/etc" auf Rechner "meister".

$ ssh meister "find /etc -depth -print | cpio -oc" > /tmp/meister_etc.cpio

Alternativemöglichkeit zur Erstellung eines remote backup von "/etc" auf Rechner "meister".

$ ssh meister "find /etc -depth -print | cpio -oc" | gzip | dd of=/tmp/meister_etc.cpio.gz

Datensicherung auf ein Magnetband

Das folgende Skript "shareTar.sh" wechselt ins Verzeichnis "/samba/share/mitarbeiter" und sichert dort die Verzeichnisse "abc" und "xyz" auf das im Bandlaufwerk "/dev/st0" eingelegte Magnetband. Nach erfolgreicher Datensicherung wird das Magnetband zurückgespult und ausgeworfen.

#!/bin/bash
#
# Author        Michael Kuhn
# Date          27 January 2009
# Description   Script to backup the SMB share of host gnu using tar(1).
#               The script should be launched as user "root" with
#
#                   nohup /home/sisis/bin/shareTar.sh &
#

TAPE=/dev/st0
LISTING=/home/sisis/shareTar.list

# Launch the backup
#
printf "Backup started at %s\n" "$(date)"
cd /samba/share/mitarbeiter
#
# There is no backup for directory "kuhn" since there is only old stuff in it
tar cf ${TAPE} abc xyz
rc=$?
printf "Backup done with rc=%d\n" ${rc}
test ${rc} -eq 0 || {
  printf "PANIC -- check the backup tape or device\n\n"
  exit 1
}

# Re-read the archive
#
printf "re-reading the tape... started at %s\n" "$(date)"
tar tvf ${TAPE} > ${LISTING}
numberOfFiles=$(wc -l < ${LISTING})

printf "\nDone -- found %d files on archive\n" ${numberOfFiles}
printf "Listing can be found in ${LISTING}\n"
printf "Backup done at %s\n\n" "$(date)"

test -c ${TAPE} && mt -f ${TAPE} rewoffl
exit ${rc}

Weblinks

Vorlage:dewi