Backup-Strategien
Backups werden immer wichtiger. Deshalb möchte ich hier backup Strategeien für Windows, sowie für Linux Systeme vorstellenBackup von Windows-Systemen
robocopy
Robocopy ist ähnlich wie rsync für linux ein excellentes tool um grosse Datenmengen zu kopieren!Ein Backup kann man mit Robocopy beispielsweise so machen:
robocopy H:\ B:\BACKUPS\homedrive /MIR /TEE /LOG:B:\logs\backup.log
Der parameter /MIR gibt dabei an, dass ein "Ebenbild" (mirror) auf dem Zielverzeichnis entstehen soll, /TEE (optional) in Verbindung mit /LOG (optional) zeigt das Konsolenfenster an, während gleichzeitig alles in ein logfile geschrieben wird. -Dieses logfile sollte man zusätzlich regelmässig kontrollieren, ob das Backup noch sauber durchläuft!
Wenn man das Windows-Profil backuppen will, muss man zusätzlich noch einige file-typen weg lassen:
robocopy C:\profiles B:\BACKUPS\profiles /MIR /R:3 /W:10 /XF *.dat *.dat.log *.exe *.dll *.tmp *.ocx *.xvd *.class *.lock *.cch.* /XD "C:\profiles\%username%\Lokale Einstellungen\Temp" /TEE /LOG+:B:\logs\backup.log
Der parameter /R:3 gibt an, dass maximal 3 mal versucht werden soll die Datei zu kopieren, /W:10, dass pro Versuch 10s gewartet werden soll (sonst kann es bei nicht lesbaren files zu einer fast-endlosschleife kommen!), /XF schliesst gewisse nicht-kopierbare files aus und /XD tut dasselbe mit den Verzeichnissen.
Die parameter /TEE und /LOG kennen wir hier schon; einziger unterschied ist das '+' nach /LOG; dieses bewirkt, dass nicht immer ein neues logfile erstellt wird, sondern das log angehängt wird.
Backup von Linux Systemen
rsync
Wenn man zwei Server und genügend Platz hat ist die beste Lösung ein rsync-images des ganzen root-Verzeichnissbaums (/) auf dem zweiten Server zu machen; fällt so eine Platte aus, kann man diese relativ unkompliziert wieder zurückspielen; ist also sozusagen eine art "remote-raid1" ;-)Im folgenden Beispiel ist:
server1: Der Server auf dem das Backup liegt
server2: Der Server der gesichert wird
So gehts:
Auf dem server, auf dem die backups abgelegt sind (server1) folgendes Script anlegen:
/opt/scripts/backup.sh
WHICH="/usr/bin/which" CHMOD=$($WHICH chmod) RSYNC="$($WHICH rsync) --rsh=$($WHICH ssh)" TAR=$($WHICH tar) ### SERVER 2 ### # System sync $RSYNC -av --numeric-ids --delete --delete-excluded --exclude-from=/etc/rsync-excludes root@server2:/ /backup/sysimage/server2/ >> /var/log/server2_rsync.log 2>> /var/log/server2_rsync.err
Das ist im Prinzip schon alles! -Jetzt müssen wir auf server1 nur noch die Verzeichnisse und das exclude-file anlegen:
mkdir -p /backup/sysimage/server2/
vi /etc/rsync-excludes
/proc/* /sys/*
(/proc und /sys sind spezielle Verzeichnisse und müssen/sollten nicht gesichert werden!)
Nun noch einen Cronjob machen, der das Backup täglich ausführt:
crontab -e
# Backup 30 3 * * * /opt/scripts/backup.sh
Sicherung zurückspielen
Nun, da wir ein volles Backup haben können wir im falle eines Plattencrashses ganz einfach das Image zurück spielen!Folgende Schritte sind dafür aber nötig:
1. Evtl. Festplatte in server2 austauschen
2. server2 mit einem sog. "live linux" booten (z.B. "sysrescuecd")
3. Dort "cfdisk" aufrufen und die Partitionen 1:1 so erstellen wie sie zuvor auf server2 waren UND formatieren (mkfs.ext3 /dev/hdaX)
4. Jetzt wird das "system" in einem abgesonderten Verzeichnis erstellt, und die neuen Partitionen darin gemountet:
Das folgende Beispiel geht von einem setup mit separaten Partitionen für / /boot, /home, /tmp, /usr, /var aus!)
mkdir /mnt/system
mount /dev/hda1 /mnt/system
mkdir -p /mnt/system/{boot,tmp,var,usr,home,proc}
mount /dev/hda1 /mnt/system
mount /dev/hda2 /mnt/system/boot
mount /dev/hda3 /mnt/system/tmp
mount /dev/hda5 /mnt/system/home
mount /dev/hda6 /mnt/system/usr
mount /dev/hda7 /mnt/system/var
mount -t proc proc /mnt/system/procNun stellen wir sicher dass auf server2 per ssh zugegriffen werden kann; im Falle von "sysrescuecd" muss man den sshd starten und mit passwd ein root-passwort vergeben.
Auf server1 eingelogt nun das backup wieder mit rsync zurückspielen:
rsync -av --numeric-ids --exclude-from=/etc/rsync-excludes /backup/sysimage/server2/ root@server2:/mnt/system/
Nun können wir uns in dieses system "chrooten".
Auf server2 muss man dazu noch folgendes eingeben:
chroot /mnt/system
Hier muss dann nur noch der Bootloader wieder installiert werden, z.B. im Falle von grub:
grub-install /dev/hda
Nun kann man den chroot verlassen, unmounten und neustarten: Das System müsste wieder den ursprungszustand haben! ;-)
exit umount /mnt/system* reboot
Festplatten-Image erstellen
Manchmal ist es am besten man erstellt sich gleich ein ganze Image der Festplatte; dieses kann dann denkbar einfach wieder zurückgespielt werden:Image erstellen
dd if=/dev/hda | gzip -c | cat > image.gz
Image zurückspielen
gzip -d -c image.gz | dd of=/dev/hda
Oder das ganze direkt remote auf einen Backupserver
dd if=/dev/hda | gzip -c | ssh user@server "cat > image.gz"
ssh user@server "gzip -d -c image.gz" | dd of=/dev/hda
LVM-Snapshots
LVM-Snapshots eignen sich hervorragend um online-Backups (d.H. im laufenden Betrieb) von Daten zu machen die sich häufig ändern und so beim blossen kopieren korrupt werden könnten, wie das z.B. bei Datenbank-, oder Mailservern der Fall ist.Ein "LVM-Snapshot" erstellt eine 1:1 kopie eines laufenen LogicalVolumes genau in zu der Zeit wo man es ausführt.
Das Backup geht sehr einfach:
#ggf. Alter Snapshot entfernen lvremove -f /dev/dbvg/dbbackup_lvsnapshot #Neuer Snapshot erstellen lvcreate -L20G -s -n dbbackup_lvsnapshot /dev/dbvg/db_lv
Um Platzprobleme zu vermeiden sollte man die Grösse des Snapshot-Volumes gleich gross machen wie das Original.
Related Links
| Link | Beschreibung |
| rsync-ressourcen | Viele Möglichkeiten mit rsync werden hier beschrieben. |
| linux-magazin.de: Unwetterzentrale | Eine tolle Backup Lösung von linux-magazin um das ganze System zu sichern. |
| Festplattenimage mit Linux erstellen | Gute Beschreibung, wie man mit Linux Festplattenimages erstellen kann. |
| Image-Erstellung mit dd | Sehr guet Beschreibung diverses Backup-Möglichkeiten mit DD |
| Using LVM for MySQL Backup and Replication Setup | Eine sehr gute Beschreibung vom "MySQL Performance Blog" |

Neuen Kommentar posten