¿Todas las copias de blockchain son iguales? Si tengo un error dentro del archivo, ¿debería poder copiar este archivo desde una copia de seguridad y volver a indexar el estado de la cadena?
Recientemente moví los primeros 2000 archivos de mi blockchain desde el SSD a un HDD. El disco duro se monta en /mnt/ext
.
Luego se coloca un enlace simbólico por archivo blocks
que apunta a los archivos remotos. Entonces, mi carpeta de bloques todavía está en SSD, pero los archivos están en HDD.
Intenté bitcoind -reindex-chainstate
para asegurarme de que todo todavía funciona, pero ahora está dando un error:
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
Ahora tengo varias preguntas. Creo que nFile=0
significa que el bloque está en blk00000.dat
y rev00000.dat
. Estoy en lo cierto?
Entonces copié este archivo nuevamente desde una copia de seguridad de la cadena de bloques. Esto es de un segundo nodo. Pero sospecho que los archivos son iguales, ¿verdad?
Pero obtengo exactamente el mismo error en la misma posición, incluso con un nuevo -reindex-chainstate
.
Puedo ver en el registro que todos los bloques hasta que el número 254
se indexa, pero cada vez que falla en el bloque con height 255
.
Creo que esos archivos antiguos contienen siempre los mismos bloques. ¿Cómo puede ser que 254 bloques sean correctos pero falla en el siguiente?
¿Podría ser esto simplemente un problema de la montura?
EDITAR: Actualmente estoy -reindex
ing. En este caso, los archivos a los que ya he vinculado desde mi blocks
carpeta se usan así:
Reindexing block file blk00000.dat...
Loaded 119964 blocks from external file in 133291ms
Aparentemente, el primer archivo contiene 119,964 bloques. Entonces, cuando tenga un error height=255
, definitivamente debería estar en el primer archivo.
Respuestas
Entonces copié este archivo nuevamente desde una copia de seguridad de la cadena de bloques. Esto es de un segundo nodo. Pero sospecho que los archivos son iguales, ¿verdad?
No. Los bloques se descargan desordenados, pero se escriben en el disco en el orden en que se descargan. Entonces, el índice de bloque (que indica dónde se encuentra cada bloque) será diferente para cada nodo porque es probable que cada nodo tenga los bloques almacenados en un orden ligeramente diferente.
Además, si su nodo ha recibido bloques obsoletos, esos bloques obsoletos también se almacenan en el disco y tienen una entrada en el índice de bloque. No todos los nodos tendrán los mismos bloques obsoletos y es posible que no se almacenen en el mismo orden. Los nodos recién sincronizados no tendrán bloques obsoletos de antes de sincronizarse y, a menudo, los bloques obsoletos se vuelven obsoletos debido a retrasos en la propagación, por lo que es posible que un nodo ni siquiera reciba un bloque obsoleto para almacenar.
No puede simplemente copiar archivos de bloques individuales de un nodo a otro. Necesita copiar toda la cadena de bloques y el índice de bloque. De lo contrario, probablemente dañará todo y necesitará volver a descargar la cadena de bloques.