Eiskaltmacher.de
Software => Linux => Thema gestartet von: mad1120 am 08. März 2009, 15:39:20
-
hi leute,
ich derzeit mal weider dabei an meinem Vserver rum zu basteln und ihn vor mir selber absichern
(gegen datenverlust durch unwissen)
weshalb ich mir nun nen kleines backup script zulegen will,
welches automatisch ein tägliches und ein wöchentliches backup anlegt.
dazu gabe ich nen nettes kleines script im web gefunden was dies fast sio macht wie ich es will.
http://tldp.org/LDP/solrhe/Securing-Optimizing-Linux-RH-Edition-v1.3/chap29sec306.html
aber eben nur fast, weshalb ich es nun versucht habe um zu bauen.
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the 4 variables below to fit your computer/backup
COMPUTER=Vserver # name of this computer
DIRdaily="/var/www /home" # directoris daily to backup
DIRweekly="/" # directoris monthly to backup
BACKUPDIR=/var/ftp/backups # where to store the backups
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# On the 1st of the month a permanet full backup is made
# Every Sunday a full backup is made - overwriting last Sundays backup
# The rest of the time an incremental backup is made. Each incremental
# backup overwrites last weeks incremental backup of the same name.
#
# if NEWER = "", then tar backs up all files in the directories
# otherwise it backs up files newer than the NEWER date. NEWER
# gets it date from the file written every Monday.
# weekly full backup
if [ $DOW = "Mon" ]; then
NEWER=""
# tar $NEWER -czf $BACKUPDIR/$COMPUTER-full-$DM.tar -x /var/ftp/backups $DIRweekly
else
# daily /var/www backup
NEWER=""
NOW=`date +%d-%b`
cd $BACKUPDIR
tar $NEWER -czf $BACKUPDIR/$COMPUTER-$DM.tar $DIRdaily
fi
aber bevor ich es auf meinen Vserver los lasse würde ich mich freuen, wenn es der eine oder andere mal Korrektur lesen könnte.
und gegeben falls Verbesserungsvorschläge machen kann.
des weiteren bräuchte ich noch ne ergänzung damit sich nicht die backup daten von jahren auf server sammeln,
sprich das alle backups die älter sind als 1 Monat gelöscht werden.
PS:
noch nen frage ist es überhaupt sinnvoll das komplett system per "/" zu sichern?
weil es sind ja doch sehr viele Dateien im system vorhanden die sich so nicht sichern lassen...
wenn nein welche ordner sind sinnvoll?
-
welche ordner sinnvoll sind hängt sehr stark von deinen anwendungen ab ;)
bei typischen webserver ist das wohl hauptsächlich die datenbank und das webverzeichniss.
system voll backups sind wohl deutlich overkill - einmal nach dem aufsetzen des system und ggf nach größeren umbauten/updates manuell.
was genau die beste stategie ist hängt wirklich vom einsatz ab und wo sich daten wieoft ändern
-
hi,
also der server ist hauptsächlich fürs teamspeak gedacht wobei ich ihn aber nach und nach als webspace missbrauchen werde,
direkte datenbanken usw. gibt es weniger (bis auf die für die TS user daten).
was die Datenmengen angeht, das sind derzeit inkl allem drum und dran ~500mb. weshalb ich darum keine sorgen mache.
vielmehr geht es mir darum das ich für den fall das ich mir wiedermal was verschiesse selbiges wieder schnell richten kann,
weil gestern hab ich mir zv. den ftp Zugang lahm gelegt da ich beim update nen bissel zu voreilig war.....
was mich dann ca 2h gekostet hat um es wieder zu richten :aua:
und da eh gerade nen script zwecks backup brauche wollte ich mich damit gegen sowas mit schützen :think:
aber der Hauptaugenmerk liegt halt auf meinem webspace ( /var/www/ )
wobei ich aber da auch noch am grübeln bin ob täglich oder doch nur wöchentlich
aber das lässt sich ja dann auch noch schnell ändern wenn das skript fertig ist.
edit:
hab gerade mal durch gerechnet wenn ich wie geplannt mit meiner .net domian mit rauf ziehe,
wird es mit dem täglichen backup in bezug auf die daten doch verdammt eng..
also wird es doch nen wöchentliches backup der /var/www und /home daten und nen monatliches komplett backup
EDIT:
hab gerade selber ne mögliche lösung für das umlagern und löschen der alten backups gefunden...
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the 5 variables below to fit your computer/backup
COMPUTER1=Vserver # name of this computer
COMPUTER2=wwwData # name of this computer
DIR1="/var/www /home" # directoris daily to backup
DIR2="/" # directoris monthly to backup
BACKUPDIR=/var/ftp/backups # where to store the backups
OLDBACKUP=/var/ftp/backups/old # where old backups stored
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# On the 1st of the month a permanet full backup is made
# Every Sunday a full backup is made - overwriting last Sundays backup
# The rest of the time an incremental backup is made. Each incremental
# backup overwrites last weeks incremental backup of the same name.
#
# if NEWER = "", then tar backs up all files in the directories
# otherwise it backs up files newer than the NEWER date. NEWER
# gets it date from the file written every Sunday.
# monthly full backup
if [ $DOM = "1" ]; then
NEWER=""
rm $OLDBACKUP/*.tar
mv $BACKUPDIR/*.tar $OLDBACKUP
# tar $NEWER -czf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar -x /var/ftp/backups $DIR2
fi
# weekly www backup
if [ $DOW = "Mon" ]; then
NEWER=""
NOW=`date +%d-%b`
tar $NEWER -czf $BACKUPDIR/$COMPUTER2-$DM.tar $DIR1
fi
ich habe mir einen "old" ordner angelegt
in dem an jedem ersten des monats zuerst alle alten backups per rm $OLDBACKUP/*.tar alle tar datein gelöscht werden
anschliessend werden die vorhandenen backups des letzten monats rein kopiert mv $BACKUPDIR/*.tar $OLDBACKUP
und danach wird das aktuelle backup erstellt.
somit sollte ich immer auf die backups des aktuellen und des vor monats zu griff haben, oder? :kratz:
nächster EDIT:
hab gerade wieder nen fehler gefunden, der Monday wird mit Mo nicht mit Mon abgekürzt...
hab das ganze dann auch noch etwas entschlackt...
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the 6 variables below to fit your computer/backup
COMPUTER1=Vserver # name of this computer
DIR1="/" # directoris monthly to backup
COMPUTER2=webspace-backup # name of this computer
DIR2="/var/www /home" # directoris daily to backup
BACKUPDIR=/var/ftp/backups # where to store the backups
OLDBACKUP=/var/ftp/backups/old # where old backups stored
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# monthly full backup
if [ $DOM = "1" ]; then
rm $OLDBACKUP/*.tar
mv $BACKUPDIR/*.tar $OLDBACKUP
# tar -cf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar -x /var/ftp/backups $DIR1
fi
# weekly www backup
if [ $DOW = "Mo" ]; then
NOW=`date +%d-%b`
tar -czf $BACKUPDIR/$COMPUTER2-$DM.tar $DIR2
fi
-
In der ersten IF ist das tar Kommando noch auskommentiert ;)
Falls du das "/var/ftp/backups" Verzeichnis ausklammern willst muss es "-X" (oder --exclude "/xyz/") heissen. "Klein x" ist extract.
tar -cf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar -X "/var/ftp/backups/" $DIR1
Beim sichern vom root Verzeichnis sollten bzw. müssen noch /dev /proc /mnt und /tmp ausgeschlossen werden!
Da du das Archiv gzippst sollte die Endung .gz sein, ansonsten kommst du vll irgendwann durcheinander ;)
tar -czf $BACKUPDIR/$COMPUTER2-$DM.tar.gz $DIR2
Hat es einen Grund, wieso du die wöchentlichen komprimieren willst und die monatlichen nicht?
Ich weiß nicht ob die Pfade ohne ein schließendes "/" funktionieren, ich kenns nur mit:
DIR2="/var/www/ /home/"
(genauso beim mv Befehl)
Wofür das?
NOW=`date +%d-%b`
-
hi CptHirni,
erstmal danke für das Korrektur lesen.
hätte nicht gedacht das ich so viele fehler beim umbauen mit rein gehauen habe :redface:
hab also noch ne menge zu lernen... vor allem das mit der groß und klein Schreiberei...
wenn de nix dagegen hast missbrauche ich dich gleich weiter zum lernen ;)
was hat es denn mit den von auf gezählten ordner auf sich, das sie sich nicht sichern lassen?
beim /tmp/ kann ich es mir ja denken aber beim rest? treiber, auslagerungsdatein,...???
das das ne ganze reihe von datein sind kann ich selbige im kopf als "variablen" angeben?
EXCLUDE="/var/ftp/backups/ /dev/ /proc/ /mnt/ /tmp/"
tar -czf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar.gz -X $EXCLUDE $DIR1
das sich beim tar durch den Kommentar -z gleich die Endung ändert, war bisher nicht klar ich dachte tar wäre = tar.
so wie bei Winrar und verschiedenen Kompressionsstufen...
die Schrägstriche hab ich schlicht und einfach übersehen, genau so wie die "now" Zeile die hab ich vergessen raus zunehmen...
so nun mal in korrigierter version:
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the 7 variables below to fit your computer/backup
COMPUTER1=Vserver # name für monatliches
DIR1="/" # verz. für monatliches Backup
COMPUTER2=webspace-backup # name für wöchentliches backup
DIR2="/var/www/ /home/" # verz. für wöchentliches backup
BACKUPDIR="/var/ftp/backups/" # speicherort für aktuelle backups
OLDBACKUP="/var/ftp/backups/old/" # speicherort für backups des vor monats
EXCLUDE="/var/ftp/backups/ /dev/ /proc/ /mnt/ /tmp/" # nicht zu sichernde verz.
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# monthly full backup
if [ $DOM = "1" ]; then
rm $OLDBACKUP/*.tar
mv $BACKUPDIR/*.tar $OLDBACKUP
tar -czf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar.gz -X $EXCLUDE $DIR1
fi
# weekly www backup
if [ $DOW = "Mo" ]; then
tar -czf $BACKUPDIR/$COMPUTER2-$DM.tar.gz $DIR2
fi
ich hoffe mal ich´s nicht ver"schlimm"bessert habe :roll:
-
Nichts zu danken...ich bin aber etwas eingerostet (ich nehme an dieser Stelle mal zurück, dass die zu 'tarenden' Pfade mit "/" enden müssen :engel: ). Gargamel kennt sich mit Linux besser aus, vielleicht stolpert er hier mal über den Thread ;)
Hab momentan auch kein laufendes Linuxsys hier zum austesten.
Ich würd dir empfehlen nen kleines Sys zusammenzustricken aus irgendwelchen Hardwareresten und da zuerst alles auszuprobieren, bevor du irgendwas am Server machst. Manchmal is man selbst bei einfachen Sachen einfach blind oder denkt sich "kann schon nix schiefgehen"..und dann fängt das Schwitzen an :D
Die Verzeichnisse /dev /proc /mnt enthalten keine "realen" Daten, in /dev sind die Gerätedateien, /proc ist für den laufenden Kernel, /mnt sind deine mounts. /mnt ginge vielleicht noch, aber spätestens /proc wird dir beim 'taren' Fehler um die Ohren werfen.
das das ne ganze reihe von datein sind kann ich selbige im kopf als "variablen" angeben?
Das geht meines Wissens nach nicht. Ich find das rumhantieren mit excludes immer etwas unhandlich...ich würd stattdessen tar nur die Ordner übergeben, die du auch sichern willst, nicht direkt "/".
Quick&dirty Vorschlag:
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the variables below to fit your computer/backup
COMPUTER1=Vserver # name für monatliches backup
DIR1="/bin /boot /etc /home /lib /opt /root /sbin /usr /var" # verz. für monatliches backup
COMPUTER2=webspace-backup # name für wöchentliches backup
DIR2="/var/www /home" # verz. für wöchentliches backup
BACKUPDIR="/var/ftp/backups" # speicherort für aktuelle backups
OLDBACKUP="/var/ftp/backups/old" # speicherort für backups des vormonats
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# monthly full backup
if [ $DOM = "1" ]; then
rm $OLDBACKUP/*.tar
mv $BACKUPDIR/*.tar $OLDBACKUP
tar -cf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar -X "/var/ftp/backups" $DIR1
fi
# weekly www backup
if [ $DOW = "Mo" ]; then
tar -cf $BACKUPDIR/$COMPUTER2-$DM.tar $DIR2
fi
DIR1 müsstest du ggf. noch auf dein System anpassen.
-
das sich beim tar durch den Kommentar -z gleich die Endung ändert, war bisher nicht klar ich dachte tar wäre = tar.
Das kommt afaik daher, dass tar lediglich zum archivieren von Dateien geschrieben worden ist. Tar fasst also nur mehrere Dateien unkomprimiert in einem Archiv zusammen, der .tar-Datei. Wenn man das Archiv auch komprimieren möchte, wird dafür z.B. gzip verwendet. Gzip kann allerdings nur einzelne Dateien packen. Als Dateiendung verwendet man dann üblicherweise .tar.gz oder kurz .tgz. Ist halt so ein Unix-Grundprinzip, dass jedes Programm nur auf eine Aufgabe spezialisiert ist und dass die Programme mit der Shell einfach miteinander verknüpft werden können. Kann gut sein, dass die Option '-z' erst später in Tar mit aufgenommen wurde, damit man nicht immer "tar c QUELLDATEIEN | gzip > komprimiertes-archiv.tar.gz" schreiben muss.
Da bei Unix nicht so viel Wert auf Dateiendungen gelegt wird, kannst du aber die erzeugten Archive benennen wie du willst. Musst nur beim entpacken die richtigen Optionen angeben.
Ansonsten hab ich dem was CptHirni geschrieben hat nichts hinzuzufügen. ;)
-
cool, also besten dank an euch.
jetzt hab ich noch ne abschliessenden, usw wegen cron...
hab ich das nicht verstanden, das ich ganze nur noch auf 755 chmod"en" muss.
und dann das ganze dann in den /etc/cron.daily ordner schieben muss?
und dann somit das Script jeden tag um 0 uhr gestartet wird.
-
Jupp :thumbup:
Aber es muss nicht um 0 Uhr laufen. Wann die Scripte in .daily abgearbeitet werden ist in der crontab (http://de.wikibooks.org/wiki/Linux-Kompendium:_Crontab) festgelegt.
Wenn du mal 'crontab -l' eingibst siehst du deine aktuelle crontab. In den ersten Zeilen ist festgelegt, wann die Scripte in cron.daily cron.weekly usw aufgerufen werden.
Ich würd daran auch nix ändern, dein Backupscript ist ja nicht darauf angewiesen, obs um 0 Uhr, 2:30Uhr oder 4:15 Uhr oder wann auch immer läuft ;)
-
grummel hab gerade gesehen das das script nicht so läuft wie es soll.....
ich hab das gute stück am 16.märz per hand laufen lassen --> archiv wurde erstellt
darauf hin hab ich den cron job erstellt,
und nun hab ich gesehen das das script am 23 kein backup erstellt hat. :motz:
mit welchen rechten werden die cron scripte eigentlich per default gestartet? root oder eigeschrägt???
weil wenn es mit eingeschränkten rechten gestartet wird, dann wäre das die fehlerquelle --> keine schreibrechte im backup ordner.
-
Ich würde mal darauf tippen, dass die Sachen mit root-Rechten ausgeführt werden. Bin mir aber nicht sicher, ich habe noch nie was mit cron gemacht. Du kannst aber in das Script z.B. sowas einbauen:
DATEINAME="/tmp/test.$(date +%s)"
echo "Datum:" >>$DATEINAME
date >>$DATEINAME
echo "Benutzer:" >>$DATEINAME
whoami >>$DATEINAME
Das schreibt dir dann jedes mal wenn das Script ausgeführt wird in eine neue Datei im Verzeichnis /tmp/ rein, wann und mit welchen Rechten das Script lief. /tmp/ desshalb, weil da normalerweise jeder hin schreiben darf.
-
gute danke gargamel, hab das ganze so eben in das skript eingefügt.
mal sehen was montag dabei raus kommt....
-
ehm merkwürdig, die datei wurde nicht erstellt, obwohl laut webmin der cron job aktiviert ist.
naja hab jetzt per webmin, den zeitpunkt für den crondaily neu festgelegt (0 uhr)
das skript noch mal chmod bearbeitet, und mal sehen was nun rauskommt...
achso, des weiteren hab ich gerade gesehen das man über den webmin auch festlegen kann
über welchen user der cronjob ausgeführt wird (steht default auf root).
-
lol, jetzt läuft das script...
da sieht so aus als wenn ich das prob. selber verursacht habe... :redface:
also besten dank noch mal für eure hilfe
gruß mad
-
hab gerade noch nen fehler im script entdeckt...
usw. die datums abfrage zum monats ersten, es sollte 01 heissen und und nicht nur 1, oder?
weil bei 1 hat das script kein backup am ersten erstellt.
aber dafür läuft das wöchentliche backup ohne jeden Probleme *freu*
-
so das script hatt jetzt immer noch gesponnen ( das monatliche backup wollte nicht laufen...) aber ich hab den fehler gefunden.
tar -cf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar -X "/var/ftp/backups" $DIR1
der exclude befehlt hat den fehler ausgelöst, wodurch die zeile nicht augeführt wurde
die derzeitige funktionierende version:
#!/bin/sh
# full and incremental backup script
# created 07 February 2000
# Based on a script by Daniel O'Callaghan <danny@freebsd.org>
# and modified by Gerhard Mourani <gmourani@videotron.ca>
#Change the variables below to fit your computer/backup
COMPUTER1=Vserver # name für monatliches backup
DIR1="/bin/ /boot/ /etc/ /home/ /lib/ /opt/ /root/ /sbin/ /usr/ /var/cache/ /var/backups/ /var/lib/ /var/local/ /var/lock/ /var/log/ /var/mail/ /var/opt/ /var/run/ /var/spool/ /var/tmp/ /var/webmin/ /var/www/ /sys/ /srv/ /selinux/ /opt/ /media/ /initrd/ " # verz. für monatliches backup
COMPUTER2=webspace-backup # name für wöchentliches backup
DIR2="/var/www/ /home/" # verz. für wöchentliches backup
BACKUPDIR="/var/ftp/backups/" # speicherort für aktuelle backups
OLDBACKUP="/var/ftp/backups/old/" # speicherort für backups des vormonats
#You should not have to change anything below here
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # Day of the week e.g. Mon
DOM=`date +%d` # Date of the Month e.g. 27
DM=`date +%d%b` # Date and Month e.g. 27Sep
# monthly full backup
if [ $DOM = "01" ]; then
rm $OLDBACKUP/*.tar.gz
mv $BACKUPDIR/*.tar.gz $OLDBACKUP
tar -czf $BACKUPDIR/$COMPUTER1-fullbackup-$DM.tar.gz $DIR1
fi
# weekly www backup
if [ $DOW = "Mo" ]; then
tar -czf $BACKUPDIR/$COMPUTER2-$DM.tar.gz $DIR2
sprich der exclude befehl ist nun raus, aber dafür hab ich jeden einzelnen ordner in /var/ bei $DIR1 eingefügt
halt bis auf den backup ordner selber /var/ftp/backups/