Corrección del error rpc "Bloque no encontrado en el disco"

Tengo un nodo completo con txindex habilitado que he estado tratando de usar para un servidor electrum. Sin embargo, ya sea que use ElectrumX o Electrs, aparece el mismo error en la indexación inicial de "Bloque no encontrado en el disco". Investigando un poco, descubrí que este error proviene de la llamada getblock rpc, y el comentario en el código para cuando se produce este error es el siguiente:

Bloque no encontrado en el disco. Esto podría deberse a que tenemos el encabezado del bloque en nuestro índice pero no tenemos el bloque (por ejemplo, si un nodo que no está en la lista blanca nos envía una cadena larga no solicitada de bloques válidos, agregamos los encabezados a nuestro índice, pero no aceptar el bloqueo).

No estoy seguro de cómo llegué a este estado. Este es un nodo que inicialmente abrí hace varios años y reindexé para usar txindex a principios de este año, nunca tuve ningún problema con él para otros fines o cualquier problema de pérdida de datos/corrupción que pueda recordar. Si alguien tiene una teoría/explicación, me interesaría escucharla.

Mi pregunta es: ¿Puedo corregir este error sin empezar de cero? Me gustaría evitar incluso una reindexación si es posible, aunque ni siquiera estoy seguro de si eso lo arreglaría porque, según tengo entendido, la reindexación usa los bloques en el disco y aparentemente me falta un bloque en el disco. ¿Hay alguna manera de obtener solo el bloque o archivo(s) que necesito? Tengo un amigo con un nodo completo que me dejaría copiar archivos si fuera necesario.

Todavía no sé exactamente qué bloque falta, aunque probablemente podría averiguarlo investigando un poco más si fuera útil.

Respuestas (1)

Los bloques no se almacenan en archivos individuales, sino en paquetes planos de un tamaño fijo, por lo que no es posible reemplazar uno que falta. Si no se puede encontrar un bloque en el disco, se eliminó de forma manual o mediante un proceso erróneo, o el disco está gravemente dañado. Una nueva indexación solucionará esto, pero es un indicador de otros posibles problemas relacionados con el hardware que esto ha sucedido.

Muchas gracias. Entonces, supongo que aunque reindexdiga Rebuild chain state and block index from the blk*.dat files on disk, ¿obtendrá los bloques que faltan de los compañeros cuando los encuentre? ¿Es -loadblockpotencialmente útil aquí si puedo obtener un archivo blk00??.dat con el bloque faltante?
Esto es correcto.
Solo para hacer un seguimiento de esto, una reindexación funcionó y tomó menos tiempo de lo que esperaba. ¡Gracias!