ich habe einen Backup Server mit dem PI umgesetzt.
Nachdem eine Sicherungsfestplatte wenn sie nicht benötigt eigentlich ausgesteckt und wo anders gelagert werden sollte was aber eine Regelmäßige Sicherung erschwert und weil ich keine Lust mehr hatte die HDD jede Woche zu holen, einige Stunden zu Sichern und sie dann wieder zurueckzubringen, hatte ich die Idee das könnte doch Automatisch erfolgen.
Eine Sicherungsplatte die am selben Stromkreis betrieben wird wie die Quelle ist bei einem Blitzschlag auch hinüber deshalb muss die Festplatte nach der Sicherung wieder komplett abgesteckt werden.
Meine Lösung:
Eine per USB 3.0 SATA Adapter angeschlossene 3TB HDD wird mit einem Relais (für das Netzteil des Adapters) und einem Modellbau Servo (für das an und wieder abstecken des Daten und Stromkabels) verwendet.
Die Sicherung wird von meinem Linux Server Remote angestoßen wobei folgende Schritte erfolgen:
- remote mount der Festplatte (Verbinden, Strom Ein, warten bis die HDD da ist und dann mount)
- Ordner Syncronisieren
- Snapshot der Sicherungsfestplatte erstellen
- Letzte X Snapshots aufbewahren
- remout umount der Festplatte (umount, Strom Aus, Verbindung Mechanisch Trennen)
Hier meine Anleitung dazu:
Hardware:
- Raspberry PI Model B
- 2A USB Power supply for the PI
- 5kg Modellbau Servo (deshalb das 2A Netzteil für den PI!)
- Relais Platine für Arduino oder PI (e**y, dx...)
- Schlitten für Adapter (oder die Festplatte bewegen?)
Software:
Ihr braucht das servoblaster Modul für den PI und hiervon nur den servod welchen ich kompiliert im archiv servod.zip zum download anbiete.
Dieser wurde mit nur zwei GPIO's für die PWM Signale kompiliert und zwar GPIO4 und GPIO17. Aktuell wird nur der GPIO4 verwendet.
folgenden Ordner erstellen
in der Datei /etc/inittab folgenden Eintrag Hinzufügen:
Die Datei /home/rpi-backup/initial.sh hat folgenden Inhalt:
#/bin/bash
pid=$(ps aux|grep servod|head -n 1|cut -d " " -f 7|tr -d -C [:digit:])
echo pid. $pid
if [ $pid -gt 0 ]
then
#Run servoblaster
/home/rpi-backup/servod
fi
#Prepare Power Switch
echo "7" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio7/direction
chmod 666 /sys/class/gpio/gpio7/value
echo "8" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio8/direction
chmod 666 /sys/class/gpio/gpio8/value
Alles anzeigen
Die mount-hdd.sh hier muss die blkid euere Sicherungsfestplatte eingegeben werden!
#/bin/bash
#Servo HDD Mount Position
servo_m="230"
#Servo HDD Unmount Position
servo_u="80"
#HDD blkid
hdd_blkid="2beb2306-6**************"
#Mountpoint
mountpoint="/backup"
#====================================================
#mount hdd
echo "Connect HDD"
echo 0=${servo_m} > /dev/servoblaster
#Wait for Servo
sleep 5
echo 0=220 > /dev/servoblaster
#Power on HDD
echo "Power on HDD"
echo "1" > /sys/class/gpio/gpio8/value
#Wait for hdd
hdd=0
until [ $hdd -eq 1 ]
do
hdd=$(blkid|grep $hdd_blkid|wc -l)
echo "wait for hdd..."
sleep 3
done
#Mount HDD
echo "Mount $mountpoint"
mount -t btrfs /dev/disk/by-uuid/$hdd_blkid $mountpoint
df -h | grep $mountpoint
echo "done"
Alles anzeigen
Die umount-hdd.sh
#/bin/bash
#Servo HDD Mount Position
servo_m="230"
#Servo HDD Unmount Position
servo_u="80"
#Mountpoint
mountpoint="/backup"
#=====================================
#Unmount HDD
echo "Unmount $mountpoint"
sync
umount -f $mountpoint
#Wait 2 Sek
sleep 2
#Power down HDD
echo "Power down HDD"
echo "0" > /sys/class/gpio/gpio8/value
#Wait for servo
sleep 1
#umount hdd
echo "Disconnect HDD"
echo 0=${servo_u} > /dev/servoblaster
#Switch off Servo
sleep 1
echo 0=0 > /dev/servoblaster
echo "done!"
Alles anzeigen
Aufgerufen werden die mount und umount scripts remote von meinem NAS Server über einen Cronjob
ssh 192.*.*.* /home/rpi-backup/mount-hdd.sh
rsync *****
ssh 192.*.*.* /home/rpi-backup/umount-hdd.sh
Alles weitere sollte Klar sein wenn nicht bitte Melden
Hans