Ist jede Kopie der Blockchain gleich? Wenn ich einen Fehler in der Datei habe, sollte ich diese Datei aus einem Backup kopieren und den Kettenstatus neu indizieren können?

Nov 26 2020

Ich habe kürzlich die ersten 2000 Dateien meiner Blockchain von der SSD auf eine Festplatte verschoben. Die Festplatte wird eingebaut /mnt/ext.

Anschließend wird ein Symlink pro Datei eingefügt blocks, der auf die Remote-Dateien verweist. Mein Blockordner befindet sich also immer noch auf der SSD, aber die Dateien befinden sich auf der Festplatte.

Ich habe versucht bitcoind -reindex-chainstate, um sicherzugehen, dass alles noch funktioniert, aber jetzt gibt es einen Fehler:

2020-11-26T12:52:24Z ERROR: ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for CBlockIndex(pprev=0x44288c0, nHeight=255, merkle=4309bfeed77a70f309da08bcf8948906b9cc26120c0b0ef86e0ac67284bbd79e, hashBlock=00000000d0a75c861fabf9ff7b92022f60e4afeed9331fe5aa073d8e4706fe3c) at FlatFilePos(nFile=0, nPos=58808)
2020-11-26T12:52:24Z *** Failed to read block

Jetzt habe ich mehrere Fragen. Ich denke nFile=0bedeutet, dass der Block in blk00000.datund ist rev00000.dat. Habe ich recht?

Also habe ich diese Datei erneut aus einer Sicherung der Blockchain kopiert. Dies ist von einem zweiten Knoten. Aber ich würde vermuten, dass die Dateien gleich sind, oder?

Aber ich bekomme genau den gleichen Fehler an der gleichen Position - auch bei einem neuen -reindex-chainstate.

Ich kann im Protokoll sehen, dass alle Blöcke bis zur Nummer 254indiziert werden, aber jedes Mal, wenn es beim Blockieren mit fehlschlägt height 255.

Ich denke, diese alten Dateien enthalten immer die gleichen Blöcke. Wie kann es sein, dass 254 Blöcke korrekt sind, aber beim nächsten fehlschlagen?

Könnte dies einfach ein Problem der Montierung sein?


EDIT: Ich bin gerade -reindexing. In diesem Fall werden die Dateien, auf die ich bereits aus meinem blocksOrdner verlinkt habe , folgendermaßen verwendet:

Reindexing block file blk00000.dat...
Loaded 119964 blocks from external file in 133291ms

Anscheinend enthält die erste Datei 119.964 Blöcke. Also, wenn ich einen Fehler height=255habe, sollte es definitiv in der ersten Datei sein.

Antworten

3 AndrewChow Nov 27 2020 at 00:34

Also habe ich diese Datei erneut aus einer Sicherung der Blockchain kopiert. Dies ist von einem zweiten Knoten. Aber ich würde vermuten, dass die Dateien gleich sind, oder?

Nein. Blöcke werden nicht in der richtigen Reihenfolge heruntergeladen, sondern in der Reihenfolge, in der sie heruntergeladen wurden, auf die Festplatte geschrieben. Der Blockindex (der angibt, wo sich jeder Block befindet) ist also für jeden Knoten unterschiedlich, da bei jedem Knoten die Blöcke wahrscheinlich in einer etwas anderen Reihenfolge gespeichert werden.

Wenn Ihr Knoten veraltete Blöcke empfangen hat, werden diese veralteten Blöcke auch auf der Festplatte gespeichert und haben einen Eintrag im Blockindex. Nicht alle Knoten haben dieselben veralteten Blöcke und werden möglicherweise nicht in derselben Reihenfolge gespeichert. Neu synchronisierte Knoten haben keine veralteten Blöcke aus der Zeit vor ihrer Synchronisierung, und häufig werden veraltete Blöcke aufgrund von Ausbreitungsverzögerungen veraltet, sodass ein Knoten möglicherweise nicht einmal einen veralteten Block zum Speichern erhält.

Sie können nicht einfach einzelne Blockdateien von einem Knoten auf einen anderen kopieren. Sie müssen die gesamte Blockchain und den Blockindex kopieren. Andernfalls werden Sie wahrscheinlich das Ganze beschädigen und müssen die Blockchain erneut herunterladen.