Todas as cópias do blockchain são iguais? Se houver um erro no arquivo, poderei copiar esse arquivo de um backup e reindexar o chainstate?
Recentemente, movi os primeiros 2.000 arquivos do meu blockchain do SSD para um HDD. O HDD é montado /mnt/ext
.
Um link simbólico por arquivo é então colocado e blocks
aponta para os arquivos remotos. Portanto, minha pasta de blocos ainda está em SSD, mas os arquivos estão em HDD.
Tentei bitcoind -reindex-chainstate
ter certeza de que tudo ainda funciona, mas agora está dando um erro:
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
Agora tenho várias perguntas. Acho que nFile=0
significa que o bloco está em blk00000.dat
e rev00000.dat
. Estou certo?
Então, copiei este arquivo novamente de um backup do blockchain. Isso é de um segundo nó. Mas eu suspeito que os arquivos são os mesmos, certo?
Mas recebo exatamente o mesmo erro na mesma posição - mesmo com um novo -reindex-chainstate
.
Eu posso ver no log que todos os blocos até o número 254
são indexados, mas cada vez que falha no bloco com height 255
.
Acho que esses arquivos antigos contêm sempre os mesmos blocos. Como pode ser que 254 blocos estejam corretos, mas falha no próximo?
Seria simplesmente um problema da montaria?
EDIT: Atualmente estou -reindex
ing. Nesse caso, os arquivos que já vinculei de minha blocks
pasta são usados da seguinte maneira:
Reindexing block file blk00000.dat...
Loaded 119964 blocks from external file in 133291ms
Aparentemente, o primeiro arquivo contém 119.964 blocos. Então, quando eu tiver um erro, height=255
ele definitivamente deve estar no primeiro arquivo.
Respostas
Então, copiei este arquivo novamente de um backup do blockchain. Isso é de um segundo nó. Mas eu suspeito que os arquivos são os mesmos, certo?
Não. Os blocos são baixados fora da ordem, mas são gravados no disco na ordem em que são baixados. Portanto, o índice do bloco (que indica onde cada bloco está localizado) será diferente para cada nó porque cada nó provavelmente terá os blocos armazenados em uma ordem ligeiramente diferente.
Além disso, se o seu nó recebeu blocos obsoletos, esses blocos obsoletos também são armazenados no disco e têm uma entrada no índice do bloco. Nem todos os nós terão os mesmos blocos obsoletos e eles podem não ser armazenados na mesma ordem. Os nós recentemente sincronizados não terão blocos obsoletos de antes de serem sincronizados e, muitas vezes, os blocos obsoletos se tornam obsoletos devido a atrasos de propagação, portanto, um nó pode nem mesmo receber um bloco obsoleto para armazenar.
Você não pode simplesmente copiar arquivos de bloco individuais de um nó para outro. Você precisa copiar todo o blockchain e o índice do bloco. Caso contrário, você provavelmente corromperá tudo e precisará baixar novamente o blockchain.