Backup auf USB-Stick - Ratschläge bitte!

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tbue
Beiträge: 19
Registriert: 07.01.2003 08:08:54
Wohnort: Berlin

Backup auf USB-Stick - Ratschläge bitte!

Beitrag von tbue » 02.12.2010 22:26:03

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-

dawg
Beiträge: 441
Registriert: 29.12.2008 19:59:00

Re: Backup auf USB-Stick - Ratschläge bitte!

Beitrag von dawg » 03.12.2010 00:44:14

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.
Ich habe meine tägliche Übungstunde mit dem Problem gefüllt.
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
bei Debian-pastezone mit highlighting

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.

tbue
Beiträge: 19
Registriert: 07.01.2003 08:08:54
Wohnort: Berlin

Re: Backup auf USB-Stick - Ratschläge bitte!

Beitrag von tbue » 03.12.2010 21:54:16

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

Antworten