Backup auf Tastendruck

Datensicherung mit Shell-Kommandos

28.12.2012 Für die Datensicherung können Sie komfortable Backupprogramme verwenden – doch die müssen Sie erst konfigurieren. Wenn es schnell gehen soll, reicht ein einziger Befehl in der Shell.

Im Schwerpunkt dieser Ausgabe haben wir das Programm LuckyBackup vorgestellt, mit dem Sie Ihre persönlichen Daten komfortabel auf einem externen Datenträger oder über das Netzwerk auch auf einer entfernten Maschine sichern können. Wer sich den Einsatz der Kommandozeile zutraut, kann aber mit wenigen Kommandos dasselbe erreichen: In diesem Artikel stellen wir die nötigen Kommandos für die Datensicherung auf USB-Platte und -Stick sowie über das Netzwerk vor.

Backup auf Platte und Stick

Haben Sie den Datenträger für Ihre Backups via USB am PC angeschlossen, müssen Sie nur wissen, welche Daten zu sichern sind und unter welchem Mountpoint Sie den Backupdatenträger finden. Alle modernen Linux-Versionen hängen eine via USB angeschlossene Platte bzw. einen USB-Stick in einem Ordner /media/Volumename/ ein, wobei Volumename die Datenträgerbezeichnung ist, die Sie bei Bedarf auch ändern können.

Öffnen Sie ein Terminalfenster, schließen Sie Platte oder Stick an und geben Sie nach kurzer Wartezeit das Kommando mount | grep media ein – in der ausgegebenen Liste sollte sich jetzt ein Eintrag für das frisch angesteckte Speichermedium befinden, z. B. wie der folgende:

/dev/sdf1 on /media/Backup-Platte type vfat (rw, ...)

In diesem Beispiel ist die Partition /dev/sdf1 (auf der externen Platte sdf) mit dem VFAT-Dateisystem (FAT32) formatiert, und Linux hat sie unter /media/Backup-Platte/ eingehängt, weil die Datenträgerbezeichnung "Backup-Platte" lautet. Je nach Situation erscheinen in der Ausgabe noch weitere Datenträger (Abbildung 1), Sie müssen dann den richtigen erkennen. Wenn Sie ein sinnvolles Label vergeben haben, können Sie Stick oder Platte daran gut erkennen.

Abbildung 1

Abbildung 1: In der Anzeige der Mountpoints erkennen Sie externe Platten und Sticks daran, dass die Ausgabezeilen mit "/dev/sd" anfangen. Der hier vorhandene Eintrag für "/dev/sr0" gehört dagegen zu einer DVD.

Sie können nun zunächst einen Unterordner Backups erstellen, in den Sie dann später (regelmäßig) die Daten sichern:

mkdir /media/Backup-Platte/Backup

Um Ihr komplettes Home-Verzeichnis zu sichern, verwenden Sie das Kommando

cp -av /home/USERNAME /media/Backup-Platte/Backup/

in dem Sie USERNAME durch Ihren Benutzernamen ersetzen; die Datenträgerbezeichnung müssen Sie in allen Befehlen anpassen. Das Kommando kopiert rekursiv Ihr komplettes Home-Verzeichnis in den Backupordner und erzeugt dazu zunächst den Ordner /media/Backup-Platte/Backup/USERNAME/ – so können Sie das Backupverzeichnis noch für andere Aufgaben verwenden.

Die Option -a sorgt unter anderem dafür, dass Dateiattribute (soweit möglich) erhalten bleiben. Da im Beispiel die externe Platte ein FAT32-Dateisystem hat, kann cp keine Eigentümerdaten und Zugriffsrechte sichern, aber zumindest die Zeitstempel (Datum der letzten Änderung) bleiben erhalten.

Falls sich in Ihrem Home-Verzeichnis Dateien befinden, für die Sie keine Leserechte haben (z. B. weil Sie diese dort als root erzeugt haben), müssen Sie für eine vollständige Datensicherung dem Kommando noch den Befehl sudo voranstellen und zur Bestätigung das Root-Passwort (OpenSuse) bzw. Ihr eigenes Passwort (Ubuntu) eingeben, z. B. so:

[esser@quadamd:~]$ sudo cp -av /home/esser /media/Backup-Platte/Backup/
[sudo] password for esser:

Der Befehl eignet sich in dieser Form aber nur für das allererste Backup – wenn Sie einige Tage später erneut die Daten sichern wollen und dafür dasselbe Kommando verwenden, kopiert cp wieder sämtliche Dateien. Das ist nicht nötig, und mit der Option -u (für Update) können Sie dafür sorgen, dass der Befehl stattdessen nur die seit dem letzten Backup geänderten Dateien sichert.

Im Kasten "cp" mit Update-Option sehen Sie, wie die Update-Option arbeitet: Nach einem Vollbackup (eines winzigen Beispielordners) haben wir bei zwei Dateien mit touch das Datum der letzten Änderung aktualisiert; der zweite cp-Lauf mit -u überträgt dann nur diese beiden Dateien, und ein unmittelbar folgender dritter cp-Aufruf tut gar nichts. Für die (erneute) Sicherung des Home-Verzeichnisses ergänzen Sie also im cp-Aufruf einfach die Option -u.

"cp" mit Update-Option

[esser@quadamd:tmp]$ cp -rv A/* B/
"A/abc" -> "B/abc"
"A/def" -> "B/def"
"A/ghi" -> "B/ghi"
"A/jkl" -> "B/jkl"
"A/sub/DEF" -> "B/sub/DEF"
"A/sub/ABC" -> "B/sub/ABC"
[esser@quadamd:tmp]$ touch A/def A/sub/DEF
[esser@quadamd:tmp]$ cp -ruv A/* B/
"A/def" -> "B/def"
"A/sub/DEF" -> "B/sub/DEF"
[esser@quadamd:tmp]$ cp -ruv A/* B/
-- (keine Ausgabe)

Größere Änderungen mit "rsync"

Die Update-Option von cp ist bereits hilfreich, doch manchmal ist selbst das Kopieren veränderter Dateien noch zu viel des Guten: Das gilt immer dann, wenn es sich um große Dateien handelt, an denen es nur kleine Änderungen gibt. In solchen Fällen ist es besser, wirklich nur die Änderung zu übertragen, also im Backupverzeichnis die Kopie zu "patchen".

Genau das ist mit dem Tool rsync (remote synchronization) möglich: Der Name deutet schon an, dass das Programm auch entfernte PCs als Ziel (oder Quelle) des Datentransfers akzeptiert. rsync versteht teilweise dieselben Optionen wie cp; Sie können darum für die bisherigen Beispiele einfach cp durch rsync ersetzen und z. B. das Home-Verzeichnis mit

rsync -av /home/esser /media/Backup-Platte/Backup/

sichern; an den Anfang gehört eventuell wieder ein sudo (s. o.). Über die Option -v gibt rsync den Namen jeder Datei aus, die das Tool kopiert; wenn Ihnen stattdessen eine Zusammenfassung lieber ist, lassen Sie die Option -v weg und ergänzen die Langoption --stats (Abbildung 2).

Abbildung 2

Abbildung 2: Über die Langoption "--stats" gibt "rsync" am Ende der Synchronisierung statistische Daten aus, darunter die Anzahl der bearbeiteten Dateien.

Backup ins Netz

Steht Ihnen ein regelmäßig über das Netzwerk erreichbarer Rechner zur Verfügung – z. B. ein weiterer Linux-PC daheim oder ein V-Server oder Root-Server bei einem Hostinganbieter [1] –, können Sie rsync dazu verwenden, das Backup auf diesen Rechner zu übertragen. Vorher sollten Sie sicherstellen, dass via Secure Shell (SSH) problemlos der Zugriff auf den Rechner funktioniert. Testen Sie zunächst, ob Sie sich mit ssh rechnername auf der entfernten Maschine anmelden können (siehe Shell-Tipps in dieser Ausgabe). Wenn das klappt, legen Sie auf dem entfernten PC einen Unterordner Backup an und sichern dann mit dem Kommando

rsync -avz /home/esser rechnername:Backup/

Die neu hinzugekommene Option -z sorgt dafür, dass rsync die Daten vor dem Transport komprimiert. Im lokalen Netzwerk läuft die Übertragung eventuell schneller, wenn Sie auf die Komprimierung verzichten, bei Internetverbindungen sind Sie mit -z in der Regel schneller.

Falls Sie auf dem entfernten Rechner einen anderen Benutzernamen haben, müssen Sie diesen noch voranstellen, so dass sich der Befehl

rsync -avz /home/esser username@rechnername:Backup/

ergibt. In dem Fall bietet es sich aber an, eine SSH-Konfiguration für den Rechner anzulegen, dazu bearbeiten (oder erzeugen) Sie die Datei config im versteckten Unterordner .ssh Ihres Home-Verzeichnisses und tragen die folgenden Zeilen ein:

Host rechnername
Hostname IP-Adresse
User username

Die Hostname-Zeile können Sie weglassen, wenn Ihr System den entfernten Rechner auch so am Namen erkennt. Sie können das Feature aber auch nutzen, um einen sehr langen Namen (z. B. Namen in der Form s893743.provider.de) abzukürzen: Haben Sie z. B. einen V-Server dieses Namens mit dem Benutzernamen u893743, könnten Sie

Host backup
Hostname s893743.provider.de
User u893743

eintragen und dann für die Datensicherung einfach

rsync -avz /home/esser backup:Backup/

statt

rsync -avz /home/esser u893743@s893743.provider.de:Backup/

eingeben – denn anstelle einer IP-Adresse darf auch ein (auflösbarer) Rechnername im Hostname-Feld stehen.

Gelöschte Dateien behalten?

Das Verhalten aller bisher vorgestellten Befehle ist übrigens konservativ in dem Sinne, dass lokal gelöschte Dateien nicht aus dem Backup entfernt werden, wenn Sie dieses aktualisieren. Wenn Sie das nicht möchten, können Sie rsync die Langoption --delete mitgeben: Dann löscht es Ordner und Dateien aus dem Backup, die es auf dem Ursprungsrechner nicht mehr gibt. Das cp-Kommando beherrscht keinen vergleichbaren Trick, was an den verschiedenen Aufgaben der Tools liegt: cp ist zum Kopieren da, während rsync synchronisiert, also Verzeichnisbäume synchron hält, was auch ein Löschen nicht mehr benötigter Dateien bedeuten kann.

Sie haben nun das notwendige Handwerkszeug, um Backups schnell auf der Konsole zu erledigen, ohne umständlich eine GUI-Anwendung zu starten und zu konfigurieren. Die für die Datensicherung nötigen Befehle können Sie bei Bedarf auch in eine Shell-Skript-Datei schreiben, um die Parameter nicht jedesmal nachschlagen zu müssen. Ansonsten empfiehlt sich ein Blick in die Manpages von rsync und cp, denn die Tools bieten noch einige weitere Optionen. (hge)

Tipp: DVD-Upgrade

Die Aufgabenstellung: Ein 4,5 GByte großes ISO-Image mit einer Linux-Distribution soll von einem Server herunter geladen werden, auf den man per SSH Zugriff hat.

Auf dem Client befindet sich bereits ein ISO-Image dieser Distribution – allerdings handelt es sich dabei um die letzte Betaversion. Die Änderungen zwischen den beiden Versionen sind nicht gravierend, es wurden einige Pakete durch fehlerkorrigierte ausgetauscht.

Mit rsync ist es möglich, das ISO-Image der Betaversion auf die fertige Version zu aktualisieren – ohne das neue Image komplett herunterzuladen.

Auf dem Server liegt das Image (distri-2012-1-final.iso direkt in Ihrem Home-Verzeichnis, und auf dem Client haben Sie die Betaversion (distri-2012-1-beta.iso) auch im Home-Verzeichnis liegen. Vom Client aus können Sie sich über ssh server auf dem Server anmelden. Sie könnten also mit dem Befehl

scp server:distri-2012-1-final.iso .

die Datei kopieren – würden damit aber das gesamte Image übertragen. Stattdessen erstellen Sie zunächst auf dem Client eine Kopie Ihrer Betaversion, der Sie bereits den Namen der finalen Version geben, und rufen dann rsync auf:

[client]$ cp distri-2012-1-beta.iso distri-2012-1-final.iso
[client]$ rsync --partial --progress --stats server:distri-2012-1-final.iso .
distri-2012-1-final.iso
  4489568256 100%    9.53MB/s    0:07:29 (xfer#1, to-check=0/1)
Number of files: 1
Number of files transferred: 1
Total file size: 4489568256 bytes
Total transferred file size: 4489568256 bytes
Literal data: 1491000048 bytes
Matched data: 2998568208 bytes
File list size: 30
File list generation time: 0.008 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 507478
Total bytes received: 1491371357
sent 507478 bytes  received 1491371357 bytes  2539368.23 bytes/sec
total size is 4489568256  speedup is 3.01

Besonders informativ ist hier die letzte Zeile: Der "Speedup" ist 3,01, das bedeutet, dass rsync nur ein Drittel der Daten übertragen hat.

Auch einige Downloadserver von Distributoren unterstützen den Download mit rsync – wenn Sie einen solchen finden, können Sie Images mit rsync von dort herunterladen und ebenfalls ältere Versionen des Images zum Aktualisieren nutzen.

Für OpenSuse werden Sie z. B. unter rsync.opensuse.org fündig:

[esser@quad:~]$ rsync rsync://rsync.opensuse.org/
This is rsync.opensuse.org, public rsync server of openSUSE.org,
limited to 50 connections.
[...]
opensuse-full   The download.opensuse.org tree starting at /pub without daily devel snapshots
opensuse-full-with-factory      The download.opensuse.org tree starting at /pub including daily devel snapshots
[...]
[esser@quad:~]$ rsync rsync://rsync.opensuse.org/opensuse-full/
[...]
drwxr-xr-x          21 2009/11/16 18:41:47 .
drwxrwxr-x         140 2012/09/22 21:14:38 opensuse

Wie Sie im Beispiel sehen, versteht das Tool spezielle rsync-URLs, die mit rsync:// beginnen (und ansonsten wie normale Weblinks aufgebaut sind). Wenn Sie ein Verzeichnis auf dem Server (und keinen Ort für das lokale Ziel) angeben, zeigt rsync die auf dem Server liegenden Dateien und Unterordner an.

Ein Mirror für Ubuntu ist z. B. http://rsync://mirror.netcologne.de/ubuntu/. Die Distributionen verwalten auch Listen mit Spiegelservern, die rsync unterstützen, Sie finden sowohl für Ubuntu [3] als auch für OpenSuse [2] zahlreiche Angebote (Abbildung 3). Verwenden Sie nur Server, in deren Protokollliste auch rsync auftaucht. Für Kubuntu konnten wir keinen vergleichbaren Service entdecken, lediglich ältere Versionen (bis 11.10) fanden wir auf einigen Ubuntu-Mirrors.

Abbildung 3

Abbildung 3: In der Liste der Ubuntu-Mirrors sehen Sie, welche Server Sie auch via "rsync" ansteuern dürfen – hinter dem Eintrag "rsync" verbirgt sich auch direkt ein passender "rsync://"-Link.

Infos

[1] Artikel zu V- und Root-Servern: Hans-Georg Eßer, "Hier bin ich Root", EasyLinux 02/2012, S. 78 ff.

[2] OpenSuse-Mirror-Liste: http://mirrors.opensuse.org/

[3] Ubuntu-Mirror-Liste: https://launchpad.net/ubuntu/+cdmirrors

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare