Bitcoind
修復“在磁碟上找不到塊”rpc 錯誤
我有一個啟用了 txindex 的完整節點,我一直在嘗試將其用於電子伺服器。但是,無論我使用 ElectrumX 還是 Electrs,我在“磁碟上找不到塊”的初始索引時都遇到了同樣的錯誤。經過一番探勘,我發現這個錯誤來自 getblock rpc 呼叫,程式碼中關於何時拋出此錯誤的註釋如下:
在磁碟上找不到塊。這可能是因為我們的索引中有塊頭但沒有塊(例如,如果一個非白名單節點向我們發送了一個未經請求的有效塊的長鏈,我們將頭添加到我們的索引中,但不要接受塊)。
我不知道我是怎麼到這個狀態的。這是我幾年前最初創建的一個節點,並在今年早些時候重新編制索引以使用 txindex,我從來沒有遇到過任何用於其他目的的問題或任何我記得的數據失去/損壞問題。如果有人有理論/解釋,我很想听聽。
我的問題是:我可以在不從頭開始的情況下修復此錯誤嗎?如果可能的話,我什至想避免重新索引,儘管我什至不確定這是否會解決它,因為據我所知,它重新索引使用磁碟上的塊,顯然我錯過了磁碟上的一個塊。有沒有辦法只獲取我需要的塊或文件?我有一個擁有完整節點的朋友,如果需要,他會讓我複製文件。
我還不確切知道缺少哪個塊,儘管如果有幫助的話,我可能會通過更多的探勘來弄清楚這一點。
塊不儲存在單個文件中,而是固定大小的扁平包,因此實際上不可能替換失去的包。如果在磁碟上找不到一個塊,它要麼手動刪除,要麼被錯誤的程序刪除,或者磁碟嚴重損壞。重新索引將解決此問題,但它表明與硬體相關的其他可能問題已發生。