Corrupción en el bloque de datos durante la sincronización

Mi servidor doméstico ha estado inactivo durante un par de días mientras realizo algunas actualizaciones.

Tenía a Geth ejecutándose en una de las ventanas de la terminal, pero lo apagué correctamente exitantes de desconectar el servidor.

Al intentar reiniciarlo, veo el siguiente error:

I0208 14:31:27.219469   26346 downloader.go:267] Synchronisation
failed: leveldb/table: corruption on data-block (pos=650747): checksum
mismatch, want=0x2dd4b443 got=0x9fb5cf2f [file=286265.ldb]

¿Cómo hago para investigar y solucionar este problema? ¿Hay alguna manera de eliminar la parte infractora de los datos y obligarlos a resincronizar esa parte en particular? Claramente no quiero tener que volver a sincronizar todo desde cero...

(Nota: he ejecutado fscken el disco (desmontado) sin encontrar ningún problema. Las actualizaciones no tocaron los discos. Todo se cerró correctamente).

Tenga en cuenta que si eliminar la carpeta chaindata no es suficiente, intente eliminar también la carpeta de nodos.

Respuestas (2)

Realmente no puedo decir qué podría haber salido mal, pero su base de datos está dañada en el nivel del motor de almacenamiento LevelDB. Algo parece haber modificado los archivos de datos planos que leveldb usa para almacenar sus cosas. Me temo que no hay mucho que puedas hacer para recuperarlos.

Debería poder sincronizar rápidamente con la red con bastante rapidez. Por lo general, me toma alrededor de media hora sincronizar desde cero. Solo comienza geth con --fast --cache=512.

Entonces, ¿eliminar literalmente todo y empezar de la nada? (He hecho una pregunta separada sobre cómo --fastfunciona).
Sólo elimine la chaindatacarpeta. El resto debe permanecer.

Nota: he ejecutado fsck en el disco (desmontado) sin encontrar ningún problema.

fsck es una buena herramienta para verificar problemas a nivel del sistema de archivos, pero no a nivel de hardware. Siempre comenzaba en el nivel de hardware y subía desde allí.

¿Ha comprobado recientemente el estado SMART de sus discos duros? http://www.howtogeek.com/134735/how-to-see-if-your-hard-drive-is-dying/

También revisaría tu memoria en busca de problemas. http://windows.microsoft.com/en-us/windows7/diagnosing-memory-problems-on-your-computer

(Hay diferentes formas de lograr lo mismo en Linux. smartctl, memtest86 y fsck).

Después de que haya determinado que no hay errores desde arriba, solo entonces tomaría el consejo de limpiar chaindatay volver a sincronizar usando--fast