PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Backup Server / nfs oder scp



mkuhnert
14.10.04, 14:38
Hallo,

ich möchte in einen Backup-Server unter SuSE 9.1 installieren (dieser soll andere SuSE-Linux-Server sichern).

Was empfiehlt Ihr? Einen NFS-Server darauf einrichten? SCP?

Es sind eine ganze Menge Daten die nachts jeden Tag kopiert werden sollen.

Bye, Marc.

delmonico
14.10.04, 14:42
Ändern die sich denn ständig? Ich mach inkrementelle Backups von allen Homeverzeichnissen auf meinen clients mit "rdiff-backup" das benutzt scp und funktioniert wunderbar.

Tomek
14.10.04, 14:42
Ich würde NFS oder RSYNC wählen, da SCP verschlüsselt arbeitet und somit je nach Datenmenge mehr Zeit braucht und mehr Last erzeugt.

RSYNC hat den Vorteil bei inkrementellen Backups nicht alle Daten übertragen zu müssen.

mkuhnert
14.10.04, 14:46
Ich würde NFS oder RSYNC wählen, da SCP verschlüsselt arbeitet und somit je nach Datenmenge mehr Zeit braucht und mehr Last erzeugt.

RSYNC hat den Vorteil bei inkrementellen Backups nicht alle Daten übertragen zu müssen.

Das scheint wohl ne gute Lösung zu sein!
Gibt es irgendwo ein brauchbares HOW-TO mit Beispielen?

Bye, Marc

Tomek
14.10.04, 14:51
Du meinst RSYNC? Hier:
Offizielle Projektseite von RSYNC (http://samba.anu.edu.au/rsync/)
Google Suchergebnisse (http://www.google.de/search?hl=de&q=rsync+howto&btnG=Suche&meta=lr%3Dlang_de)

Terran Marine
14.10.04, 21:52
Ich würde NFS oder RSYNC wählen, da SCP verschlüsselt arbeitet und somit je nach Datenmenge mehr Zeit braucht und mehr Last erzeugt.

RSYNC hat den Vorteil bei inkrementellen Backups nicht alle Daten übertragen zu müssen.

Verschlüsselt, aber per Parameter auch komprimiert.

Und für NFS und Rsync müssen extra Dienste laufen (im Falle von NFS sogar noch der portmapper), scp wird über die meist sowiso bestehende SSH-Verbindung abgewickelt.

Gruß
Terran

Blade
15.10.04, 09:34
Ich kann nur rsync empfehlen, sichert die Dateien superschnell und überträgt die Daten komprimiert und falls gewünscht auch mit ssh verschlüsselt übers Netzwerk/Internet. Habe mir ein Script mit den o.g. Anleitungen selbst gebastelt und bin topp zufrieden. Habe im Gegenzug die die Datensicherung mit scp rausgeschmissen, dauerte einfach zu lange.

Für rsync muss nicht unbedingt ein Dienst laufen. Ich rufe das Script 1x in der Nacht per Cron-Job auf :D .

mkuhnert
15.10.04, 10:14
Ich kann nur rsync empfehlen, sichert die Dateien superschnell und überträgt die Daten komprimiert und falls gewünscht auch mit ssh verschlüsselt übers Netzwerk/Internet. Habe mir ein Script mit den o.g. Anleitungen selbst gebastelt und bin topp zufrieden. Habe im Gegenzug die die Datensicherung mit scp rausgeschmissen, dauerte einfach zu lange.

Für rsync muss nicht unbedingt ein Dienst laufen. Ich rufe das Script 1x in der Nacht per Cron-Job auf :D .

Das hört sich echt gut an! Kannst Du das Skript als Beispiel posten? Wäre prima!

Bye, Marc

Blade
15.10.04, 15:15
Mach ich doch heute Abend glatt. Wer darüber hinaus ein paar Tipps als pdf- oder doc-file haben möchte, der schickt mir eine kurze Anfrage per Mail und meine gesammelten Werke gehen an Euch raus :D

mkuhnert
15.10.04, 15:17
Mach ich doch heute Abend glatt. Wer darüber hinaus ein paar Tipps als pdf- oder doc-file haben möchte, der schickt mir eine kurze Anfrage per Mail und meine gesammelten Werke gehen an Euch raus :D

winsel :-)

Fly
15.10.04, 20:10
Hier ist ein brauchbares HowTo für ein Spitzen Backup Server http://backuppc.sourceforge.net/faq/BackupPC.html

:)

Blade
15.10.04, 20:51
Hi mkuhnert,
hier kommt wie versprochen mein selbst geschriebenes Script. Ich bin kein Programmierer von Beruf, vielleicht kann man es einfacher schreiben. Aber ich weiß was es macht und ich weiß, wo ich etwas ändern muss.

Das folgende Script wird auf dem Backup-Server per Cron-Job nachts ein Mal gestartet. Zunächst wird überprüft, ob der extern übers Internet zu sichernde Server noch lebt :cool: . Dann wird rsync gestartet und alle geänderten Daten gesichert. Ich sichere so insgesamt 14 GB aktive Daten, wobei immer nur die geänderten Daten gesichert werden und die alten Dateien vor dem Überschreiben in ein Sicherungs-Unterverzeichnis mit Tages-Name gesichert werden. So habe ich alte Datenstände immer im Zugriff! Es werden aus Erfahrung, je nach Aktivität der User, zwischen 25 MB und 250 MB Daten pro Nacht übertragen. Das funzt mit einer 1000er DSL-Leitung und Volumentarif bestens. :D .

Im Vorspann des Scripts sind einige Platzhalter, die mit den entsprechenden Rechner-Daten angepasst gefüllt werden müssen. Die Datenübertragung über Internet läuft verschlüsselt und komprimiert ab. In dem Verzeichnis "INCLUDEFILE=--include-from=/usr/local/bin/rsync_server-extern/include_server" werden die zu sichernden Verzeichnisse ab dem root-Verzeichnis / angegeben. Ferner werden zunächst die Daten auf eine zu mountende FIREWIRE-Platte gesichert und dann noch auf eine interne HD-Platte.

Einfach mal studieren, dann kommst Du schon klar!


#!/bin/sh
# Script to do incremental rsync backups
# Andreas Runge 23.07.2004 - webman2002@arcor.de

# Configure these options ...

# mail address for status updates
# -> This is used to email you a status report
MAILADDR=mail@domain.de
# MAILADDR2=mail2@domain.de

# mail titel for status updates
# -> This is used to email you a status report
MAILTITEL="Daten-Sicherung: SERVER --> SERVERNAME"

# HOSTNAME local
# -> This is also used for reporting
HOSTNAME=server.domain.de

# HOSTNAME remote
# -> This is used for connection
HOSTNAME_R=server-extern-dyndns.ath.cx
USERNAME_R=useradminroot

# root directory from remote to backup
# oberstes Backup-Verzeichnis
BACKUPROOT_R=/

# directory to backup from remote
# -> This is the remote path to the directory you want to archive
# -> used for user notificatin
BACKUPDIR_R=/RAID1
BACKUPDIR_R2=/etc
BACKUPDIR_R3=/root
BACKUPDIR_R4=/srv
BACKUPDIR_R5=...
BACKUPDIR_R6=...
BACKUPDIR_R7=...

# include directory-file
INCLUDEFILE=--include-from=/usr/local/bin/rsync_server-extern/include_server

# excludes file - contains one wildcard pattern per line of files to exclude
# -> This is a rsync exclude file. See the rsync man page and/or the
# example_exclude_file

#EXCLUDES=example_exclude_file

# Mount-Point der externen FIREWIRE-PLATTE
MOUNTPOINT=/FIREWIRE_EXTERN

# Haupt-Backuppfad der Datensicherung angeben
ARCHIVEROOT_PFAD=$MOUNTPOINT/Server_extern/Backup

# directory which holds the backups of old data
ARCHIVEROOT_PFAD_OLDDATA=$MOUNTPOINT/Server_extern/Backup/AlteDaten
# directory which we save incremental changes to
INCREMENTDIR=`date +%Y.%m.%d`

# Log-Verzeichnis angeben
LOGDIR=/var/log/rsync
LOGFILE=$LOGDIR/server_extern-backup

# Unterverzeichnisse der Datensicherung
ARCHIVEROOT_TAG="$ARCHIVEROOT_PFAD/Tag"

# Backup-Pfad zur internen Zweit-Sicherung angeben
ARCHIVEROOT_INTERN=/BACKUPVOL/Server_extern

# ssh - file lokal sichern
echo "Sichere ssh-File: --> known_hosts"
cp /root/.ssh/known_hosts /root/.ssh/known_hosts.save

# From here on out, you probably don't
# want to change anything

# Datums-Variablen definieren
tag=$(/bin/date +%A)
tagnum=$(/bin/date +%d)
wochenum=$(/bin/date +%V)
monat=$(/bin/date +%B)
monatnum=$(/bin/date +%m)
jahr=$(/bin/date +%Y)

# Tag-Variable übersetzen
if [ "$tag" = "Monday" ]; then
tag="Montag"
else if [ "$tag" = "Tuesday" ]; then
tag="Dienstag"
else if [ "$tag" = "Wednesday" ]; then
tag="Mittwoch"
else if [ "$tag" = "Thursday" ]; then
tag="Donnerstag"
else if [ "$tag" = "Friday" ]; then
tag="Freitag"
else if [ "$tag" = "Saturday" ]; then
tag="Samstag"
else if [ "$tag" = "Sunday" ]; then
tag="Sonntag"
else
tag=$(/bin/date +%A)
fi
fi
fi
fi
fi
fi
fi

# options to pass to rsync for backup remote
OPTIONS="--force --ignore-errors --delete --delete-excluded \
--exclude-from=$EXCLUDES --backup --backup-dir=$ARCHIVEROOT_PFAD_OLDDATA/$INCREMENTDIR

-avz"

# options zur lokalen Zweit-Sicherung auf Festplatte intern
OPTIONS_INTERN="--force --ignore-errors --delete --delete-excluded \
--exclude-from=$EXCLUDES -avz"

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

do_rsync()
{
# post rsync accounting function
# Rescan SCSI-BUS
#/bin/rescan-scsi-bus.sh
for device in b #a c d e f g h
do
# mounte die Laufwerke
echo "----------------------------------------------------------------------------"

>>/tmp/rsync_hup_tmpfile
echo "Suche Sicherungs-Medium: /dev/sd${device}1" >>/tmp/rsync_hup_tmpfile
mount /dev/sd${device}1 $MOUNTPOINT
if [ -d $ARCHIVEROOT ]; then
echo "--> Sicherungs-Medium: /dev/sd${device}1 gefunden" >>/tmp/rsync_hup_tmpfile
echo "Tages-Backup --> $tag"
BACKUPINFO="Tages-Backup --> $tag"
ARCHIVEROOT="$ARCHIVEROOT_TAG"
else
echo "--> Sicherungs-Medium: /dev/sd${device}1" >>/tmp/rsync_hup_tmpfile
echo "Tages-Backup --> $tag"
BACKUPINFO="Tages-Backup --> $tag"
mkdir "$ARCHIVEROOT_TAG"
ARCHIVEROOT="$ARCHIVEROOT_TAG"
fi
# actual rsyncing function
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile
echo "$BACKUPINFO" >>/tmp/rsync_hup_tmpfile
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile
echo "Sicherung extern gestartet am: `date +%d.%m.%Y-%H:%M`" >>/tmp/rsync_hup_tmpfile
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile
echo "--> von Server: $HOSTNAME_R" >>/tmp/rsync_hup_tmpfile
echo "--> nach Server: $HOSTNAME" >>/tmp/rsync_hup_tmpfile
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile

echo "Datenuebertragung laeuft ..." >>/tmp/rsync_hup_tmpfile
# gesendete Datenmenge ermitteln
/sbin/ifconfig eth0 >/tmp/rsync_hup_tmpfile2
less /tmp/rsync_hup_tmpfile2 | grep eth0 >>/tmp/rsync_hup_tmpfile
less /tmp/rsync_hup_tmpfile2 | grep RX >>/tmp/rsync_hup_tmpfile
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile
rsync $OPTIONS $INCLUDEFILE -e "ssh -2" $USERNAME_R@$HOSTNAME_R:$BACKUPROOT_R

$ARCHIVEROOT
echo "Datenuebertragung beendet ..." >>/tmp/rsync_hup_tmpfile
# gesendete Datenmenge ermitteln
/sbin/ifconfig eth0 >/tmp/rsync_hup_tmpfile2
less /tmp/rsync_hup_tmpfile2 | grep eth0 >>/tmp/rsync_hup_tmpfile
less /tmp/rsync_hup_tmpfile2 | grep RX >>/tmp/rsync_hup_tmpfile
rm /tmp/rsync_hup_tmpfile2
echo "----------------------------------------------------------------------------" >>

/tmp/rsync_hup_tmpfile
echo "Sicherung extern beendet: `date +%d.%m.%Y-%H:%M`" >> /tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------" >>

/tmp/rsync_hup_tmpfile
echo "Sicherung intern gestartet am: `date +%d.%m.%Y-%H:%M`" >> /tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------" >>

/tmp/rsync_hup_tmpfile
# Daten auf der interner Platte mit rsync abgleichen ohne backup ...
# zunächst alle Daten auf Festplatte schreiben
/bin/sync
rsync $OPTIONS_INTERN $ARCHIVEROOT $ARCHIVEROOT_INTERN
echo "Sicherung intern nach: $ARCHIVEROOT_INTERN" >>/tmp/rsync_hup_tmpfile
echo "beendet am: `date +%d.%m.%Y-%H:%M`" >> /tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------"

>>/tmp/rsync_hup_tmpfile
# Sicherungs-Medium abmelden
umount $MOUNTPOINT
echo "--> Sicherungs-Medium: /dev/sd${device}1 abmelden" >>/tmp/rsync_hup_tmpfile
echo

"----------------------------------------------------------------------------">>/tmp/rsync_h

up_tmpfile
done
}

do_accounting()
{
# post rsync accounting function
# du -s $ARCHIVEROOT/* >> /tmp/rsync_hup_tmpfile
echo "Folgende Verzeichnisse wurden gesichert:" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R2" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R3" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R4" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R5" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R6" >> /tmp/rsync_hup_tmpfile
echo "--> von: $BACKUPDIR_R7" >> /tmp/rsync_hup_tmpfile
echo "--> nach: $ARCHIVEROOT/" >> /tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------" >>

/tmp/rsync_hup_tmpfile
echo "Sicherung beendet: `date +%d.%m.%Y-%H:%M`" >> /tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------" >>

/tmp/rsync_hup_tmpfile
echo " " >> /tmp/rsync_hup_tmpfile
echo "Mail $MAILADDR $MAILADDR2 -s $MAILTITEL < /tmp/rsync_hup_tmpfile"
Mail $MAILADDR $MAILADDR2 -s "$MAILTITEL" < /tmp/rsync_hup_tmpfile
# make sure our LOG-tree exists
install -d $LOGDIR
echo "Log-File wird erstellt: $LOGFILE"
less /tmp/rsync_hup_tmpfile >> $LOGFILE 2>&1

# ssh - file lokal sichern
cp --reply=yes /root/.ssh/known_hosts.save /root/.ssh/known_hosts
echo "Lösche tmp-File: rm /root/.ssh/known_hosts.save"
rm /root/.ssh/known_hosts.save

rm /tmp/rsync_hup_tmpfile
echo "Lösche tmp-Datei: rm /tmp/rsync_hup_tmpfile"; exit
}

# some error handling and/or run our backup and accounting
# überprüfen, ob der externe Server erreichbar ist
ping -c 1 $HOSTNAME_R

if [ $? -eq 0 ]; then
echo "----------------------------------------------------------------------------"

>/tmp/rsync_hup_tmpfile
echo "$MAILTITEL" >>/tmp/rsync_hup_tmpfile
echo "SERVER --> $HOSTNAME_R ist online ..." >>/tmp/rsync_hup_tmpfile
echo "Server $HOSTNAME_R erreichbar ...";
# Sicherungs-Verzeichnis intern überprüfen
if [ -f $ARCHIVEROOT_INTERN/Hinweis.txt ]; then
if [ -f $EXCLUDES ]; then
echo "--> Sicherung wird vorbereitet ..." >>/tmp/rsync_hup_tmpfile
# start the actual file transfer
do_rsync && do_accounting
else
echo "Finde die Ausschluss-Dateien/Excludes: $EXCLUDES nicht." >

/tmp/rsync_hup_tmpfile
Mail $MAILADDR $MAILADDR2 -s "$MAILTITEL" < /tmp/rsync_hup_tmpfile
echo "Finde die Exclude-Dateien: $EXCLUDES nicht!"
fi
else
echo "Finde das interne Archiv-Verzeichnis: $ARCHIVEROOT_INTERN nicht." >

/tmp/rsync_hup_tmpfile
echo "Eventuell ist das Medium nicht gemountet!" >> /tmp/rsync_hup_tmpfile
Mail $MAILADDR $MAILADDR2 -s "$MAILTITEL" < /tmp/rsync_hup_tmpfile
echo "Finde das Archiv-Verzeichnis: $ARCHIVEROOT_INTERN nicht."
echo "Eventuell ist das Medium nicht gemountet!"
fi
else
echo "Server $HOSTNAME_R ist offline ..."
echo "----------------------------------------------------------------------------"

>/tmp/rsync_hup_tmpfile
echo "Server $HOSTNAME_R ist offline ..." >>/tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------"

>>/tmp/rsync_hup_tmpfile
echo "Sicherung wurde gestoppt: `date +%d.%m.%Y-%H:%M`" >>/tmp/rsync_hup_tmpfile
echo "----------------------------------------------------------------------------"

>>/tmp/rsync_hup_tmpfile
Mail $MAILADDR $MAILADDR2 -s "$MAILTITEL" < /tmp/rsync_hup_tmpfile
echo "Sicherung wurde gestoppt!"
fi

# tmp-Verzeichnis löschen
if [ -f /root/.ssh/known_hosts.save ]; then
rm /root/.ssh/known_hosts.save
echo "Lösche tmp-File: rm /root/.ssh/known_hosts.save"
fi

if [ -f /tmp/rsync_hup_tmpfile ]; then
rm /tmp/rsync_hup_tmpfile
echo "Lösche tmp-File: rm /tmp/rsync_hup_tmpfile"; exit
fi
# Ende

Blade
15.10.04, 21:12
Noch ein paar Tipps aus dem Internet:

1. Tipp:
rsync -avze ssh <Host>:<Pfad> <Ziel>
(Verbindung über ssh-Server)
oder Code:
rsync -avz rsync://<Host>:<Pfad> <Ziel>
(Verbindung über rsync-Server - wobei Du die Angabe "rsync://" auch weglassen kannst)

So wie Du das Kommando angibst, sagst Du dem Client "Benutze das ssh-Protokoll (-e ssh) und benutze das rsync-Protokoll (rsync://)".

rsync -avz rsync://share0@192.168.1.3/share0/ /home/iz00778/

2. Tipp:
#!/bin/bash
rsync -r -u -z -p -e "ssh -2" zu.sichernder.host:/pfad/zum/verzeichnis/ /lokales/verzeichnis/

Optionen:
-r Das Verzeichnis wird recursiv syncronisiert
-u Es werden nur neuere Files upgedatet
-p rechte an dateien werden übernommen
-e damit teilst du rsync mit das es über ssh arbeiten soll.
-z Die Daten werden komprimiert übertragen

Für mehr Optionen einfach mal "man rsync" eingeben. (-:

3. Tipp:
#!/bin/sh
#@ Lars Schaaf 2004
#Variablen initialisieren
tag=$(/bin/date +%A)
tagnum=$(/bin/date +%e)
monat=$(/bin/date +%B)
monatnum=$(/bin/date +%m)
jahr=$(/bin/date +%Y)
src='/var/mail/'
target='/var/rsync/mailbackup'
exclude='--exclude root --exclude postfix --exclude mailman --exclude bitdefender'
# Tag
echo "Tagessicherung $tag wird durchgefuehrt"
if [ -d /var/rsync/mailbackup/$tag ]; then
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$tag
else
mkdir /var/rsync/mailbackup/$tag
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$tag
fi
# Woche

if [ "$tag" = "Sonntag" ]; then
if [ -d /var/rsync/mailbackup/wochensicherung/ ]; then
echo "Wochensicherung wird durchgefuehrt"
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/wochensicherung/
else
echo "Wochensicherung wird durchgefuehrt"
mkdir /var/rsync/mailbackup/wochensicherung/
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/wochensicherung/
fi
fi

# Monat
if [ -d /var/rsync/mailbackup/$monat ] && [ "$tagnum" = " 1" ]; then
echo "Monatssicherung $monat wird durchgefuehrt"
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$monat
else if [ "$tagnum" = " 1" ] ; then
echo "Monatssicherung $monat wird durchgefuehrt"
mkdir /var/rsync/mailbackup/$monat
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$monat
fi
fi
#Jahr
if [ -d /var/rsync/mailbackup/$jahr ] && [ "$tagnum" = "1" ] && [ "$monatnum" = "01" ]; then
echo "Jahressicherung $jahr wird durchgefuehrt"
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$jahr
else if [ "$tagnum" = "1" ] && [ "$monatnum" = "01" ] ; then
echo "Jahressicherung $jahr wird durchgefuehrt"
mkdir /var/rsync/mailbackup/$jahr
/usr/bin/rsync -rbzv --delete-after $exclude $src $target/$jahr
fi
fi

echo "Sicherung durchgefuehrt"

Lesen und studieren hilft Dir weiter :cool:

mkuhnert
16.10.04, 13:21
Danke! Klappt bestens!!!! :p