Chaque copie de la blockchain est-elle la même? Si j'ai une erreur dans le fichier, dois-je pouvoir copier ce fichier à partir d'une sauvegarde et réindexer l'état de la chaîne?

Nov 26 2020

J'ai récemment déplacé les 2000 premiers fichiers de ma blockchain du SSD vers un disque dur. Le disque dur est installé /mnt/ext.

Un lien symbolique par fichier est ensuite inséré dans blockslequel pointe vers les fichiers distants. Mon dossier de blocs est donc toujours sur SSD, mais les fichiers sont sur disque dur.

J'ai essayé bitcoind -reindex-chainstatede m'assurer que tout fonctionne toujours mais maintenant cela donne une erreur:

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

Maintenant, j'ai plusieurs questions. Je pense nFile=0que cela signifie que le bloc est dans blk00000.datet rev00000.dat. Ai-je raison?

J'ai donc copié à nouveau ce fichier à partir d'une sauvegarde de la blockchain. Ceci provient d'un deuxième nœud. Mais je soupçonne que les fichiers sont les mêmes, non?

Mais j'obtiens exactement la même erreur à la même position - même avec un nouveau -reindex-chainstate.

Je peux voir dans le journal que tous les blocs jusqu'à ce que le nombre 254soit indexé, mais chaque fois qu'il échoue sur le bloc avec height 255.

Je pense que ces anciens fichiers contiennent toujours les mêmes blocs. Comment peut-il être 254 blocs sont corrects mais il échoue sur le suivant?

Serait-ce simplement un problème de montage?


EDIT: Je suis actuellement -reindexing. Dans ce cas, les fichiers que j'ai déjà liés à partir de mon blocksdossier sont utilisés comme ceci:

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

Apparemment, le premier fichier contient 119 964 blocs. Donc, quand j'ai une erreur avec height=255elle devrait certainement être dans le premier fichier.

Réponses

3 AndrewChow Nov 27 2020 at 00:34

J'ai donc copié à nouveau ce fichier à partir d'une sauvegarde de la blockchain. Ceci provient d'un deuxième nœud. Mais je soupçonne que les fichiers sont les mêmes, non?

Les blocs sont téléchargés dans le désordre, mais sont écrits sur le disque dans l'ordre dans lequel ils sont téléchargés. Ainsi, l'index de bloc (qui indique où se trouve chaque bloc) sera différent pour chaque nœud car chaque nœud aura probablement les blocs stockés dans un ordre légèrement différent.

De plus, si votre nœud a reçu des blocs périmés, ces blocs périmés sont également stockés sur le disque et ont une entrée dans l'index de bloc. Tous les nœuds n'auront pas les mêmes blocs périmés et ils peuvent ne pas être stockés dans le même ordre. Les nœuds nouvellement synchronisés n'auront pas de blocs périmés avant leur synchronisation, et souvent les blocs périmés deviennent périmés en raison de délais de propagation, de sorte qu'un nœud peut même ne pas recevoir un bloc périmé à stocker.

Vous ne pouvez pas simplement copier des fichiers de bloc individuels d'un nœud à un autre. Vous devez copier l'intégralité de la blockchain et l'index de bloc. Sinon, vous corromprez probablement le tout et devrez retélécharger la blockchain.