Go-Ethereum

同步時數據塊損壞

  • June 18, 2017

在我進行一些升級時,我的家庭伺服器已經關閉了幾天。

我讓 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

引用自:https://ethereum.stackexchange.com/questions/1159