This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
interessen:computer:fileserver [2014/02/25 11:42] tomtom |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Fileserver ====== | ||
- | Als Fileserver nutze ich hier meinen Hauptserver mit folgenden Services | ||
- | * Glusterfs | ||
- | * NFS | ||
- | * rsync | ||
- | |||
- | ===== GlusterFS ===== | ||
- | |||
- | 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 | ||
- | < | ||
- | 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 | ||
- | < | ||
- | danach in diesen Ordner die Volumedefinitionen aus dem **Server** aus | ||
- | < | ||
- | in den Ordner | ||
- | < | ||
- | auf dem **Client** kopiert. | ||
- | Danach war es relativ simpel in die Datei | ||
- | < | ||
- | die Zeile | ||
- | / | ||
- | einzufügen. | ||
- | Nach einem | ||
- | < | ||
- | waren dann die Dateien zu sehen und auch veränderbar. | ||
- | Endlich funktionierte es! :-D | ||
- | |||
- | ===== NFS ===== | ||
- | |||
- | |||
- | 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 ===== | ||
- | |||
- | RSYNC hat bei mir die Aufgabe meinen Firmenlaptop zu sichern. Dazu habe ich auf diesem ein Script zu 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. | ||
- | * [[http:// | ||
- | |||
- | ==== ServerKonfiguration ==== | ||
- | |||
- | 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 | ||
- | / | ||
- | mit folgendem Inhalt angelegt | ||
- | < | ||
- | use chroot = true | ||
- | strict modes = false | ||
- | hosts allow = < | ||
- | uid = < | ||
- | gid = users | ||
- | max connections = 5 | ||
- | syslog facility = local5 | ||
- | pid file = / | ||
- | | ||
- | [< | ||
- | comment = backup folder on < | ||
- | path = / | ||
- | read only = no | ||
- | list = yes | ||
- | auth users = <user at source> | ||
- | secrets file = / | ||
- | | ||
- | [< | ||
- | comment = Documents folder on < | ||
- | path = / | ||
- | read only = no | ||
- | list = yes | ||
- | auth users = <user at share> | ||
- | secrets file = / | ||
- | |||
- | In der Datei | ||
- | / | ||
- | stehen nur die User mit den dazugehörigen Passwörtern drinn. Ich wollte die nicht so unbedingt einfach in die Konfig hämmern. Mann sollte ja wenigstens den Anschein von Sicherheit wahren. :-D | ||
- | |||
- | Danach hab ich noch mit | ||
- | apt-get install xinetd | ||
- | den xinetd Startservice installiert. | ||
- | In dem dazugehörigen Ordner unter | ||
- | / | ||
- | muss dann noch eine Datei rsync angelegt werden. Die sieht bei mir so aus | ||
- | < | ||
- | # default: off | ||
- | # description: | ||
- | # allows crc checksumming etc. | ||
- | service rsync | ||
- | { | ||
- | disable = no | ||
- | flags = IPv6 | ||
- | socket_type | ||
- | wait = no | ||
- | user = root | ||
- | server | ||
- | server_args | ||
- | log_on_failure | ||
- | } | ||
- | Nach einem | ||
- | < | ||
- | ist der rsync-Service dann erreichbar. | ||
- | |||
- | ==== Clientkonfiguration ==== | ||
- | |||
- | 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. | ||
- | Das Script wird dann über einen CRON-Job in regelmässigen Abständen aufgerufen. | ||
- | |||
- | < | ||
- | #!/bin/bash | ||
- | ## insert all directories to sync/ backup ## | ||
- | directories=( < | ||
- | workdir=< | ||
- | | ||
- | ## define target | ||
- | user=< | ||
- | server=(< | ||
- | # view / | ||
- | targetshare=< | ||
- | | ||
- | ## generate log-file-names | ||
- | tstemp=`date +%Y%m%d%H` | ||
- | tstemp_old=`date +%Y%m%d -d yesterday` | ||
- | logfile=$workdir/ | ||
- | logcheckfile=$workdir/ | ||
- | # backup log | ||
- | logtimefile=$workdir/ | ||
- | 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 '< | ||
- | do | ||
- | if (cat $logfile | grep $i) | ||
- | then | ||
- | ((errorcount++)) | ||
- | fi | ||
- | done | ||
- | if (($errorcount > 0)) | ||
- | then | ||
- | ## enable only if script run at system with graphical desktop ## | ||
- | # | ||
- | message=' | ||
- | else | ||
- | ## enable only if script run at system with graphical desktop ## | ||
- | # | ||
- | rm $logcheckfile | ||
- | rm $logfile | ||
- | message=' | ||
- | if (ls $workdir| grep $tstemp_old) | ||
- | then | ||
- | for i in `ls $workdir| grep $tstemp_old` | ||
- | do | ||
- | rm $i | ||
- | done | ||
- | fi | ||
- | fi | ||
- | message=`date`" | ||
- | 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 " | ||
- | do | ||
- | # check if host available | ||
- | if( ping -c 1 $target > /dev/null ) | ||
- | then | ||
- | date >> $logfile | ||
- | date >> $logcheckfile | ||
- | for dir in " | ||
- | do | ||
- | echo $dir >> $logfile | ||
- | ## synchronize the directory | ||
- | rsync -vah --partial $workdir/ | ||
- | echo $dir >> $logcheckfile | ||
- | ## check if directories synchron (it's a dry run with renerate a check file) | ||
- | rsync -vahn --partial $workdir/ | ||
- | done | ||
- | date >> $logfile | ||
- | | ||
- | | ||
- | ## transfer the backup-log | ||
- | rsync -vzh --partial $logtimefile $user@$target:: | ||
- | else | ||
- | | ||
- | echo $message >> $logtimefile | ||
- | fi | ||
- | done | ||
- | fi | ||
- | exit | ||
- | |||
- | Und nun noch unter /etc die datei rsync.pass mit dem richtigen Passwort ablegen | ||
- | < | ||
- | | ||
- | Um alles richitg zu machen werden zum Abschluss die Rechte für die Datei neu gesetzt: | ||
- | < | ||
- | |||
- | Ein kleiner Probelauf mit | ||
- | < | ||
- | 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, |