sonic6 Posted August 25, 2021 Share Posted August 25, 2021 (edited) Hier ein kurzer Guide zu einem User Script um von einem Pi eine Sicherungsimage zu erstellen und zu verkleinern. Da ich selbst recht neu mit Unraid unterwegs bin und total unerfahren im Bereich Linux, Termina, Befehle, etc... bitte ich Fehler zu entschuldigen und gerne zu Verbessern und/oder brauchbares zu ergänzen. Als Basis habe ich das Script von Lukas Knöller - hobbyblogging.de genommen und um ein paar Variablen und PiShrink ergänzt. Das Script verbindet sich per SSH auf den Pi, erstellt ein Image davon und legt es im Backup Share ab. Danach werden überfällige Backups gelöscht und das erstellte Backup verkleinert. -Backup Share als Ziel einrichten. Falls mehrere Pi's gesichert werden sollen, empfehle ich für jeden Pi einen eigenen Unterordner im Share zu erstellen. -Unterordner im Share erstellen: Im Unraid Terminal folgenden Befehl ausführen mkdir -p /mnt/user/DEIN-BACKUP-SHARE/PI-UNTERORDNER -sshpass downloaden, /extra/ Ordner auf dem Stick erstellen, sshpass in den Ordner /extra/ verschieben und sshpass installieren: Im Unraid Terminal folgenden Code ausführen. wget https://packages.slackonly.com/pub/packages/14.2-x86_64/network/sshpass/sshpass-1.06-x86_64-1_slonly.txz && mkdir /boot/extra && mv sshpass-1.06-x86_64-1_slonly.txz /boot/extra/ && installpkg /boot/extra/sshpass-1.06-x86_64-1_slonly.txz Alternative, falls die Quelle nicht erreichbar ist: Spoiler wget https://slack.conraid.net/repository/slackware64-current/sshpass/sshpass-1.09-x86_64-1cf.txz && mkdir /boot/extra && mv sshpass-1.06-x86_64-1_slonly.txz /boot/extra/ && installpkg /boot/extra/sshpass-1.09-x86_64-1cf.txz Dadruch dass wir das sshpass im /extra/ Ordner des Unraid Sticks liegen haben, wird sshpass mit jedem Unraid Start installiert. Wer das "Fix Common Problems" Plugin nutzt, wird nun eine Meldung bekommen, diese kann man mit dem Button rechts ignorieren: -PiShrink download, verschieben nach /mnt/user/appdata/, ausführbar machen: Im Unraid Terminal folgenden Code ausführen. wget -O /mnt/user/appdata/pishrink.sh https://raw.githubusercontent.com/Drewsif/PiShrink/master/pishrink.sh && chmod +x /mnt/user/appdata/pishrink.sh -User Script Plugin installieren: -User Script Plugin aufrufen und neue User Script erstellen: -Script ins leere Feld kopieren und Variablen anpassen: #!/bin/bash #Variablen PI_IP="XXX.XXX.XXX.XXX" SSH_USER="PI-USER" SSH_PW="DEIN-SUPER-PASSWORT-VOM-PI-USER" BACKUP_PFAD="/mnt/user/DEIN-BACKUP-SHARE/PI-UNTERORDNER" #ohne / am Ende BACKUP_ANZAHL="5" BACKUP_NAME="pi_image" SHRINK_SCRIPT_PFAD="/mnt/user/appdata/pishrink.sh" DATUM="$(date +%Y%m%d)" #Backup erstellen sshpass -p ${SSH_PW} ssh ${SSH_USER}@${PI_IP} sudo "dd if=/dev/mmcblk0" | dd of=${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img bs=1MB #Alte Sicherung löschen pushd ${BACKUP_PFAD}; ls -tr ${BACKUP_PFAD}/${BACKUP_NAME}* | head -n -${BACKUP_ANZAHL} | xargs rm; popd sync -f ${BACKUP_PFAD} #shrink ${SHRINK_SCRIPT_PFAD} ${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img Im falle von Raspberry Pi OS sollte der User "Pi" sein. Das Passwort habt ihr bei der Installation von Raspberry Pi OS selbst festgelegt. Am Ende der Variablen BACKUP_PFAD darf kein "/" gesetzte sein, da dieses schon im Code enthalten ist. Solltet Ihr "root" nutzen, oder das Script aufgrund von sporadischen erneutem Abfragen des Passwortes abbrechen, haben @dan4UR und @Anym001 vielleicht die Lösung für euch: root User Erneute Passwortabfrage bei sudo -Script mit dem "SAVE CHANGES" Button abspeichern. -Cron anpassen: in meinem Beispiel läuft das Script zur 15. Minute in der 23. Stunde am 11. und 26. Tages jeden Monat, an egal welchem Wochentag. Oder kurz: jeden 11. und 26. um 23:15Uhr. Hilfe zu Cron: https://crontab.guru/ -Einstellungen unten mit dem Button "APPLY" sichern. Wie Anfangs schon erwähnt, bin ich nicht sehr Erfahren und bitte um Rücksicht bei Fehlern. Danke auch an @ich777, @alturismo und @Anym001 für Idee, Ratschläge, Testen und Wissen. Ansonsten, Happy Backup! *CHANGELOG* 25.08.2021 20:20 - Variable DATE hinzugefügt 30.11.2021 09:35 - Troubleshooting Ergänzung für root und sudo 26.12.2021 14:22 - Alternative Quelle für sshpass. Danke @mgutt Edited December 26, 2021 by sonic6 7 2 Quote Link to comment
i-B4se Posted August 25, 2021 Share Posted August 25, 2021 Cooles Tutorial! Eine Sache die mich daran ein wenig stört, dass das PW und der User in der Datei steht. Ich hatte das über Public-Key-Authentifizierung gelöst. So kann man dann per ssh user@ip befehl..... alles ausführen ohne die Daten hinterlegen zu müssen. 1 Quote Link to comment
ich777 Posted August 25, 2021 Share Posted August 25, 2021 59 minutes ago, i-B4se said: Ich hatte das über Public-Key-Authentifizierung gelöst. Wäre auch möglich und wäre auch meine Lösung... aber kann man so oder so machen, denk mal drüber nach wieviele Passwörter in den Docker Templates gespeichert sind... Quote Link to comment
dan4UR Posted August 25, 2021 Share Posted August 25, 2021 Da ich mit sonic in Kontakt stand und ich ursprünglich vorhatte Pi's zu sichern kam dieses jetzt hier raus, ohne jeden Pi mit einem eigenen Skript zu versehen. Ebenso das Shrinken kann ruhig die unraid Kiste machen, da die vermeintlich mehr Power zur verfügung hat als der kleine Pi. @i-B4se Wie würde das denn konkret aussehen, da die Frage glaub ich auch bei @sonic6 aufkam ?! Quote Link to comment
sonic6 Posted August 25, 2021 Author Share Posted August 25, 2021 An eine Möglichkeit das Passwort nicht im Klartext ins Script zu packen, hatte ich auch schon gedacht. Aber zum jetzigen Zeitpunkt sprachen zwei Gründe für mich dagegen: 1. Passwort als Klartext war sehr Einsteigerfreundlich und für diese Nachvollziehbar. Jemand der Fit in der Materie ist, wird das Script mit Leichtigkeit anpassen. 2. Es überstieg bisher einfach meine Fähigkeiten 1 Quote Link to comment
sonic6 Posted August 25, 2021 Author Share Posted August 25, 2021 *CHANGELOG* 25.08.2021 20:20 - Variable DATE hinzugefügt Musste schon die erste Sache anpassen. Wenn das Script über einen Tageswechsel läuft, würde das Shrinken nicht stattfinden. 1 Quote Link to comment
i-B4se Posted August 25, 2021 Share Posted August 25, 2021 1 hour ago, dan4UR said: @i-B4se Wie würde das denn konkret aussehen, da die Frage glaub ich auch bei @sonic6 aufkam ?! Da gibt einige Tutorials. Ich glaube 😅 ich habe das damals nach dieser Anleitung gemacht. https://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/ Ansonsten einfach mal nach "SSH-Key-Authentifizierung" gucken. Mittlerweile arbeite ich so nicht mehr. Der Backupserver hat Leserechte auf einige Ordner und "zieht" dann die Daten. 1 hour ago, ich777 said: Wäre auch möglich und wäre auch meine Lösung... aber kann man so oder so machen, denk mal drüber nach wieviele Passwörter in den Docker Templates gespeichert sind... Stimmt, aber durch den Key wird es auch ein wenig einfacher 1 Quote Link to comment
ich777 Posted August 25, 2021 Share Posted August 25, 2021 21 minutes ago, i-B4se said: Stimmt, aber durch den Key wird es auch ein wenig einfacher Irgendwo gibt es immer eine Schwachstelle/Lücke, weiß man doch. 2 Quote Link to comment
Anym001 Posted August 29, 2021 Share Posted August 29, 2021 @sonic6 Ich hätte da zwei Fragen zu einem Teil von deinem Script: Quote sudo "dd if=/dev/mmcblk0" | dd of=${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img bs=1MB Warum bs=1MB und nicht bs=4MB? Warum Anführungszeichen nur über den if Befehl von dd und nicht über den kompletten dd Befehl? Quote Link to comment
sonic6 Posted August 29, 2021 Author Share Posted August 29, 2021 (edited) nochmal vorweg: Primär habe ich nur den Guide zusammen geschrieben und die Befehle zusammengetragen, um Variablen ergänzt und ausprobiert. Deswegen kann ich nur vermuten, warum die Befehle so sind, wie sie sind. Sollte ich quatsch erzählen, bitte ich dass die von Jemanden der es "weiß", korrigiert wird. 55 minutes ago, Anym001 said: Warum bs=1MB und nicht bs=4MB? Das habe ich so aus dem Script von Lukas Knöller übernommen. Laut diesem Artikel schien mir keine Anpassung von nöten. 55 minutes ago, Anym001 said: Warum Anführungszeichen nur über den if Befehl von dd und nicht über den kompletten dd Befehl? Ich denke es liegt daran, dass das dd if=/dev/mmcblk0 im Ziel ausgeführt wird, dann per pipe an dd of=${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img übergeben wird, welches lokal ausgeführt wird. Edited August 29, 2021 by sonic6 2 Quote Link to comment
dan4UR Posted September 3, 2021 Share Posted September 3, 2021 Leider komme ich an einer Stelle nicht weiter, bzw. wird garkein Backup erzeugt. Eine Datei im korrekten Pfad wird zwar angelegt aber eben mit 0kb. Wenn ich das angepasste Skript ausführe erscheint folgendes: Script location: /tmp/user.scripts/tmpScripts/Pihole_Backup/script Note that closing this window will abort the execution of this script 0+0 records in 0+0 records out 0 bytes copied, 3.23965 s, 0.0 kB/s /mnt/user/Backup/Pihole / rm: missing operand Try 'rm --help' for more information. / pishrink.sh v0.1.2 pishrink.sh: Gathering data ... Error: The device /mnt/user/Backup/Pihole/pi_image-20210903.img is so small that it cannot possibly store a file system or partition table. Perhaps you selected the wrong device? pishrink.sh: ERROR occurred in line 281: parted failed with rc 1 pishrink.sh: Possibly invalid image. Run 'parted /mnt/user/Backup/Pihole/pi_image-20210903.img unit B print' manually to investigate ... Mit @sonic6 bereits getestet, ob ich überhaupt Zugriff per ssh habe und JA, habe ich. Sowohl per ssh als auch per sshpass. Sonderzeichen " # " im Passwort schließe ich aus, da ich ja Zugriff bekomme. Evtl. bereitet es ja Probleme im Skript ... Flotte Überprüfung ob ich für diverse Dinge root Rechte bzw. Passwort benötige ergabt: pi@UniPi:~ $ sudo crontab -e no crontab for root - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/nano <---- easiest 2. /usr/bin/vim.tiny 3. /bin/ed Choose 1-3 [1]: (Ich weiss nicht inwieweit das helfen könnte, aber ich Poste es einfach mal) Vielleicht kommt ja einer von euch schlauen Köpfen zur Lösung des Problems. Quote Link to comment
Anym001 Posted September 3, 2021 Share Posted September 3, 2021 (edited) 2 hours ago, dan4UR said: Vielleicht kommt ja einer von euch schlauen Köpfen zur Lösung des Problems. Das gleiche Problem hatte ich auch. Es liegt an der Rechtevergabe des benutzten Nutzers bzw. daran wenn ein sudo Befehl abgesetzt wird, er noch einmal das Passwort bestätigen muss. Somit wird der dd Befehl nicht ausgeführt und läuft auf Fehler. Lösung: (Gegenteil hier ausführlich erklärt) Kurzfassung: 1. Einloggen in deinen Pi 2. Befehl "sudo visudo" ausführen 3. Folgende Zeile hinzufügen "pi ALL=(ALL) NOPASSWD: ALL" -> pi durch den gewünschten Nutzer ersetzen. (Befehle natürlich ohne "") Edited September 3, 2021 by Anym001 2 Quote Link to comment
dan4UR Posted November 29, 2021 Share Posted November 29, 2021 Kleines Update meinerseits. Ich hatte bei zwei RPi das Problem, dass das Skript einfach nicht anlaufen wollte (hierbei handelte es sich um Mediaplayer mit Libreelec die von Haus aus nur einen Nutzer haben und das ist der root Nutzer). Hier ein kleiner Workaround wie es jetzt ohne Probleme ging. Zum einen muss man bevor man das Skript das erste mal ausführt sich im unraid internen Terminal (oben rechts in der Statusleiste) per ssh mit dem Pi verbinden. ssh root@pi-ip Adresse Dies hat zur folge, dass der Host Key Fingerprint generiert wird und somit der Key zur Identifizierung bzw. Verifizierung auf unraid gebildet wird. Das ganze bestätigt man mit yes und gibt im Anschluss das Passwort für den User root ein. Dann sollte man soweit erfolgreich verbunden sein. Danach einfach das Fenster mit zweimaliger Eingabe von exit schließen und beenden. Um jetzt das Backupskript noch lauffähig zu machen bedarf es noch einer kleinen Modifikation vom Skript. An der Stelle: #Backup erstellen sshpass -p ${SSH_PW} ssh ${SSH_USER}@${PI_IP} sudo "dd if=/dev/mmcblk0" | dd of=${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img bs=1MB muss das "sudo" vor dem dd rausgenommen werden, dass dies dann so aussieht: #Backup erstellen sshpass -p ${SSH_PW} ssh ${SSH_USER}@${PI_IP} "dd if=/dev/mmcblk0" | dd of=${BACKUP_PFAD}/${BACKUP_NAME}-${DATUM}.img bs=1MB und siehe da. Das Skript läuft ohne murren durch. Vielleicht kann der ein oder andere Experte vielleicht noch erläutern woran es genau liegt, aber root und sudo scheinen sich nicht zu mögen und das Logfile deutet leider auch nicht darauf hin, dass genau hier der Fehler liegt. 2 Quote Link to comment
sonic6 Posted November 29, 2021 Author Share Posted November 29, 2021 8 minutes ago, dan4UR said: Vielleicht kann der ein oder andere Experte vielleicht noch erläutern woran es genau liegt, aber root und sudo scheinen sich nicht zu mögen und das Logfile deutet leider auch nicht darauf hin, dass genau hier der Fehler liegt. Ich bin kein Experte, aber ich vermute einfach mal, dass es daran liegt, das man als root ja schon "root" ist und man sich selbst nicht mehr als Superuser identifizieren muss? Ich muss ja als "normaler" Nutzer (mit root Rechten) sudo nur für Befehle verwenden, die Root oder Superuser Privilegien erfordern und mich auch dabei authentifizieren. Danke auf jeden Fall für die Zusammenfassung, werde diese morgen im Tutorial ergänzen. Quote Link to comment
Vanix Posted December 22, 2021 Share Posted December 22, 2021 On 8/25/2021 at 6:01 PM, sonic6 said: wget https://packages.slackonly.com/pub/packages/14.2-x86_64/network/sshpass/sshpass-1.06-x86_64-1_slonly.txz && mkdir /boot/extra && mv sshpass-1.06-x86_64-1_slonly.txz /boot/extra/ && installpkg /boot/extra/sshpass-1.06-x86_64-1_slonly.txz Hi! Wollte gerade das Script testen, bis jetzt hatte ich immer ein Script auf dem PI, aber über Unraid gefällt mir das viel besser. Leider ist wohl der Link down? Connecting to packages.slackonly.com (packages.slackonly.com)|2602:ffc5::ffc6:f752|:443... failed: Network is unreachable. Gibt es eine andere Möglichkeit diese Datei runterzuladen? Grüße Vanix Quote Link to comment
mgutt Posted December 23, 2021 Share Posted December 23, 2021 11 hours ago, Vanix said: Gibt es eine andere Möglichkeit diese Datei runterzuladen? https://slackware.pkgs.org/current/slackers/sshpass-1.09-x86_64-1cf.txz.html 1 Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.