Backup wenn der Fileserver kommt

Begonnen von Otto123, 28 April 2019, 20:31:39

Vorheriges Thema - Nächstes Thema

Otto123

Die Idee habe ich schon sehr lange im Hinterkopf gehabt: regelmäßig die lokalen backup Pfade vom raspberry auf meine NAS oder einen Windows Server zu kopieren. Alle Schritte sind eigentlich klar, trotzdem habe ich die Umsetzung immer wieder vor mir hergeschoben.
Um die Sache zu erleichtern habe ich eine Art Installationsscript für die komplette Einrichtung gebaut. Vielleicht hilft es Jemanden das Backup auf ein Netzlaufwerk jetzt einzurichten und nicht länger zu warten. ;)
Das Script muss vor Beginn mit ein paar Variablen auf die eigene Umgebung angepasst werden!
Voraussetzung
Im Raspbian ist cifs-utils bereits installiert.
Für die Kommunikation mit FHEM wird mein HTTP Client (Script) benötigt. Das wird selbstständig geladen.
Vorhandene Funktion in FHEM
FHEM selbst sichert - vor jedem update und save - die zu ersetzenden Dateien in den Ordner restoreDir.
Das backup Kommando sichert in den Ordner backup. Es kann von FHEM selbst entweder automatisch vor jedem update oder bei Bedarf (zeitgesteuert) angestossen werden.
Was wird gemacht?
Der Kopiervorgang der backup Dateien vom Raspberry zum Netzlaufwerk wird vom "present" Zustand der NAS gesteuert. Dabei ist es egal ob die NAS per Hand oder per WOL gestartet wurde.
Es wird ein Script gestartet - backupFhem.sh:
  • Das Netzlaufwerk wird nur temporär gemountet.
  • Der Kopiervorgang mit Rsync sichert nur neue Dateien.
  • Es wird in FHEM geloggt, bei Fehlern wird eine Logdatei geschrieben
Das Installationsscript:
  • muss im root Kontext ausgeführt werden (z.B. sudo -su)
  • erzeugt den Eintrag in der fstab
  • erzeugt das Script für den Kopiervorgang
  • erzeugt die notwendigen Geräte in FHEM

Ich hoffe, dass die Kommentare für die weitere Erklärung genügen. Ansonsten gerne fragen.
Eine Komplettversion kann hier heruntergeladen werden.
Etwas umfangreicher steht das Ganze auch in meinem Blog.

Gruß Otto
# Konfiguration der Datei, Server, Ordnernamen und des Benutzerkontos
fcred='smbcredentials'
share='//Server1/Sicherung'
mdir=/media/Sicherung
# Benutzerkonto ablegen
echo 'username=UserName' > /usr/.$fcred
echo 'password=Userpassword' >> /usr/.$fcred
# fstab Eintrag anhängen
echo "$share $mdir cifs noauto,users,credentials=/usr/.$fcred 0 0" >> /etc/fstab
# Ordner erzeugen, Verbindung testen
mkdir $mdir
mount $mdir
mkdir ${mdir}/fhem
umount $mdir
########################
# Ab hier wird das backup Script erzeugt
cat <<EOF > /opt/fhem/backupFhem.sh
qpath="/opt/fhem"
dpath=$mdir
LOG=backupFhem.log
if [ -d "log" ];then LOG="log/\$LOG";fi
# check if fhemcl exists
file=fhemcl.sh
{
date
if [ ! -e \$file ]
then
    echo "\$file is missing"
    wget https://raw.githubusercontent.com/heinz-otto/fhemcl/master/\$file
    chmod +x \$file
fi
# mount, sync
mount "\$dpath"
bash fhemcl.sh 8083 "set BackupFhem gestartet"
if rsync -rut \${qpath}/backup \${qpath}/restoreDir \${dpath}/fhem/\$(hostname)
then
   bash fhemcl.sh 8083 "set BackupFhem gesichert"
else
   bash fhemcl.sh 8083 "set BackupFhem ERROR"
fi
umount "\$dpath"
} >> \$LOG 2>&1
EOF
##########################
# bei Bedarf den HTTP Client herunterladen
if [ ! -e $file ]
then
    echo "$file is missing"
    wget https://raw.githubusercontent.com/heinz-otto/fhemcl/master/$file
    chmod +x $file
fi
# Ab hier werden die FHEM Devices erzeugt
cat <<EOF | bash fhemcl.sh 8083
define BackupFhem dummy
attr BackupFhem room backup
define backupFhemlog FileLog ./log/backupFhem.log fakelog
attr backupFhemlog room backup
define backupCopy DOIF ([Server1] eq "present") ("bash backupFhem.sh")
attr backupCopy room backup
attr backupCopy wait 120
EOF

Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

juemuc

Hallo Otto,

warum sicherst Du nicht direkt auf dem NAS? Ich habe mein NAS mit autofs eingebunden und das BAckup läuft direkt auf ein NAS-Verzeichnis. Bei Bedarf wecke ich das NAS vorher auf.
Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

Otto123

Hallo Jürgen,

primär: weil ich es genau so wollte :)
Und weil ich nichts im System umbiegen muss, ich sichere ja auch restoreDir.
Mir ging es nicht um die Strategie, ich wollte einen möglichen Weg aufzeigen. ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damu

Hallo
Ist das noch aktuell?
Habe eine Seite gefunden wo es Scheinbar mit FHEM Mitteln geht?
https://forum.fhem.de/index.php?topic=124590.0
Beim Lesen der Nachrichten bin ich aber davon abgekommen.
"sudo ..." unter FHEM geht doch normal nicht?

Werde den Beitrag von Otto Lesen und es damit mal versuchen.
Hab aber ein Ubuntu Server auf einem Zotac.
Hoffe das läst sich leicht anpassen.

Otto123

Hi,
Zitat von: Damu am 02 August 2023, 18:07:50Ist das noch aktuell?
mein Backup läuft noch genau wie damals.
Zitat von: Damu am 02 August 2023, 18:07:50"sudo ..." unter FHEM geht doch normal nicht?
geht schon - wenn man es richtig einrichtet, aber braucht man für einen mount nicht - wenn man den richtig einrichtet ;)

An Ubuntu sollte diesbezüglich nichts speziell sein.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damu

#5
Habe eine USB_SSD für die Fritzbox bestellt.
Möchte es damit versuchen.
Habe ein Synology, aber das läuft nicht immer.
Die Fritzbox läuft immer, das sollte reichen.
Ich hoffe ich kann es so abändern das es ein Backub auf dem FHEM Server und zusätzlich eines auf das NAS (Fritz.Nas) schreibt.

Der Link von der "Kompletversion" ist leider nicht mehr gültig?

Ist das etwa die:
https://github.com/heinz-otto/raspberry/blob/master/setupBackupFhem2Cifs.sh



Sorry blick da noch nicht durch?
Welches ist die Neuste Version?

Das Script muss ich für meine Nas_Anmeldung abändern? User, Password und Adresse?

Wo muss das Script hin? Home oder FHEM
Wie muss ich es starten? User FHEM?

Sorry blick ich noch nicht ganz durch




Otto123

Du musst es nicht mit einem Setupscript machen, das geht besser Schritt für Schritt um es zu verstehen.
Zitat von: Damu am 03 August 2023, 22:22:10Habe ein Synology, aber das läuft nicht immer.
Aber genau dafür habe ich das ursprünglich mal gemacht: der lokale Backupordner wird weg kopiert wenn der Fileserver aktiviert wird.
https://heinz-otto.blogspot.com/2019/04/backup-wenn-der-server-kommt.html
Erster Schritt ist die Verbindung zum Fileserver (mount) die solltest Du erstmal einrichten und hinbekommen.
Danach kannst Du das BackupScript anlegen und aus FHEM heraus testen.
Als letzter Schritt bleibt das triggern und starten des Scriptes je nach gewünschtem Kriterium. Wenn dein Laufwerk dann immer da ist, musst Du halt zeitlich triggern.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

ZitatHabe eine USB_SSD für die Fritzbox bestellt.
Möchte es damit versuchen.
Welche Fritte in welcher Version?

Hintergrund: Ältere Fritzboxen unterstützen nur ältere Windows (SMB/CIFS) Verfahren. Muß man beim mounten dann mit Angeben ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Damu

7583 Neuere Version.

Hab es mal mit der Installation auf OTTOS Seite versucht.

Bei "mount ${mp}" kommt:
Zitatsysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=8133888k,nr_inodes=2033472,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=1633348k,mode=755)
/dev/mapper/FHEMZotac--vg-root on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=24,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=16430)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
configfs on /sys/kernel/config type configfs (rw,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
lxcfs on /var/lib/lxcfs type fuse.lxcfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other)
tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=1633344k,mode=700,uid=1000,gid=1000)
damu@FHEMZotac:~$

und bei "umount ${mp}"
Zitatumount: fehlerhafter Aufruf
Rufen Sie ,,umount --help" auf, um weitere Informationen zu erhalten.
damu@FHEMZotac:~$

Das Verzeichnis :/mnt/Sicherung wurde erstellt.

Die fstab:
Zitat# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/FHEMZotac--vg-root /               ext4    errors=remount-ro 0       1
/dev/mapper/FHEMZotac--vg-swap_1 none            swap    sw              0       0
//192.168.178.1/Transcend /mnt/Sicherung cifs noauto,users,credentials=/usr/.smbcredentials 0 0

Im Totalcomander (Win10) sieht das Verzeichnis so aus:
"\\Swissnet\fritz.nas\Transcend"

Wernieman

Bei "mount ${mp}" kommt:Kann es sein, das $mp bei Dir leer ist? Jedenfalls zeigt ein mount ohne parameter alle gemounteten Objekte, was man in Deinem Code-Tag sieht. Deshalb kann dann der umount auch nicht klappen
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

genau ;) - also entweder (für ein Script)
mp=/mnt/Sicherung
mount ${mp}
oder einfach
mount /mnt/Sicherung ;D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damu

Danke
"mount /mnt/Sicherung"
geht.

Die fstab sieht für das Fritznas so aus:
Zitat//192.168.178.1/fritz.nas/Transcend/backup /mnt/Sicherung cifs noauto,users,credentials=/usr/.smbcredentials 0 0

Die ".smbcredentials"
steht in "/usr"
Besitzer root
Berechtigung 640 oder reicht 600?

Sollte das nicht im home Verzeichnis sein?

Otto123

Zitat von: Damu am 04 August 2023, 19:14:58Besitzer root
Berechtigung 640 oder reicht 600?
In meiner Notiz steht die Beschreibung unter Punkt 2.

Zitat von: Damu am 04 August 2023, 19:14:58Sollte das nicht im home Verzeichnis sein?
Du willst doch nicht mit einem User sondern auch mit anderen Usern (fhem) verbinden können, deswegen steht es zentral.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damu

Wie kann ich feststellen das die
"/usr/.smbcredentials"
Datei und Ordner die Richtigen Berechtigungen haben.
"EOF" und "EOI".
Hatte ich noch nie?

Habe diese Anleitung genommen, weil diese nur die Minimalste Freigabe für Dateien macht.
Nach anderen Anleitungen wäre ich vieleicht schon am Ziel.

Otto123

#14
ls -lha /usr/.smbcredentialshttps://wiki.ubuntuusers.de/Rechte/

Zitat von: Damu am 05 August 2023, 10:10:39"EOF" und "EOI".
Hatte ich noch nie?
Das ist Anfang und Ende von einem "Heredoc". Ein einfacher "Trick" um Texte im Block zu behandeln. https://linuxize.com/post/bash-heredoc/
Wenn Du das nicht verstehst oder willst lässt Du die erste und letzte Zeile einfach weg, die Befehle stehen so da wie Du sie Zeilenweise ausführen kannst. Achtung, ich arbeite immer mit Variablen! Die müssen gefüllt sein. Manchmal werden sie in meinen Anleitungen ein paar Codeblöcke vorher gefüllt! ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz