Servercommunity Foren-Übersicht Servercommunity
Das informative Forum für Fragen rund um Server
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Backup2l unter SuSE

 
Neues Thema eröffnen   Neue Antwort erstellen    Servercommunity Foren-Übersicht -> How-To's
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Boum



Anmeldedatum: 29.07.2003
Beiträge: 1929
Wohnort: Karlsruhe

BeitragVerfasst am: Mo Sep 27, 2004 09:15    Titel: Backup2l unter SuSE Antworten mit Zitat

Angepasst von http://amaris.aenaeis.org/backup.html für SuSE

Alles, was angepasst werden muss, ist mit zwei "%%" versehen!

Dieses Howto geht von einem symmetrischen Backup-Szenario aus. Heisst: "ich sichere bei dir, du sicherst bei mir". Wer nur seinen Server sichern möchte, kann die in blau geschriebenen Teile weglassen bzw. muss diese auf dem Rechner, auf den die Backups geschrieben werden, einrichten.

Verzeichnisse anlegen
Code:
groupadd mybackup
useradd -g mybackup -m -s /bin/false mybackup

kurz prüfen, ob der Account auch wirklich gesperrt ist mit
Code:
passwd -S mybackup

(Sollte etwa so aussehen:
Server hat Folgendes geschrieben:
mybackup LK 09/27/2004 0 99999 7 -1

wichtig ist hier das "L". Falls kein "L", ein
Code:
passwd -l mybackup

zum Sperren absetzen.) Verzeichnisse, in denen das Backup-Zeug gelagert wird, erstellen:
Code:
md /home/mybackup/own
md /home/mybackup/own.restore
md /home/mybackup/own.empty
md /home/mybackup/anderedomain
md /home/mybackup/scripts
md /root/mysqldump
chown mybackup:mybackup /home/mybackup/anderedomain
chmod -R 700 /home/mybackup/{own,own.empty,own.restore,anderedomain}
Anm.: /home/mybackup/anderedomain ist das Verzeichnis, in das der andere Rechner sichern würde. "anderedomain" ist natürlich kein sonderlich schöner Name, also ggf. anpassen.

Pakete installieren
von http://prdownloads.sourceforge.net/backup2l/backup2l_1.3.tar.gz?download
Code:
wget http://mesh.dl.sourceforge.net/sourceforge/backup2l/backup2l_1.3.tar.gz
tar xzf backup2l_1.3.tar.gz
cd backup2l-1.3/
./install-sh
y
y

in /etc/cron.daily/zz-backup2l letzte Zeile ändern in:
Code:
! which backup2l > /dev/null || nice -19 backup2l -b &> /var/log/backup2lCron

GnuPG installieren und einrichten:
Code:
yast2 --install gpg
gpg --gen-key
1
1024
y
%%Name des Benutzers%%
%%Email des Benutzers%%
%%Kommentar%%
o
gpg --export -a %%Besitzer%% > %%name%%.gpg # exportiert den öffentlichen Schlüssel
gpg --export-secret-keys -a %%Besitzer%% > %%nameSecret%%.gpg # exportiert den geheimen Schlüssel
chmod 600 *.gpg

Schweine-Wichtig: Diese beiden Keys jetzt sofort auf den lokalen Rechner zuhause übertragen, auf CD brennen, die Passphrase an eine Stelle tätowieren lassen, wo Unbefugte nie hinschauen können. Ohne den Key und die Passphrase sind alle Backups nämlich definitiv, unwiederbringlich und sowieso FÜR DEN GEIER. Weg. Futsch. Kaputt. Keys jetzt gesichert? Fein.

Im "Fall der Fälle" (bei einem Restore) macht man einen
Benutzer hat Folgendes geschrieben:

gpg --import %%name%%.pgp
gpg --import --allow-secret-key-import %%nameSecret%%.pgp

Rsync:
Code:
yast2 --install rsync

Datei /etc/rsyncd.conf einrichten:
Code:

gid = mybackup
read only = true
use chroot = true
transfer logging = true
log format = %h %o %f %l %b
log file = /var/log/rsyncd.log
hosts allow = %%xxx.xxx.xxx.xxx%% %%xxx.xxx.xxx.xxx%%
[%%shareName%%]
    path = /home/mybackup/anderedomain
    comment = Backup für backuppartner
    auth users = %%Username%%
    secrets file = /root/rsyncd.secrets
    read only = false
    list = false
    uid = mybackup
    gid = mybackup
    dont compress = *.gpg

In /root/rsyncd.secrets kommen die Zugangsdaten:
Code:
%%rsyncUserName%%:%%passwort%%

also zum Beispiel "Heinz:T0llesP4ssw0rt".
Jetzt noch ein

Code:
chmod 600 /root/rsyncd.secrets

Sicherstellen, dass der rsyncd (Daemon) auch läuft per yast2:
System->Runlevel-Editor->rsyncd->Aktivieren (falls noch nicht aktiviert) und ggf. im Expertenmodus die Runlevels setzen, in denen er starten soll (z.B.: 3 und 5).


Datei suseRsync erstellen in /home/mybackup/scripts:
Code:
#!/bin/sh -e
# kleines tool um die backupshares besser zu kontrollieren
# zu beachten: pfade müssen absolut ausformuliert werden
# damit diese pfade im rsync funktionieren müssen diese auch mit einem trailing slash versehen werden
# "/home/bla/dings/" ist korrekt
# "bla/dings/" bzw. "/home/bla/dings" sind fehlerhaft
# Author: Cybernd <cybernd@cybernd.at>, http://cybernd.at

# This work is licensed under the Creative Commons
# Attribution-NonCommercial-ShareAlike License. To view a copy of this license,
# visit http://creativecommons.org/licenses/by-nc-sa/1.0/ or send a letter to
# Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

BACKUP_DIR="/home/mybackup/own/"
RESTORE_DIR="/home/mybackup/own.restore/"
EMPTY_DIR="/home/mybackup/own.empty/"

case $1 in
    %%backup%%)
   PASSWORD_FILE="/home/mybackup/scripts/%%backup%%.pwd"
   RSYNC_USR="%%Username%%"
   RSYNC_HOST="%%backup.de%%"
   RSYNC_SHARE="%%backupShare%%"
   ;;
    example)
   PASSWORD_FILE="/home/mybackup/scripts/example.pwd"
   RSYNC_USR="example"
   RSYNC_HOST="example.tld"
   RSYNC_SHARE="example"
   ;;
esac

if ! test -r $PASSWORD_FILE ; then
    echo " PASSWORD_FILE does not exist"
    exit 0
fi
if ! test -d $BACKUP_DIR ; then
    echo " BACKUP_DIR does not exist"
    exit 0
fi
if ! test -d $EMPTY_DIR ; then
    echo " EMPTY_DIR does not exist"
    exit 0
fi
if ! test -d $RESTORE_DIR ; then
    echo " RESTORE_DIR does not exist"
    exit 0
fi

 
case $2 in
    restore)
   echo "restore started"
   rsync --stats --delete --checksum --verbose --update --recursive \
   --password-file=$PASSWORD_FILE \
   rsync://$RSYNC_USR@$RSYNC_HOST/$RSYNC_SHARE \
   $RESTORE_DIR
   echo "done"
   ;;
    save)
   echo "save started"
   rsync --include=*.gpg --exclude=* --stats --delete --checksum --verbose --update --recursive \
   --password-file=$PASSWORD_FILE \
   $BACKUP_DIR \
   $RSYNC_USR@$RSYNC_HOST::$RSYNC_SHARE
   echo "done"
        ;;
    clear)
   echo "clear started"
   rsync --stats --delete --checksum --verbose --update --recursive \
   --password-file=$PASSWORD_FILE \
   $EMPTY_DIR \
   $RSYNC_USR@$RSYNC_HOST::$RSYNC_SHARE
   echo "done"
        ;;
    list)
        echo "Contents of remote directory:"
        rsync --password-file=$PASSWORD_FILE $RSYNC_USR@$RSYNC_HOST::$RSYNC_SHARE
;;
    *)
   echo "usage $0 backuppartner restore|save|clear|list"
   echo " "
   echo " backuppartner: spezifiziert den backuppartner"
   echo " "
   echo " restore: holt die daten des fremden shares ins lokale restoreverzeichnis"
   echo " save: schreibt das backup ins fremde share"
   echo " clear: löscht den inhalt des fremden shares !! mit vorsicht verwenden !!"
   ;;
esac

"%%backupShare%%" ist der eintrag in der fernen rsyncd.conf. Die Benutzer-Passwörter für die rsync-Authentifizierung schmeisst man in eine Datei in /home/mybackup/scripts (im Klartext; chmod 600 nicht vergessen; die Backups werden ja eh extra verschlüsselt). Ausprobieren kann man das Skript (chmod u+x suseRsync nicht vergessen) mit einem "suseRsync backup list". Sichern kann man mit "suseRsync backup save". "backup" ist hierbei jeweils durch den Benutzer zu ersetzen, den man im Skript eingegeben hat.

Backup2l einrichten
In /etc/backup2l.conf:
Code:
SRCLIST=(/)

Ausnahmen definieren (mybackup wird nicht mitgesichert)
Code:
SKIPCOND=(-path "/proc" -prune -o -path "/var/run" -prune -o -path "/home/mybackup" -prune -o -path "/root/trash" -prune -o -path "/tmp" -prune)

Weitere Verzeichnisse mit '-o -path "/bla" -prune ausnehmen.
Code:
BACKUP_DIR="/home/mybackup/own"

Hier wird hingesichert. Sachen, die vor und nach dem Backup passieren:
Code:
PRE_BACKUP ()
{
    echo " running mysqlcheck"
    mysqlcheck \
    --all-databases \
    --auto-repair \
    --extended \
    --optimize \
    --silent \
    --verbose \
    --user=root \
    --password=%%MYSQL-ROOT-PW%%
   
    echo " dumping mysql to /root/mysqldump"
    mysqldump \
    --all-databases \
    --add-drop-table \
    --add-locks \
    --all \
    --complete-insert \
    --extended-insert \
    --flush-logs \
    --force \
    --quick \
    --user=root \
    --password=%%MYSQL-ROOT-PW%% \
    > /root/mysqldump/mysqldump.sql
}
POST_BACKUP ()
{
    echo " post-backup: create encrypted files"
    echo " creating $VOLNAME.$NEW_BID.temp.tar containing all backup files"
    tar cf $VOLNAME.$NEW_BID.temp.tar $VOLNAME.$NEW_BID.*
    echo " encrypting to $VOLNAME.$NEW_BID.all.tar.gpg"
    gpg -e -o $VOLNAME.$NEW_BID.all.tar.gpg -r "=%%Name des Benutzers%% <%%Email des Benutzers%%>" $VOLNAME.$NEW_BID.temp.tar
   
    echo " deleting $VOLNAME.$NEW_BID.temp.tar"
    rm $VOLNAME.$NEW_BID.temp.tar
   
    echo "=========== rsync start"
    /home/mybackup/scripts/suseRsync %%backup%% save
    echo "=========== rsync stop"
   
    echo "chmod 600"
    chmod 600 $VOLNAME.*
}

Und jetzt noch diese Zeile
Code:
# UNCONFIGURED=1

auskommentieren. Da das mysql-root-Passwort drinsteht, sollte man einen
Code:
chmod 600 /etc/backup2l.conf
nachschieben.

Das war's. Wiederherstellen geht so:
Code:
/home/mybackup/scripts/suseRsync %%backup%% restore
for i in *.gpg; do
    gpg $i
done
backup2l --time bid --restore patternlist

die bid ist die Nummer, die die jüngste Backupdatei hat (z.B. 2034). Jetzt ggf. auf den MySQL-Dump zugreifen, falls sich eine Tabelle verheddert hat, weil sie bei der Sicherung gerade im Zugriff war.
Unter Debian habe ich ein restore im "/"-Verzeichnis bereits erfolgreich zelebriert. Wer LILO verwendet, sollte dann ein "lilo" nicht vergessen, sonst wird der Kernel nicht gefunden.
_________________
Planung ist das Ersetzen des Zufalls durch Irrtum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Boum



Anmeldedatum: 29.07.2003
Beiträge: 1929
Wohnort: Karlsruhe

BeitragVerfasst am: Mo Sep 27, 2004 09:29    Titel: Antworten mit Zitat

Ergänzungen:
in der /etc/backup2l.conf kann man eintragen, wie viele Sicherungen angelegt werden.
Code:

# Number of levels of differential backups (1..9)
MAX_LEVEL=3

# Maximum number of differential backups per level (1..9)
MAX_PER_LEVEL=4

# Maximum number of full backups (1..9)
MAX_FULL=2

Legt maximal 2 Vollbackups an. Die inkrementellen Backups dazwischen heissen dann 11, 1101, 1102, 1103 und 1104. Das ganze dann bis 1404, dann kommt wieder ein Vollbackup. Je höher hier die Level-Zahlen, desto mehr Inkrementelle Backups werden angelegt.
_________________
Planung ist das Ersetzen des Zufalls durch Irrtum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Servercommunity Foren-Übersicht -> How-To's Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de