NEWS
iobroker auf beschädigter SD-Karte retten
-
Guten Morgen liebe Community,
seit über zwei Jahren betreibe ich jetzt iobroker auf einem RaspberryPi 4 und mittlerweile hat sich darauf eine überaus aufwändige Konfiguration angesammelt, die aus vielen kleinen Einzelteilen besteht (z. B. zig Adapter in alten Versionen erfordert, die nicht geupdated werden können und 200 SQL-geloggten Datenpunkten, die zwingend auf die einmal zugewiesene "id" in der Datenbank gebunden bleiben müssen) und auch aus einem System um iobroker herum (Software-Raid auf zwei USB-Sticks, mariadb usw...). Deshalb backuppe ich immer die komplette SD-Karte des Pi mit dd.
Leider funktioniert dd seit neustem nicht mehr, da es zu Lesefehlern kommt. Offenbar stirbt die SD-Karte langsam. Das System selbst läuft aber noch einwandfrei auf der Karte.
Also wollte ich die angeschlagene SD-Karte auf eine neue Karte umziehen. Ein image mit dd ging nicht ja nicht mehr, also habe ich ddrescue genommen. Der konnte alles auslesen bis auf 4 kB.
Wenn ich nun aber dieses Image auf eine (brand)neue Karte schreibe und davon boote, startet iobroker nicht mehr. Linux bootet, per SSH komme ich drauf. Ich bin dann auf Fehlersuche gestartet und habe folgenden Artikel entdeckt: https://www.iobroker.net/docu/index-26.htm?page_id=3928
Die Befehle führen aber zu einer Fehlermeldung:
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Dec 6 08:06:35 2022 from 192.168.192.172 pi@raspberrypi:~ $ ps -A | grep iobroker pi@raspberrypi:~ $ cd /opt/iobroker pi@raspberrypi:/opt/iobroker $ iobroker start pi@raspberrypi:/opt/iobroker $ ps -A | grep iobroker pi@raspberrypi:/opt/iobroker $ node node_modules/iobroker.js-controller/controller.js --logs 2022-12-06 08:20:55.657 - info: host.raspberrypi iobroker.js-controller version 3.3.8 js-controller starting 2022-12-06 08:20:55.665 - info: host.raspberrypi Copyright (c) 2014-2021 bluefox, 2014 hobbyquaker 2022-12-06 08:20:55.666 - info: host.raspberrypi hostname: raspberrypi, node: v12.22.0 2022-12-06 08:20:55.667 - info: host.raspberrypi ip addresses: 192.168.192.121 fd00::7dfe:5217:2916:b83d fe80::356:1b25:1b6:a8a4 2022-12-06 08:20:55.716 - info: host.raspberrypi-Server Error inMem-objects listening on port 9001: Error: listen EADDRINUSE: address already in use 127.0.0.1:9001 2022-12-06 08:21:25.702 - error: host.raspberrypi No connection to databases possible, restart 2022-12-06 08:21:25.713 - info: host.raspberrypi iobroker _restart 2022-12-06 08:21:26.456 - info: host.raspberrypi iobroker Starting node restart.js
Deshalb läuft jetzt nochmal die alte SD-Karte, immer mit dem Risiko, dass es jeden Moment vorbei sein könnte.
Habt ihr noch eine Idee, wie ich mein altes System 1:1 umziehen kann? Das letzte saubere SD_Karten-Backup ist 6 Monate alt, seitdem habe ich natürlich einiges verändert, ich weiß aber nicht mehr, was genau.
Vielen Dank für eure Hilfe!
ceram
-
@ceram sagte in iobroker auf beschädigter SD-Karte retten:
Guten Morgen liebe Community,
seit über zwei Jahren betreibe ich jetzt iobroker auf einem RaspberryPi 4 und mittlerweile hat sich darauf eine überaus aufwändige Konfiguration angesammelt, die aus vielen kleinen Einzelteilen besteht (z. B. zig Adapter in alten Versionen erfordert, die nicht geupdated werden können und 200 SQL-geloggten Datenpunkten, die zwingend auf die einmal zugewiesene "id" in der Datenbank gebunden bleiben müssen) und auch aus einem System um iobroker herum (Software-Raid auf zwei USB-Sticks, mariadb usw...). Deshalb backuppe ich immer die komplette SD-Karte des Pi mit dd.
Leider funktioniert dd seit neustem nicht mehr, da es zu Lesefehlern kommt. Offenbar stirbt die SD-Karte langsam. Das System selbst läuft aber noch einwandfrei auf der Karte.
Also wollte ich die angeschlagene SD-Karte auf eine neue Karte umziehen. Ein image mit dd ging nicht ja nicht mehr, also habe ich ddrescue genommen. Der konnte alles auslesen bis auf 4 kB.
Wenn ich nun aber dieses Image auf eine (brand)neue Karte schreibe und davon boote, startet iobroker nicht mehr. Linux bootet, per SSH komme ich drauf. Ich bin dann auf Fehlersuche gestartet und habe folgenden Artikel entdeckt: https://www.iobroker.net/docu/index-26.htm?page_id=3928
Die Befehle führen aber zu einer Fehlermeldung:
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Dec 6 08:06:35 2022 from 192.168.192.172 pi@raspberrypi:~ $ ps -A | grep iobroker pi@raspberrypi:~ $ cd /opt/iobroker pi@raspberrypi:/opt/iobroker $ iobroker start pi@raspberrypi:/opt/iobroker $ ps -A | grep iobroker pi@raspberrypi:/opt/iobroker $ node node_modules/iobroker.js-controller/controller.js --logs 2022-12-06 08:20:55.657 - info: host.raspberrypi iobroker.js-controller version 3.3.8 js-controller starting 2022-12-06 08:20:55.665 - info: host.raspberrypi Copyright (c) 2014-2021 bluefox, 2014 hobbyquaker 2022-12-06 08:20:55.666 - info: host.raspberrypi hostname: raspberrypi, node: v12.22.0 2022-12-06 08:20:55.667 - info: host.raspberrypi ip addresses: 192.168.192.121 fd00::7dfe:5217:2916:b83d fe80::356:1b25:1b6:a8a4 2022-12-06 08:20:55.716 - info: host.raspberrypi-Server Error inMem-objects listening on port 9001: Error: listen EADDRINUSE: address already in use 127.0.0.1:9001 2022-12-06 08:21:25.702 - error: host.raspberrypi No connection to databases possible, restart 2022-12-06 08:21:25.713 - info: host.raspberrypi iobroker _restart 2022-12-06 08:21:26.456 - info: host.raspberrypi iobroker Starting node restart.js
Deshalb läuft jetzt nochmal die alte SD-Karte, immer mit dem Risiko, dass es jeden Moment vorbei sein könnte.
Habt ihr noch eine Idee, wie ich mein altes System 1:1 umziehen kann? Das letzte saubere SD_Karten-Backup ist 6 Monate alt, seitdem habe ich natürlich einiges verändert, ich weiß aber nicht mehr, was genau.
Vielen Dank für eure Hilfe!
ceram
Das ganze geht meiner Meinung nach in 6 Schritten, sofern der ioBroker noch sauber läuft:
Schritt 1: Externes Laufwerk für Backup bereitstellen (USB Stick, Netzwerkpfad, was auchimmersonst)
Schritt 2: per Backitup Backup erzeugen.
Schritt 3: wenn Möglich, per cp das Verzeichnis /opt/iobroker von der SSD auf das Backup-Laufwerk kopieren. Dabei alle Dateien nachhalten die wegen IO Problemen nicht kopiert werden konnten.
Schritt 4: Linux auf neuer SD Karte neu aufsetzen.
Schritt 5: ioBroker installieren
Schritt 6: Backup wiederherstellen (Alternativ dazu die Schritte 5.1, 5.2 und 5.3 versuchen: NodeJS Installieren, das Verzeichnis /opt/iobroker aus der Sicherung kopieren, auf der Konsole im Verzeichnis /opt/iobroker den Befehlnpm rebuild
absetzen, iobroker starten und hoffen das er läuft)So wie ich das sehe ist jede Option die Über ein Komplett-Image läuft zum Scheitern verurteilt.
A.
Nachtrag: Das Softraid über USB Sticks, Mariadb und so weiter musst du natürlich auch neu aufsetzen, die Datenbank selber sollte im ioBroker Backup vorhanden sein. Beim Installieren der Adapter solltest Du in der Lage sein dedizierte Versionen zu installieren, sofern du aus "offiziellen" Quellen und nicht von GitHub installiert hast.
A.
-
@ceram sagte in iobroker auf beschädigter SD-Karte retten:
startet iobroker nicht mehr
@ceram sagte in iobroker auf beschädigter SD-Karte retten:
address already in use 127.0.0.1:9001
zeig mal die Ausgabe von
sudo netstat -ltp
-
Vielen Dank für eure Hilfe, zum Glück @Asgothian musste ich deine Schritte nicht durchlaufen, das hätte tagelange Arbeit bedeutet. Ich hab es jetzt anders geschafft.
Der Trick war offenbar, die SD-Karte auf einem Rechner außerhalb des RaspberryPi mit ddrescue zu retten. Eher Zufall dürfte sein, dass ich dabei 2kB mehr retten konnte und deshalb insgesamt nur 2kB beschädigt blieben. Aber ich schätze, dass das System nicht live war während der Rettung, hat den eigentlichen Unterschied gemacht. Das auf diese Weise erzeugte Image war auf einer neuen SD-Karte sofort nutzbar, der Pi und iobroker laufen einwandfrei. Ich werde wohl nie erfahren, welche 2kB da jetzt beschädigt sind, aber offenbar ist es nichts Laufzeitkritisches.
Lesson Learned: In Zukunft tausche ich präventiv alle zwei Jahre die SD-Karte. Den Spaß will ich nicht noch einmal haben
Viele Grüße
ceram
-
Oder man stellt auf eine ssd um