Als Fileserver nutze ich hier meinen Hauptserver mit folgenden Services
Den Glusterfs-Service habe ich gmäss Anleitung(en) aufgesetzt. Der Server geht unter Ubuntu (server) auch ganz leicht, aber ich habe trotzdem eine Weile gebraucht, um den Client richtig zu konfigurieren. Bei allen Anleitungen soll man sich nach der Installation des Server einfach per
<client>:/# mount -t glusterfs <server>:<share> /<zielordner>
mit der Freigabe verbinden. Der Befehl wurde auch ohne Fehler ausgeführt - der Ordner war aber immer leer und auch neue Dateien tauchten nicht im Server auf. Nach einer Weile der Recherche im Netz hab ich dann was anderes probiert. Erst hab ich einen Ordner angelegt
<client>:/# mkdir /etc/glusterfs
danach in diesen Ordner die Volumedefinitionen aus dem Server aus
<server>:/# /etc/glusterd/vols/<volume>/<volume>-fuse.vol
in den Ordner
<client>:/# /etc/glusterfs/
auf dem Client kopiert. Danach war es relativ simpel in die Datei
<client>:/# /etc/fstab
die Zeile
/etc/glusterfs/<volume>-fuse.vol /<zielordner> glusterfs defaults,_netdev 0 0
einzufügen. Nach einem
<client>:/# mount -all
waren dann die Dateien zu sehen und auch veränderbar.
Endlich funktionierte es!
NFS ist einfach via Anleitung aufgesetzt worden. Dazu gibt es die diversen Anleitungen im Internet, so dass ich hier nicht näher darauf eingehe.
RSYNC hat bei mir die Aufgabe meine Rechner untereinander zu sichern. Dazu habe ich auf diesen ein Script mit den jeweiligen Anpassungen laufen, das in regelmässigen Abständen nachsieht, ob der Backup-Server bzw. dessen Freigabe erreichbar ist und, wenn das bestätigt ist, werden vorher festgelegte Ordner synchronisiert.
Nach der Installation von rsync ist unter Ubuntu erstmal nur der Clientdienst aktiv. Den Serverdienst muss man erst einrichten und dann als Service definieren. Zu erst wird die Datei
/etc/rsyncd.conf
mit folgendem Inhalt angelegt
<server>:/etc# cat rsyncd.conf use chroot = true strict modes = false hosts allow = <network/mask> uid = <user> gid = users max connections = 5 syslog facility = local5 pid file = /var/run/rsyncd.pid [<Share1>] comment = backup folder on <server> path = /data1/Arbeit/ read only = no list = yes auth users = <user at source> secrets file = /etc/rsyncd.secrets [<Share2>] comment = Documents folder on <server> path = /data1/Dateiablage/ read only = no list = yes auth users = <user at share> secrets file = /etc/rsyncd.secrets
In der Datei
/etc/rsyncd.secrets
stehen nur die User mit den dazugehörigen Passwörtern drinn.
<server>:/etc# echo <username>:<password> > /etc/rsyncd.secrets
Ich wollte die nicht so unbedingt einfach in die Konfig hämmern. Mann sollte ja wenigstens den Anschein von Sicherheit wahren.
Danach hab ich noch mit
apt-get install xinetd
den xinetd Startservice installiert. In dem dazugehörigen Ordner unter
/etc/xinetd.d
muss dann noch eine Datei rsync angelegt werden. Die sieht bei mir so aus
<server>:/etc# cat xinetd.d/rsync # default: off # description: The rsync server is a good addition to an ftp server, as it \ # allows crc checksumming etc. service rsync { disable = no flags = IPv6 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
Nach einem
<server>:/# service xinetd restart
ist der rsync-Service dann erreichbar.
Der folgende Abschnitt beschreibt meine alte Vorgehensweise. Derzeitig habe ich meine Backup auf eine neue Methode umgestellt.
Auf dem Client hab ich ein Backup-Script laufen in dem ich einer seits den/ die Server angeben kann auf die ich sichern will und anderer seits die Verzeichnisse angebe die ich sichern will. Da meine Rechner nicht ständig an sind und teilweise zwar an, aber nicht im selben Netz sind wie die Backup-Ziele, war es wichtig beim Start des Scriptes zu prüfen, ob das Ziel erreichbar ist. Wenn nicht gibt es eine Meldung im Log und das war es. Da ich ja weiss, das die Ziele nicht ständig erreichbar sind brauche ich keine grosse Fehlermeldung. Ich will einfach hin und wieder mal auf den Server nach sehen können wann das letzte Backup durchgelaufen ist. Ist das 2 oder 4 Stunden her ist alles OK. Wenn aber beide Rechner im selben Netz sind und trotzdem im Log kein Erfolgreiches Backup eingetragen ist, gibt es wahrscheinlich ein Problem und ich muss mir das mal ansehen.
Das Script selber wird über einen CRON-Job
<client>:/# crontab -e 0 0-23/2 * * * /opt/backup/backup.sh >/dev/null 2>&1
in regelmässigen Abständen aufgerufen.
Das Script sieht bei mir wie folgt aus:
<clientname>:/# cat /opt/backup/backup.sh #!/bin/bash ## insert all directories to sync/ backup ## directories=( <directory1> <directory2>) workdir=<workdir> ## define target user=<transferuser> server=(<targetserver1> <targetserver2>) # view /etc/rsyncd.conf at targetserver targetshare=<share at target> ## generate log-file-names tstemp=`date +%Y%m%d%H` tstemp_old=`date +%Y%m%d -d yesterday` logfile=$workdir/$tstemp.backup.log logcheckfile=$workdir/$tstemp.backup.check.log # backup log logtimefile=$workdir/backup.time.log logtimefiletemp=$logtimefile.temp ## clean old log from messages and let all informations since the last running backup in file clean_log() { i=1 while ((i <= 100)) do if (tail -$i $logtimefile|grep done) then tail -$i $logtimefile > $logtimefiletemp cat $logtimefiletemp > $logtimefile rm $logtimefiletemp break fi i=$(( $i + 1 )) done return 0 } ## generate display message for graphical desktops and write backup log errormsg() { errorcount=0 ## if differrents between rsync run and rsync check exists, error message will generate for i in `cat $logcheckfile | grep '<f'|cut -d\/ -f2-` do if (cat $logfile | grep $i) then ((errorcount++)) fi done if (($errorcount > 0)) then ## enable only if script run at system with graphical desktop ## #notify-send -u critical -t 3000 -i /opt/backup/pictures/error.jpg "Backup to $target failure!!" message='Backup error! Server :' else ## enable only if script run at system with graphical desktop ## #notify-send -u normal -t 3000 -i /opt/backup/pictures/symbol_check.png "Backup to $target done!" rm $logcheckfile rm $logfile message='Backup done with server: ' if (ls $workdir| grep $tstemp_old) then for i in `ls $workdir| grep $tstemp_old` do rm $i done fi fi message=`date`" : "$message$target echo $message >> $logtimefile return 0 } ## use for rsyncd at target server(s) ## # check if job running from other schedule if(! ps -ef | grep rsync | grep $workdir ) then for target in "${server[@]}" do # check if host available if( ping -c 1 $target > /dev/null ) then date >> $logfile date >> $logcheckfile for dir in "${directories[@]}" do echo $dir >> $logfile ## synchronize the directory rsync -vah --partial $workdir/$dir $user@$target::$targetshare/ --password-file=/etc/rsync.pass >> $logfile echo $dir >> $logcheckfile ## check if directories synchron (it's a dry run with renerate a check file) rsync -vahn --partial $workdir/$dir $user@$target::$targetshare/ --password-file=/etc/rsync.pass >> $logcheckfile done date >> $logfile clean_log errormsg ## transfer the backup-log rsync -vzh --partial $logtimefile $user@$target::$targetshare/ --password-file=/etc/rsync.pass else message=`date`" : Synchronisation host not reachable! hostname: "$target echo $message >> $logtimefile fi done fi exit
Und nun noch unter /etc die datei rsync.pass mit dem richtigen Passwort ablegen
<client>:/# sudo echo <streng geheim> /etc/rsync.pass
Um alles richitg zu machen werden zum Abschluss die Rechte für die Datei neu gesetzt:
<client>:/# sudo chmod 600 /etc/rsync.pass
Ein kleiner Probelauf mit
<client>:/# sudo /opt/backup/backup.sh
sollte dann auch noch die letzten kleinen Fehler aufzeigen (z.B fehlende bzw. leere rsync.pass, fehlender oder falscher Eintrag in “hosts allow” auf der Target-Seite, …).
Jetzt werden bestimmt einige sagen, dass man ja das Script auch so bauen könnte, das man es mit Parametern aufrufen könnte - dann wäre das Script auf allen Rechnern gleich. Aber ich finde, das die Paramter nicht so oft geändert werden auf den Rechnern bzw. meist sogar nur einmal angepasst wird bei der Erstkonfiguration. Oder wenn ich wirklich mal einen neuen Ordner dazu nehme der direkt unter <workdir> hängt.
Das Script ist vieleicht nicht besonders schön, aber es funktioniert.