Hallo,
ich brauche mal nen Rat von den Erfahrenen... ich: newbie
Auf einem kleinen Fileserver (für 3 Win-Clients, Samba-Domäne) soll von Mo-Fr nachts eine Datensicherung laufen. Es soll das Profilverzeichnis und ein Datenverzeichnis gesichert werden. Da dachte ich an einen cron job, der die beiden Directories in jeweils separate tar-file speichert (data<datum>.tar und profiles<datum>.tar). Diese beiden files sollen dann in einem Verzeichnis mit dem aktuellen Datum abgelegt werden. Zur Info: es handelt sich vlt. um eine Datenmenge von max. 2-3GB.
Wenn ich jeden Tag ein "full Backup" mache, handelt es sich vlt. um eine gesamte Datenmenge ca. 15GB alles in allem.
Am Sa. sollen dann die 5 Verzeichnisse auf den USB Stick wandern, da ich in diesem Rechner kein Backup-Device habe in Form von 2. HDD oder DVD-Brenner habe, und von der Platte gelöscht werden.
Das ganze muss nun in ein Script zusammengebracht werden und vor allem muss ich in irgendeiner Form abfragen, ob nicht die zu sicherne Datenmenge grösser der Speicherkapazität des Sticks ist. Wenn ja, dann soll er nicht die 5 Verzeichnisse sichern, sondern dann nur die letzten 4 oder 3 oder oder oder...
Was meint ihr dazu!?
Oder bessere Vorschläge... oder Bacuda o.ä....???
Danke für Eure Meinungen...
-tbue-
Backup auf USB-Stick - Ratschläge bitte!
Re: Backup auf USB-Stick - Ratschläge bitte!
Ich habe meine tägliche Übungstunde mit dem Problem gefüllt.nd vor allem muss ich in irgendeiner Form abfragen, ob nicht die zu sicherne Datenmenge grösser der Speicherkapazität des Sticks ist. Wenn ja, dann soll er nicht die 5 Verzeichnisse sichern, sondern dann nur die letzten 4 oder 3 oder oder oder.
Das soll heissen: Das sind ein paar Idee, mehr nicht. Es gibt mit Sicherheit andere und vermutlich wesentlich bessere Arten, dass Problem zu lösen.
Also so wäre meine Idee:
a) mit du -s kann man sich die Grösse der zu sichernden Ordner angucken.
b) die zu sichernden Ordner werden in einer Liste, bzw einem Array gelagert.
c) dann wird geprüft, ob die Grösse aller Elemente des Array grösser ist als das Maximum.
d) ist das der Fall, wird das jeweils letzte Element gelöscht
e) abermals prüfen, ob das Maximum überschritten ist. Wenn ja: letztes Element löschen. Wenn nein:
die Liste annehmen.
Ich habe das mal so zusammengeschustert:
Code: Alles auswählen
#!/usr/bin/env bash
#check for root
[[ $(id -un) = "root" ]] || { echo "you need to be root!" ; exit 1 ; }
# VARIABLES
BU_DIR="/media/disk/Music/music"
INDEX=0
MAX=30000000
#BU_ARRAY; all directories which shall be backed up:
for i in "$BU_DIR"/*
do
echo $i
BU_ARRAY[$INDEX]="$i"
(( INDEX++))
done
# test the array, just to be sure:
#for i in "${BU_ARRAY[@]}"; do echo "$i"; done ; exit 0
# FUL_SIZE: size of all folders, which will be backed up
# SIZE: size of each folder
# C_FILE: SIZE renamed to only the size value of "du -s"
FUL_SIZE=0
function _test_size {
for i in "${BU_ARRAY[@]}"
do
SIZE="$(du -s $i)"
C_SIZE="${SIZE%%/*}"
(( FUL_SIZE=$FUL_SIZE + $C_SIZE ))
done
}
_test_size
# echo the FUL_SIZE, just to be sure:
echo $FUL_SIZE
((COUNTER = $INDEX -1 ))
# echo ${BU_ARRAY[$COUNTER]} ; exit 0
until [[ $FUL_SIZE -le $MAX ]]
do
FUL_SIZE=0
unset BU_ARRAY[$COUNTER]
# echo $COUNTER
((COUNTER-- ))
# echo "$COUNTER"
_test_size
echo $FUL_SIZE
done
# result
echo -e "\n\t this is the final folders we will backup:\n"
for i in "${BU_ARRAY[@]}"; do echo "$i"; done
exit 0
Also in meinem Fall:
1) prüfen, ob der user root ist
2) ein paar Variablen erstellen.
-als Source habe ich meinen Musik-Ordner genommen
- Index wird zur Erstellung des Array benötigt
- Max ist die maximale Grösse, welche das Backup-Medium zulässt.
3) Das Array, gennant: Bu_Array, erstellen
4) Funktion erstellen, welche die gesamte Grösse aller Elemente des Array addiert:
-Ful_Size ist die gesamte Grösse (ein Element wird nach dem anderen addiert)
-Size ist die Grösse berechnet mit "du -s". Da der Output nichts taugt:
- mit Substring-Substitution (-> %% ) alle Grössen-unrelevanten Angaben aus Size entfernen:
die neue Variable heisst dann: C_Size (sagen wir mal: converted_size)
5) Die eigentliche Arbeit:
Bis (until) die Variable Ful_Size kleiner ist als das Maximum, das jeweils letzte Element aus dem Backup-Array entfernen. Hierzu wird wieder die Funktion _test_size verwendet.
Du kannst es Dir ja mal angucken.
Vermutlich wird aber vorher schon eine einfachere oder zumindest elegantere Idee auftauchen.
(kann auch gut sein, dass es grundverkehrt ist. Also: nicht kopieren und ausführen, sondern nur mal angucken)
Zumindest mir hat es Spass gemacht.
Ich selber würde es vermutlich lieber manuel sichern.
Re: Backup auf USB-Stick - Ratschläge bitte!
hey dawg,
vielen dank für deine antwort und vor allem dein script.ich hoffe, es hat nicht zu viele kapazitäten gekostet, das script zu schreiben...
Ich werde mich morgen ransetzen und testen.
Vielen Dank auch für Deine Meinung...
Gruss tbue
vielen dank für deine antwort und vor allem dein script.ich hoffe, es hat nicht zu viele kapazitäten gekostet, das script zu schreiben...
Ich werde mich morgen ransetzen und testen.
Vielen Dank auch für Deine Meinung...
Gruss tbue