Aus verschiedenen Gründen (Performance, Speicherplatzgröße, ...) will man häufig seine Raspberry Rootpartition auf ein externes Gerät verschieben. Dieses kann man manuell vornehmen oder es mit einem kleinen Script automatisch erledigen lassen.

 

Will man ein SD Kartenimage was man auf einer Raspberry erstellt hat, clonen und auf anderen Raspberries ebenso laufen lassen, muss man eine Sache beachten. Ansonsten bekommt man auf einer anderen Raspberry mit dem geclonten SD Kartenimage keine Netzwerkverbindung.

Um sich mit Threading in Python einzuarbeiten ist es am einfachsten wenn man sich eine konkrete Aufgabe stellt, die zu implementieren ist. Was lag es da näher als an einer Raspberry PI mal eben 6 LEDs anzuschliessen und per GPIO zu steuern. Auf den folgenden Seiten beschreibe ich kurz wie das Programm funktioniert bzw was man anpassen muss, damit man es auf seiner eigenen Raspi laufen lassen kann. Weiterhin findet sich ein Video welches das Programm in Aktion zeigt sowie ein Link zum Download des Python Codes.

 

Bislang konnte man raspbian gut auf einer 4GB SD Karte unterbringen. Mit Jessie ist das nicht mehr möglich - da benötigt man eine 8GB SD Karte.

Wenn man seine Raspberry irgendwann in Produktion übernimmt und sie eine dedizierte Aufgabe hat ist ein full blown Jessie absolut nicht notwendig. Wenn man miniban installiert reicht eine 1GB SD Karte. Allerdings ist da wirklich nur das notwendigste vorhanden und man muss verschiedene Dinge nachinstallieren. Dazu gehören z.B. python  wie auch RPi.gpio. Aber dann kommt man immer noch mit einer 1GB SD Karte aus.

Die Kartengröße ist mittlerweile nicht mehr ein grosses Problem - aber wer seine Raspberry ins Internet stellt sollte tunlichst so wenig wie möglich Software auf seiner Raspberry installiert haben um die Zahl der angreifbaren Anwendungen auf das Minimum zu reduzieren. Leider muss auch iptables erst nachinstalliert werden. Des weiteren gibt es nur den root Benutzer. ssh Zugriff auf root sollte immer aus Sicherheitsgründen unterbunden sein. Man muss also noch ein paar Nacharbeiten vornehmen. Aber dann hat man ein wirklich  kleines Betriebssystem für seine Raspberry.

Häufige Fragen zu raspiBackup. Jeder neue Benutzer von raspiBackup sollte sich einmal alle Fragen und Antworten durchlesen.

Mittlerweile haben so viele Leute aus der Community durch Kommentare, Erweiterungsvorschläge und Beta- und Fixtests zu raspiBackup beigetragen, dass es an der Zeit wird sie dankend zu nennen. Sich an alle zu erinnern war mir leider in Anbetracht der grossen Anzahl nicht mehr im nachhinein möglich.

Nach längerer Entwicklungszeit und zeitaufwändigem Betatest ist ab heute eine neue Scriptrelease 0.6.1 von raspiBackup verfügbar. Sie enthält weitere kleine Erweiterungen (Details dazu siehe die Versionshistorie) sowie Unterstützung für mehr als zwei Partitionen im neuen partitionsorientierten Modus. Damit kann dann auch ein NOOBS Image gesichert und wiederhergestellt werden. Die Details zu den Unterschieden zwischen den zwei Modi sind hier beschrieben. Die Webseiten, die den Backup und Restore beschreiben sind entsprechend auf den neuesten Stand gebracht worden.

Es besteht die Möglichkeit eigene Codeerweiterungen vor und nach dem Backupprozess des Scripts einzubinden. Dieses ist sinnvoll, wenn eigentlich Änderungen im Backupscript notwendig sind aber dann natürlich nach jedem Update von raspiBackup auf eine neue Version wieder neu eingepflegt werden müssen. Die Extensions sind unabhängig vom Scriptcode und deshalb in diesem Falle zu empfehlen.

Drei Erweiterungen stehen zur Verfügung und dienen als Beispiele für eigene Erweiterungen. Durch die ersten wird  die CPU Temperatur sowie die Hauptspeicherbelegung vor und nach dem Backup ausgegeben. Die dritte Erweiterung wird nur am Ende des Backups aufgerufen und kann bei Erfolg bzw Misserfolg des Backups unterschiedliche Aktionen auslösen.

Wer nützliche Erweiterungen für die Community erstellt hat kann sie gerne hier in einem Kommentar beschreiben  und die Downloadlocation nennen. Sollten Fähigkeiten der Extensions fehlen einfach einen Kommentar dazu hier hinterlassen und ich prüfe in wieweit die fehlende Funktion eingepflegt werden kann.

Datum Version Änderungen und Erweiterungen
  0.6.1.4

1) Erweiterung: Unterstützung von Raspi3 wenn sie keine SD Karte mehr benutzt

2) Bugfix: Beim partitionsorientierten Modus werden beim tar Backup die Verzeichnisse wie /tmp, /proc/ dev, usw nicht mehr mitgesichert

3) Erweiterung: Der partitionsorientierte Modus unterstützt neben fat16/32 und ext234 auch swap und btrfs Partitionen zu sichern.

4) Erweiterung: Bei Rsync Backup wird explizit geprüft ob Hardlinks unterstützt werden.

5) Bugfix: Die Extensions, die am Ende des Backups aufgerufen werden, bekommen nun wie dokumentiert als Parameter den raspiBackup Returnwert. Bislang wurde auch im Fehlerfalle Erfolg gemeldet.

 8.10.2016 0.6.1.3b 1) Bugfix: "RBK0027E: Kein externes Gerät an /backup verbunden. Die SD Karte würde für das Backup benutzt werden." wird gemeldet und nicht der Backuppfad genommen, der als letzter Parameter im Aufruf angegeben wurde.
3.10.2016  0.6.1.3a

1) Bugfix: Erstellung von Backups von .img und .mbr Dateien per dd müssen ohne Fehler beendet werden. Ansonsten Abbruch des Backups.

2) Erweiterung: Rootpartitionsanpassung beim Restore wird vom Linux Tool parted vorgenommen und nicht mehr mit einem eigenprogrammierten Algorithmus

3) Bugfix: Wenn beim Restore keine Partitionen auf der Restore SD Karte existiert wird eine vernünftige Meldung ausgegeben und keine kryptische Fehlermeldung von dem benutzten parted Tool

1.9.2016 0.6.1.3

1) Erweiterung: Treten beim Starten von raspiBackup Fehler auf werden die sofern die eMailkonfiguration OK ist per eMail gemeldet.

2) Erweiterung: Beim dd Backup wird dafür gesorgt, dass nur den von den definierten Partitionen belegte Platz gesichert wird. Somit kann man eine 16GB SD Karte benutzen, von der man nur 4GB benötigt und auch nur 4 GB sichern. Das spart Backupzeit und Backupspeicherplatz. Konfigurationsvariable:  DEFAULT_DD_BACKUP_SAVE_USED_PARTITIONS_ONLY

3) Erweiterung: Boot partitionen werden sofern der Backupspace es unterstützt mit Hardinks verlinked  so dass nicht mehr jedes Mal 60MB pro Sicherung benötigt werden obwohl sich die Bootpartition nicht geändert hat. Konfigurationsvariable: DEFAULT_LINK_BOOTPARTITIONFILES

4) Erweiterung: Optionsparameter können auch textuell angegeben werden bei den Optionen -l, -L und -m (z.B. -m detailed -L syslog -l debug)

5) Erweiterung: Ein Restore auf  beliebige SD Karten (mmcblk0, mmcblk1, ...) ist möglich. Bislang ging es nur auf mmcblk0.

6) Bugfix: Logdateien, die im Backupverzeichnis angelegt werden werden im Fehlerfalle im Homeverzeichnis gesichert bevor das fehlerhafte Backupverzeichnis gelöscht wird.

7) Erweiterung: Falls eine neue Version zu den Vorgängerversionen inkompatible Änderungen hat wird ausdrücklich darauf beim Update mit -U in einer Meldung darauf hingewiesen.

8) Erweiterung: Fehlermeldungen der Backuptools dd, tar und rsync werden in einer Meldung ausgegeben und sind nicht mehr nur im Debug Log zu finden.

9) Bugfix: Die Option -u um Verzeichnisse beim Backup auszuschliessen funktionierte seit der Version 0.5.15.7 nicht mehr

10) Bugfix: Cleanup bei Restore wurde nicht vorgenommen

11) Bugfix: Ein abbruch beim Restore wurde nicht als Fehler gemeldet

12) Erweiterung: Falls beim Restore die Ziel SD Karte kleiner oder größer ist als die SD Karte des Backups wird automaisch die zweite Partition angepasst und verkleinert bzw vergrößert, so dass die gesamte SD Karte benutzt wird. Das trifft nur zu für tar und rsync backup im normalen backup Modus.

13) Bugfix: Zwei Fehlerfallmeldungen wurden nicht angezeigt.

14) Die Parameter -a und -o sind obligatorisch

16.4.2016 0.6.1.2

1) Erweiterung: Alle Backups werden in jeweils separaten Unterverzeichnissen gesichert

2) Erweiterung: Wenn raspiBackup fehlerhaft endet werden die Services beim Parameter -a wieder gestartet

3) Erweiterung: -0 Option bewirkt beim Restore, dass Partitionlayouterstellungsfehler ignoriert werden (Auf eigene Gefahr!)

4) Erweiterung: -1 Option erstellt beim Restore kein neues Partitionslayout sondern benutzt das bereits existierende Layout der SD Karte (Auf eigene Gefahr!)

5) Erweiterung: Es kann konfiguriert werden, dass eine BenachrichtigungseMail nur geschickt wird wenn ein Fehler aufgetreten ist

6) Erweiterung: Pfad- und Dateinamen können relativ angegeben werden

7) Erweiterung: Services werden auch nach einem Backupfehler wieder gestarted (-A Parameter Argument)

8) Erweiterung: SSMTP eMail benutzt auch das -E Argument

9) Veraltet: Die -p und -r Parameter werden in einer zukünftigen Version wegfallen. Das Backupverzeichnis bzw die Backupdatei sollte ab sofort als letzter Aufrufparameter angegeben werden

10) Erweiterung: rsync und tar Tool Aufrufparameter können geändert werden (DEFAULT_RSYNC_BACKUP_OPTIONS, DEFAULT_RSYNC_BACKUP_ADDITIONAL_OPTIONS, DEFAULT_TAR_BACKUP_OPTIONS, DEFAULT_TAR_BACKUP_ADDITIONAL_OPTIONS) (Auf eigene Gefahr!)

11) Diverse kleinere Verbesserungen 

Aus Qualitätsgesichtspunkten gibt es noch eine weitere wichtige Erweiterung: Die Regressiontestsuite für raspiBackup testet nun alle 5 möglichen Backupvarianten durch

29.12.2015 0.6.1.1k

1) Bugfix: Existierende dd Backups werden gelöscht wenn ein tar oder rsync Backups im selben Backupverzeichnis erstellt werden

2) Erweiterung: Ein automatischer Update der lokalen raspiBackup Version findet statt wenn die aktuelle Scriptversion einen schwerwiegenden Fehler aufweist.

26.12.2015 0.6.1.1j 1) Bugfix: Existierende dd Backups werden gelöscht (Fehler in 0.6.1.1h eingebaut)
21.12.2015 0.6.1.1h 1) Bugfix: Er werden auch alte Bootbackups gelöscht bei denen das Rootbackup schon gelöscht wurde
15.12.2015 0.6.1.1g 1) Erweiterung: Rückwärtskompatibilität auf Version 0.6.1.1.: Ein Restore eines pre 0.6.1.1 Backups, wo noch nicht immer die Bootpartition bei jedem Backup gesichert wurde, benutzt das pre 0.6.1.1 Bootpartitionbackup für den Restore und meldet nicht, dass ein Bootpartitionbackup fehlt.
10.12.2015 0.6.1.1e 1) Bugfix: rsync Backup benutzt verschiedentlich keine Hardlinks
3.12.2015 0.6.1.1d 1) Bugfix: Es wird geprüft und eine Fehlermeldung ausgegeben wenn bc nicht installiert wurde
2.12.2015 0.6.1.1c

1) Bugfix: emailBody wurde manchmal bei ssmtp nicht empfangen

2) Bugfix: Es wurden die Bootpartitionsbackups von gelöschten Rootpartitionen nicht aufgeräumt.

3) Erweiterung: Beim Restore wird nicht mehr die absolute SD Kartengröße genommen um zu testen, ob das Backup auf die Ziel SD Karte passt sondern nur die Summe der Größen der genutzen Partitionen.

28.11.2015 0.6.1.1b

1) Bugfix: ssmtp und sendEmail funktionierte nicht mehr

2) Bugfix: force Option in sfdisk wurde entfernt um Partitionierungsfehler zu entdecken

25.11.2015 0.6.1.1

1) Erweiterung: eMailExtensions werden unterstützt um weitere eMailClients benutzen zu können

2) Erweiterung: Bootpartitionsdaten werden pro Backuplauf gesichert

11.11.2015 0.6.1

1) Umfangreiche Erweiterung: Mehr als zwei Partitionen können von der SD Karte gesichert werden. D.h. auch NOOBS Images können gesichert werden (Neue Parameter -P und -T)

2) Erweiterung: Parameter -V erlaubt Scriptversionen, die mit -U ersetzt wurde wurden, einfach wieder zur reaktivieren

3) Erweiterung:  Mit dem Parameter -y kann man eine größere Menge von Raspberries mit der aktuellen Scriptversion versorgen

4) Erweiterung: Es wird erkannt wenn bei  Aufrufparametern Anführungszeichen fehlen und dann andere Aufrufparameter ignoriert werden

5) Erweiterung: Verzeichnisse und Dateinamen können relativ zum aktuellen Verzeichnis angegeben werden. Sie müssen nicht mehr absolut sein.

6) Nicht mehr unterstützt: xmbc Backup

7) Nicht mehr unterstützt: rsync Backup auf nicht ext3/ext4 formatierten Laufwerken

8) Diverse kleine Änderungen (Geänderte und neue Meldungen, Anzeige ob und welche Konfigurationsdatei benutzt wird, viel mehr Logstatements, Fehlerbehandlung verbessert ...)

5.10.2015 0.5.15.9

Aufgelaufenen kleine Bugfixes und Erweiterungen:

1) Bugfix: Datei- und Verzeichnisnamen können Leerzeichen enthalten

2) Erweiterung: Parameter der Configfiles werden nun auch geprüft

3) Erweiterung: Versionsupdateprüfung wird nur einmal pro Tag vorgenommen

4) Bugfix: Parameter -G ändert auch die Sprache die in dem eMail subject benutzt wird

5) Erweiterung: Prüfung ob die bash zur Laufzeit benutzt wird

6) Anzeige ob und welche Konfigurationsdatei benutzt wird

5.8.2015 0.5.15.7

Aufgelaufenen kleine Bugfixes und Erweiterungen:

1) Erweiterung: Wenn eine neue Version existiert wird in der eMail ein Link auf die Versionshistorie angezeigt um schnelleres Nachsehen nach den Änderungen/Neuerungen zu ermöglichen

2) Bugfix: Wenn der Hostname Bindestriche enthält funktioniert der Restore nicht

3) Erweiterung: Es wird geprüft, ob Schreibzugriff auf den Backuppath (-p Parameter) besteht und sonst eine Fehlermeldung geschrieben

4) Erweiterung: /mnt und /media werden beim Sichern nicht mehr ausgenommen

5) Erweiterung: Es können bis zu 365 Backups aufgehoben werden (Parameter -k)

6) Erweiterung: Es kann mit -G die Sprache der Scriptmeldungen eingestellt werden, so dass sie anders sein kann als die eingestellte Standardsprache auf der Raspi was die Standardsprache für Meldungen ist

7) Bugfix: Beim -t rsync und -L 2 wird kein Logfile erstellt

8) Erweiterung: Die Extensions erhalten als ersten Parameter den Returncode des Backupprozesses

25.5.2015 0.5.15

Beliebige Erweiterungen (Extensions) werden vom Script vor und nach dem Backup aufgerufen. Zwei Beispielerweiterungen berichten die CPU Temperatur sowie den benutzen Hauptspeicher. Siehe http://www.linux-tips-and-tricks.de/de/raspberry/442-raspibackup-erweiterungen/ für Details zu den Erweiterungen.

27.3.2015 0.5.14.8

Jetzt kann auch ein Backup erstellt werden, wenn nur eine boot Partition existiert und eine externe root Partition benutzt wird.

22.3.2015 0.5.14.7

Das Messageformat bei der Start/Stop Meldung wurde korrigiert. Ausserdem wird nun wieder das Script mit einem Fehler beendet wenn beim Start/Stop von Services (-a/-o Parameter) ein Fehler auftritt.  Die Doku wurde angepasst: dass immer && bei mehreren Services benutzt werden muss und nicht ;

14.3.2015 0.5.14.6

Beim Update des Scripts wird das alte Script mit seiner Versionsnummer gesichert. Ausserdem werden nun ein paar Fehlermeldungen, die bei falschen Aufrufparametern nur in Englisch geschrieben wurden, nun wie alle anderen Meldungen sowohl in Deutsch bzw Englisch geschrieben - abhängig von der eingestellten Locale der Pi.

12.3.2015 0.5.14.5

Weitere Parameterüberprüfungen wurden hinzugefügt

26.2.2015 0.5.14

fdisk wurde durch parted ersetzt. Damit treten keine Fehlermeldungen mehr auf wenn ein gpt und kein mbr benutzt wird. Ein paar Bugs bei den Restoremeldungen behoben.

Weiterhin wurde ein Bug aus 0.5.12 gefixed, der dazu führte dass der Parameter -U (Scriptupdate) nicht mehr funktionierte.

24.2.2015 0.5.13

/mnt wird nicht mehr beim restore benutzt. Auch ist ein restore auf eine leere SD Karte möglich.

23.2.2015 0.5.12

Weitere Fortschrittsmeldungen werden mit -m 1 geschrieben. Meldungstexte z.T. überarbeitet

22.2.2015 0.5.11

Es wird ein Hinweis gegeben wenn eine neue Scriptversion existiert (Parameter -n)

22.2.2015 0.5.10

Zippen des tar oder dd Backups wird mit dem Flag -z eingeschaltet

20.2.2015  0.5.9

Umstellung von CVS auf GIT Coderepository und der Updatecheck -U lädt das aktuelle Script nicht mehr herunter sondern benutzt eine Versionsdatei.

Dadurch wird der Downloadzähler des Scripts nicht mehr verfälscht.

 

Detailierte Codeänderungscommits finden sich hier

Lfd Nr Vorschlag Status Kommentar

1

 Beim restore wird folgende Meldung geschrieben:

"WARNING: GPT (GUID Partition Table) detected on '/dev/mmcblk0'!

The util fdisk doesn't support GPT. Use GNU Parted."

Diese kann ignoriert werden, sollte aber nicht mehr erscheinen

 erledigt  Verfügbar ab Version 0.5.14

2

Beim Backupprozess etwas mehr Meldungen schreiben was gerade getan wird

erledigt Verfügbar ab Version 0.5.12

3

Beseitigung der Benutzung von /mnt beim restore

erledigt Verfügbar ab Version 0.5.13

4

Bei unpartitionierten SD Karten gibt es Probleme beim restore

(Siehe http://www.linux-tips-and-tricks.de/de/raspibackup-restore#comment-634)

erledigt Verfügbar ab Version 0.5.13

5

Einführung eines neuen Flags (z.B. -z) um die zip Funktion für tar und dd

einzuschalten und Entfernung der Backuptypen ddz und tgz

erledigt Verfügbar ab Version 0.5.10

6

Erstellen einer Webseite, wo alle Änderungen und Neuerungen einer Version aufgelistet werden.

erledigt Siehe http://www.linux-tips-and-tricks.de/de/versionshistorie/

7

Benachrichtigung in eMail (sofern eine Adresse definiert wurde) über neue Versionen des Scripts

erledigt Verfügbar ab Version 0.5.11

8

Dokumentation aktuell halten (siehe auch #6)

ständig im Hinterkopf  

9

Sicherung von mehr als 2 Partitionen (beinhaltet NOOBs support für tar und rsync)

erledigt Verfügbar ab Version 0.6.1

10

Möglichkeit die Sprache der Meldungen festzulegen und es nicht automatisch die konfigurierte Systemsprache genommen wird

erledigt
Verfügbar ab Version 0.5.15.7
11 Sämtliche Fehler - auch die, die auftreten beim Prüfen der Eingangsparameter - sollen eine FehlereMail schreiben. Hintergund: Wenn mal das Backupdevice nicht existiert soll das auch gemeldet werden.    
12 Unterstützung von rsync Server wird nicht supported  

 

 

Bei mir liegen diverse ungenutzte 433 MHz Steckdosenschalter rum und was liegt da näher als die per Android App sowie per Programm mit einer Raspberry Pi zu steuern. Damit kann man dann diverse Dinge schalten wie Beleuchtungen, Kaffeemaschinen, PCs und was einem sonst noch so einfällt. Wenn man im Netz zu diesem Thema sucht wird man erschlagen mit Hits. Daraus dann die passende Lösung zu finden ist nicht leicht. Wichtig ist für mich eine Android App zu haben um die Schalter zu steuern sowie Programme auf der Pi starten und stoppen zu lassen. Ich habe mich deshalb entschieden pilight dazu zu benutzen. Die notwendige Hardware dazu ist wenig und schnell auf ein Breadboard zu stecken. Dieses habe ich dann noch mit einem Breakout Expansion Kit verbunden. Pilight bietet eine fertige Android App sowie ein fertiges Webfrontend zum Steuern und kann nach belieben Schalter diverser Hersteller einbinden sowie auch beliebig Programme auf der Pi starten und stoppen, die bestimmt Aufgaben erledigen. Beide sind sehr einfach aufgebaut aber sie erfüllen vollkommen ihren Dienst.

Der folgende Beitrag enthält Links zu Webseiten, die alle notwendigen Informationen zum Aufbau enthalten sowie Dinge, auf die man aufpassen muss sowie Links zu meinen server- und config json Dateien zum download.