Go-Ethereum
同步時數據塊損壞
在我進行一些升級時,我的家庭伺服器已經關閉了幾天。
我讓 Geth 在其中一個終端視窗中執行,但
exit
在使伺服器離線之前優雅地關閉了它。在嘗試重新啟動它時,我看到以下錯誤:
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]
我該如何著手調查和解決這個問題?有沒有辦法刪除數據的違規部分並強制它重新同步該特定部分?我顯然不想從頭開始重新同步所有內容……
(注意:我已經
fsck
在(解除安裝的)磁碟上執行,沒有發現任何問題。升級沒有觸及磁碟。一切都被優雅地關閉了。)
不能真正說出可能出了什麼問題,但是您的數據庫在 LevelDB 儲存引擎級別已損壞。似乎有些東西已經修改了 leveldb 用來儲存其內容的平面數據文件。恐怕您無法恢復它們。
您應該能夠相當快地快速同步回網路。我從頭開始同步通常需要大約半小時。剛開始 geth
--fast --cache=512
。
注意:我在(解除安裝的)磁碟上執行 fsck 沒有發現任何問題。
fsck 是檢查文件系統級別問題的好工具,但不是硬體級別的問題。我總是從硬體級別開始,然後從那裡向上移動。
您最近檢查過硬碟上的 SMART 狀態嗎?http://www.howtogeek.com/134735/how-to-see-if-your-hard-drive-is-dying/
我也會檢查你的記憶是否有問題。http://windows.microsoft.com/en-us/windows7/diagnosing-memory-problems-on-your-computer
(在 Linux 中有不同的方法可以完成同樣的事情。smartctl、memtest86 和 fsck。)
在您確定上面沒有錯誤之後,我才會接受清除
chaindata
和重新同步的建議--fast