Behebung des RPC-Fehlers „Block nicht auf Festplatte gefunden“.

Ich habe einen vollständigen Knoten mit aktiviertem txindex, den ich für einen Elektron-Server verwenden möchte. Unabhängig davon, ob ich ElectrumX oder Electrs verwende, stoße ich bei der anfänglichen Indizierung auf denselben Fehler: „Block not found on disk“. Mit ein wenig Graben fand ich heraus, dass dieser Fehler vom getblock rpc-Aufruf stammt, und der Kommentar im Code, wann dieser Fehler ausgelöst wird, lautet wie folgt:

Block auf der Festplatte nicht gefunden. Dies könnte daran liegen, dass wir den Block-Header in unserem Index haben, aber nicht den Block (wenn uns beispielsweise ein Node, der nicht auf der Whitelist steht, eine unaufgefordert lange Kette gültiger Blöcke sendet, fügen wir die Header unserem Index hinzu, tun dies aber nicht akzeptiere die Sperre).

Ich bin mir nicht sicher, wie ich in diesen Zustand gekommen bin. Dies ist ein Knoten, den ich vor einigen Jahren ursprünglich hochgefahren und Anfang dieses Jahres neu indiziert habe, um txindex zu verwenden. Ich hatte nie Probleme damit für andere Zwecke oder Datenverlust-/Beschädigungsprobleme, an die ich mich erinnern kann. Wenn jemand eine Theorie/Erklärung hat, wäre ich daran interessiert, sie zu hören.

Meine Frage ist: Kann ich diesen Fehler beheben, ohne von vorne zu beginnen? Ich möchte nach Möglichkeit sogar eine Neuindizierung vermeiden, obwohl ich nicht einmal sicher bin, ob dies das Problem beheben würde, da die Neuindizierung meines Wissens nach die Blöcke auf der Festplatte verwendet und anscheinend ein Block auf der Festplatte fehlt. Gibt es eine Möglichkeit, nur die Blöcke oder Dateien zu erhalten, die ich benötige? Ich habe einen Freund mit einem Full Node, der mich bei Bedarf Dateien kopieren lässt.

Ich weiß noch nicht genau, welcher Block fehlt, obwohl ich das wahrscheinlich mit etwas mehr Graben herausfinden könnte, wenn es hilfreich wäre.

Antworten (1)

Blöcke werden nicht in einzelnen Dateien gespeichert, sondern in flachen Bündeln fester Größe, sodass das Ersetzen eines fehlenden nicht wirklich möglich ist. Wenn ein Block auf der Festplatte nicht gefunden werden kann, wurde er entweder manuell oder durch einen fehlerhaften Prozess gelöscht, oder die Festplatte ist ernsthaft beschädigt. Eine Neuindizierung wird dies beheben, aber es ist ein Indikator für andere mögliche Probleme im Zusammenhang mit der Hardware, dass dies passiert ist.

Vielen Dank. Also nehme ich an, dass es, obwohl reindexes sagt Rebuild chain state and block index from the blk*.dat files on disk, die fehlenden Blöcke von Peers holt, wenn es darauf stößt? Ist -loadblockes hier möglicherweise von Nutzen, wenn ich eine blk00??.dat-Datei mit dem fehlenden Block erhalten kann?
Das ist richtig.
Um dem nachzugehen, eine Neuindizierung hat funktioniert und weniger Zeit in Anspruch genommen als ich erwartet hatte. Danke schön!