Beschädigung des Datenblocks während der Synchronisierung

Mein Heimserver ist seit ein paar Tagen ausgefallen, während ich einige Upgrades durchführe.

Ich hatte Geth in einem der Terminalfenster laufen lassen, es aber ordnungsgemäß heruntergefahren, exitbevor ich den Server offline nahm.

Beim Versuch, es neu zu starten, sehe ich den folgenden Fehler:

I0208 14:31:27.219469   26346 downloader.go:267] Synchronisation
failed: leveldb/table: corruption on data-block (pos=650747): checksum
mismatch, want=0x2dd4b443 got=0x9fb5cf2f [file=286265.ldb]

Wie gehe ich vor, um dieses Problem zu untersuchen und zu beheben? Gibt es eine Möglichkeit, den problematischen Teil der Daten zu entfernen und eine erneute Synchronisierung dieses bestimmten Teils zu erzwingen? Ich möchte natürlich nicht alles von Grund auf neu synchronisieren müssen ...

(Hinweis: Ich habe fsckdie (nicht gemountete) Festplatte ausgeführt, ohne irgendwelche Probleme zu finden. Die Upgrades haben die Festplatten nicht berührt. Alles wurde ordnungsgemäß heruntergefahren.)

Beachten Sie, dass, wenn das Löschen des Chaindata-Ordners nicht ausreicht, Sie versuchen, auch den Knotenordner zu löschen.

Antworten (2)

Ich kann nicht wirklich sagen, was schief gelaufen sein könnte, aber Ihre Datenbank ist auf Ebene der LevelDB-Speicher-Engine beschädigt. Irgendetwas scheint die flachen Datendateien modifiziert zu haben, in denen leveldb seine Sachen speichert. Ich fürchte, Sie können nicht viel tun, um sie wiederherzustellen.

Sie sollten in der Lage sein, ziemlich schnell wieder mit dem Netzwerk zu synchronisieren. Normalerweise dauert es ungefähr eine halbe Stunde, bis ich von Grund auf neu synchronisiert habe. Starten Sie geth einfach mit --fast --cache=512.

Also buchstäblich alles entfernen und bei Null anfangen? (Ich habe eine separate Frage zur Funktionsweise gestellt --fast.)
Entfernen Sie nur den chaindataOrdner. Der Rest soll bleiben.

Hinweis: Ich habe fsck auf der (nicht gemounteten) Festplatte ausgeführt, ohne irgendwelche Probleme zu finden.

fsck ist ein gutes Werkzeug, um nach Problemen auf Dateisystemebene zu suchen, aber nicht auf Hardwareebene. Ich würde immer auf der Hardwareebene beginnen und von dort aus aufsteigen.

Haben Sie kürzlich den SMART-Status Ihrer Festplatten überprüft? http://www.howtogeek.com/134735/how-to-see-if-your-hard-drive-is-dying/

Ich würde auch Ihr Gedächtnis auf Probleme überprüfen. http://windows.microsoft.com/en-us/windows7/diagnosing-memory-problems-on-your-computer

(Es gibt verschiedene Möglichkeiten, dasselbe unter Linux zu erreichen. smartctl, memtest86 und fsck.)

Nachdem Sie oben keine Fehler festgestellt haben, würde ich erst dann den Ratschlag des chaindataLöschens und erneuten Synchronisierens verwenden--fast