Open Source im professionellen Einsatz
Linux-Magazin 11/2006

Perl-gesteuerte Rescue-CD sorgt für lange haltende Daten

Frisch verwurstet

Dieses Backup-System überrascht mit seinen inneren Werten: Mit präparierter Rescue-CD und einem Perl-Skript konserviert es den kompletten Festplatteninhalt von Clients via LAN auf einen Backupserver.

951

Was tun, wenn die Festplatte ausfällt? Schnellstens eine neue kaufen und das letzte Backup einspielen, selbstverständlich. Was aber, wenn mehrere Partitionen auf der Platte waren: Wie viel Platz war jeder zugeordnet? Welches Filesystem war dort installiert?

Die Wiederherstellung im Notfall (Desaster Recovery) fällt besonders leicht, wenn die Sicherung vollständige Partitionen umfasst, die man am Stück zurückspielen kann. Enthalten diese Partitionen aber beispielsweise das Root-Verzeichnis eines Linux-Systems oder läuft auf einem Laptop gar Windows, dann ist es nicht ohne weiteres möglich, im laufenden Betrieb geeignete Kopien zu ziehen.

Auf Sysresccd.org [2] gibt es allerdings eine Rescue-CD, die eine beliebige x86-Maschine mit einem Minimal-Linux bootet und wichtige Tools wie »partimage«, »sfdisk«, »fdisk«, »perl« und einen NFS-Client enthält. So kann das System anschließend Kontakt mit einem NFS-basierten Backupserver aufnehmen (Installation siehe unten) und sowohl das Partitionierungs-Layout als auch die Partitionen selbst sichern.

Notfall-CD als letzte Rettung

Natürlich möchte niemand umständliche Kommandos tippen, um ein Backup anzulegen. Nach dem Einlegen der CD in den zu sichernden Rechner sollte möglichst alles automatisch ablaufen. Deshalb beschreibt dieser Beitrag eine leicht angepasste Boot-CD, die nur kurz fragt, um welchen Rechner es sich handelt, und dann selbstständig alle Platten auf den Backupserver sichert.

Wie das Diagramm in Abbildung 1 zeigt, nimmt ein mit dieser CD gebooteter Rechner über das »autorun«-Skript sofort Kontakt mit dem Backupserver auf (im Beispiel unter der IP-Adresse 192.168.0.40). Ein zur Sysresc-CD hinzugefügtes »autorun«-Skript (Listing 1) initialisiert hierfür zunächst das Netzwerk und startet anschließend den NFS-Dienst mit seinen beiden Daemons »lockd« und »portmap«.

Abbildung 1: Die Rechner im lokalen Netz sichern ihre Partitionen mit Hilfe der gepatchten Sysresc-CD automatisch via LAN auf das LVM-Volume eines NFS-Servers.

Listing 1: Autorun

01 #!/bin/sh
02 # Sysresccd autorun script
03 IP=192.168.0.40
04 
05   # Start network
06 /etc/init.d/net.eth0 start
07 /etc/init.d/nfs start
08 
09   # Mount directory via NFS
10 mkdir /mnt/backup
11 mount $IP:/backup /mnt/backup ||
12  (echo "Mount failed ($IP down?)";
13   exit 1)
14 
15   # Run backup script over NFS
16 /mnt/backup/bin/pbb.bin
17 
18   # Close NFS
19 umount /mnt/backup

Danach mountet es das Verzeichnis »/backup« des Backupservers unter »/mnt/backup« auf dem zu sichernden Client. Dort steht dann das zu einem Binary kompilierte Perl-Skript »bin/pbb.bin« (Partition Based Backup) bereit. Das Skript »autorun« ruft es über NFS auf und lässt es auf dem Client ablaufen.

Das Skript präsentiert nach dem Start ein einfaches Textmenü mit den nummerierten Rechnernamen der konfigurierten Clients. Sobald der Anwender einen Eintrag auswählt, startet das Backup. Steht hingegen eine Restaurierung an, bricht der Benutzer einfach mit [Ctrl]+[C] ab und operiert weiter in der Root-Shell, in der er danach landet.

Listing 2 zeigt den Sourcecode des Backup-Skripts. Die Funktion »ask()« bietet voreingestellte Rechnernamen aus einer Liste an und »sfdisk« klappert sodann alle sichtbaren IDE-Festplatten auf seinem Client ab. Anschließend sichert das Tool deren Partionstabellen auf den Backupserver. Außerdem kopiert es den Master Boot Record der ersten Platte »/dev/hda« dorthin. Die gesicherten Daten liegen danach im Verzeichnis »/backup/data/Rechner« unter dem anfangs ausgewählten Rechnernamen auf dem Backupserver.

Listing 2:
»pbb«

01 #!/usr/bin/perl -w
02 use strict;
03 use Pod::Usage;
04 use Sysadm::Install qw(:all);
05 use Log::Log4perl qw(:easy);
06 use Log::Log4perl::Appender::Screen;
07 
08 Log::Log4perl->easy_init($DEBUG);
09 
10 my $MDIR      = "/mnt/backup/data";
11 my %ptypes  = map { $_ => 1 }
12          qw(83 7);
13 my @machnames = qw(desktop1
14                    desktop2 laptop1);
15 my %machnames = map { $_ => 1 } @machnames;
16 
17 my $mname = pick "Box", @machnames, 1;
18 
19 my %drive_done;
20 
21 my $bdir    = "$MDIR/$mname";
22 my $oldbdir = "$MDIR/$mname.old";
23 
24   # Move old backup aside
25 if(-d $oldbdir) {
26   LOGDIE "$oldbdir already exists";
27 }
28 mv $bdir, $oldbdir if -d $bdir;
29 mkd $bdir unless -d $bdir;
30 
31     # Save the master boot record
32     # of the first IDE disk
33 tap qw(dd if=/dev/hda),
34     "of=$bdir/hda.mbr",
35     qw(count=1 bs=512);
36 
37 my $sf = `sfdisk -d`;
38 
39 while($sf =~ /^(.*Id=s*(w+).*)/mg) {
40   my($line, $id) = ($1, $2);
41 
42   next unless exists $ptypes{$id};
43 
44   my($path) = split ' ', $line, 2;
45   (my $dev   = $path) =~ s#.*/##;
46   (my $drive = $dev)  =~ s/d//g;
47 
48     # Save partition drive's table
49   if(!$drive_done{$drive}++) {
50     sysrun "sfdisk -d /dev/$drive " .
51            ">$MDIR/$mname/$drive.pt";
52   }
53 
54     # Save partition
55   sysrun "partimage -b -d -z1 -o save" .
56          " /dev/$dev $bdir/$dev.img.gz";
57 }
58 
59   # Remove old backup
60 rmf $oldbdir if -d $oldbdir;
61 
62 =head1 NAME
63 
64 pbb - Partition Based Backup
65 
66 =head1 SYNOPSIS
67 
68     pbb
69 
70 =head1 DESCRIPTION
71 
72 Scans all IDE hard drives, and backs
73 them up by partition.

Nur Wertvolles sichern

Beim Sichern von Partitionen fällt auf, dass diese oft nicht vollständig gefüllt sind. Wer nur die Rohdaten per »dd if=/dev/hda1 of=backup.img« abzieht, erzeugt am Ende ein unnötig großes Image »backup.img«. Das nützliche Tool »partimage« hingegen kennt die Struktur bekannter Dateisysteme wie Ext 2, Ext 3 oder des unter Windows gängigen NTFS (siehe Artikel in diesem Heft). Es bietet eine nützliche Fortschrittsanzeige, speichert nur relevante Daten und komprimiert diese außerdem noch.

Damit kann es ohne weiteres vorkommen, dass aus einer nur spärlich gefüllten 30 GByte großen Root-Partition eine Backup-Datei resultiert, die lediglich ein paar hundert MByte belegt.

Das Kommando »partimage -b -d -z1 -o save /dev/hda1 / Pfad/hda1.img.gz« ruft »partimage« im Batch Mode (»-b«) auf, damit es sich nach getaner Arbeit automatisch beendet. Die Option »-d« legt fest, dass das Tool dem Benutzer keinen Kommentar für die Beschreibung der entstehenden Imagedatei abverlangt. Mit »-o« überschreibt es rücksichtslos eventuell bestehende Imagedateien und »-z1« bestimmt, dass es die Komprimierung mit »gzip« durchführt. Dabei spaltet »partimage« die entstehende Backupdatei zur leichteren Handhabung in je 2 GByte große Teile, die es fortlaufend nummeriert.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Perl-Snapshot

    Mit Clonezilla gehen Systembackups und Restores mit nur wenigen Tastendrücken elegant von der Hand. Eine selbst produzierte Lösung reduziert den Aufwand auf das Einlegen einer CD, auf die der Admin zuvor ein Perl-Skript gebrannt hat.

  • BackupPC 3.2.0 mit FTP

    BackupPC, eine freie Lösung für die Datensicherung, ist in Version 3.2.0 mit neuen Features erhältlich.

  • Unwetterzentrale

    Backups sind wie Regenschirme: Hat man einen, passiert nichts. Vergisst man ihn, dauert es nicht mehr lange bis zur Katastrophe. Zumindest gegen drohende Datenschäden helfen ein kleiner Server, ein paar Festplatten und Linux-Bordmittel.

  • Insel-Hüpfer

    Wie unsicher manche Hoster ihre Server konfigurieren und damit die Daten ihrer Kunden gefährden, zeigt dieser Erfahrungsbericht. Im Island-Hopping-Verfahren konnte sich der Autor bei einem größeren deutschen Webanbieter über viele Lücken vorarbeiten und schließlich Root-Rechte erlangen.

  • Perl-Snapshot Linux-Magazin 2012/07

    Perlmeister Michael Schilli hat seinen Snapshot verfilmt.

comments powered by Disqus

Ausgabe 06/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.