Sicherung von diversen Geräten im Heimnetzwerk

KingJamez

NGBler
Registriert
18 Juli 2013
Beiträge
440
Unsere Hardware im Haus:
  • Raspberry Pi´s als Streamboxen (Kodi)
  • FireTV Stick als Streambox (Kodi, Prime, ...)
  • MacBook - Arbeitsgerät
  • Standpc - Hackintosh - Arbeitsgerät
  • Windows Notebook - Freundin
  • Linux Notebook - private spielerei
  • Android Telefone
  • Server - 24/7 an

Server
Der Server besteht aus günstiger Consumer Hardware, darin hängen 2 4tb Platten. Darauf läuft bei mir ein Debian, ohne Desktop Enviroment.
Er ist der Zentrale teil bei uns, er dient als Datengrab. Im Netzwerk (SMB) ist nur eine der beiden Platten zu sehen, darauf können alle Daten gelagert werden. Der Server sichert sich mittels Cronjob 1* täglich selber auf die zweite interne Platte.

Grober Aufbau der Struktur, auf dem Server:
  • Media - Filme, Musik, Serien
  • Daten - Arbeitsdaten, Ablage, Software, Etc.
  • Sites - Webserver, Repo für git

Der Media Ordner wird 2 die Woche auf eine externe Platte gesichert, dann kann ich die jederzeit abziehen und irgendwo mit hinnehmen. Im Ordner Sites wird bei der täglichen Sicherung auch alles in der MySql Datenbank gesichert.
Sehr wichtige Daten schubse ich noch in GoogleDrive, zum einbinden von Drive nutze ich "google-drive-ocamlfuse".

Die Apple Clients sichern sich täglich auf dem Server, hier wird eigentlich nur die homedirectory gesichert, mit ein paar excludes. Das Linuxnotebook sichert seine homedirectory mit einigen ausnahmen auf dem Server.

Die Android Geräte sichern Bilder, Videos, Kontakt, etc. in die GoogleCloud - zusätzliche sichern wir diesen ab und an mit dem SolidExplorer auf den Server.
Das Windows Notebook hat nur Software, jegliche Daten werden auf dem Server gelagert, deshalb ist uns hier eine Sicherung nicht so wichtig.

Script zum sichern:
dieses script wird über den crontab von Linux gestartet, es ruft alle scripte im ordner "backup.d" auf, und führt diese aus.
[src=bash]

#!/bin/bash

date=`date +%Y-%m-%d`
dateMonth=`date +%Y-%m`

scriptDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
logDir=$scriptDir/logs/$dateMonth

mkdir -p $logDir

echo "Start Backup" $date >> $logDir/"$date""_00-backup.txt"

for i in $scriptDir/backup.d/*sh; do


IFS="/" read -a fileName <<< "$i"
file="${fileName[-1]}"
logName=${file::-3}

echo "Script Running" $logName >> $logDir/"$date""_00-backup.txt"
${i} >> $logDir/"$date"_$logName.txt
echo "Script Done" $logName >> $logDir/"$date""_00-backup.txt"
done

./clearlog.sh

echo "Backup Done" $date >> $logDir/"$date""_00-backup.txt"
echo "-----------------------------------------------------------" $date >> $logDir/"$date""_00-backup.txt"
[/src]


Auszüge der Sicherungsscripte:

Auf der Backupplatte ist zusätzlich ein "Deleted" Ordner, in den wird temporär alles verschoben, was auf dem Datengrab entfernt wurde. Der Ordner wird ab und an von Hand geleert.

Datenbanken:
[src=bash]
#!/bin/bash
# anpassen!
targetDir="target/directory/"
mySqlUser="username please"
mySqlPass="password please"

databases=$(mysql -u $mySqlUser -p$mySqlPass -e "SHOW DATABASES;")

for DB in ${databases[@]}; do
if [ $DB != "performance_schema" ]; then
if [ $DB != "information_schema" ]; then
if [ $DB != "Database" ]; then
echo "Backing up Database" "$DB"
mysqldump -u $mySqlUser -p$mySqlPass $DB > $targetDir/$DB.sql
fi
fi
fi
done%
[/src]

Sites/Repos:
da ich relativ viel javascript mache und der node_modules ordner immer relativ groß ist, sichere ich diesen nicht mit, die sicherung findet ganz klassisch über rsync statt.
Das Script für "Media" und "Daten" sieht ähnlich aus. Auch die Sicherung auf die Externe HDD sieht so aus, nur gibt es hier keinen "Deleted" Ordner, dieses Script wird über crontab Seperat gestartet.


[src=bash]
#!/bin/bash

backupDir="/ordner/in/den/gesichert/werden/soll"
source="/ordern/der/gesichert/werden/soll/"
target=$backupDir"/Sites/"
deletedDir=$backupDir"/Deleted/Sites/"

additional="--exclude node_modules" # keine node_modules

rsync -ahu --numeric-ids --delete $additional --stats -b --backup-dir=$deletedDir $source $target%
[/src]


Zur Überwachung nutze ich , für meine Backups habe ich ein extra plugin geschrieben, welches die logs anzeigen kann. Plugin ist im Anhang, muss in dem Ordner "~/.local/share/cockpit/" als "backup" abgelegt werden. In der Javascript datei (backup.js) muss noch der Pfad zu den Logfiles eingetragen werden.

Das ist unsere Backuplösung Zuhause, sicherlich nicht Ideal, weil kaum extern abgesichert. Und auch bestimmt nicht ganz "nutzerfreundlich" weil die maus eigentlich keine funktion hat aber es tut was es soll und das schon seit jahren.
 

Anhänge

Zurück
Oben