ZFS:使不可用池中的磁碟聯機

ZFS:使不可用池中的磁碟聯機

我有一台使用 FreeBSD 和 ZFS 的家庭伺服器,在過去 5 年裡一直運作良好,並且我曾多次成功更換故障的磁碟。

然而,今天發生了一件小事,我希望能找到解決辦法。

我有一個由 3 個 vdev 組成的頂級池,每個 vdev 都是一個 raidz1 池,因此最多 3 個磁碟可能會發生故障(假設它們都屬於不同的 vdev),而且資料完整性完好無損。

昨天,我注意到 1 個 vdev 中的 1 個磁碟報告了相當多的錯誤。根據過去的經驗,這通常表明磁碟即將發生故障,因此我按照通常的做法進行操作:

  1. 離線磁碟:zpool離線坦克gpt/ta4
  2. 物理更換磁碟
  3. 用gpart設定新磁碟,然後zpool替換tank gpt/ta4

然而,這次在步驟 2 和 3 之間災難襲來:當我安裝新驅動器後打開伺服器電源時,我聞到了燒焦的味道,並且我的 HBA 表明:4的驅動器不可用!由於運氣令人難以置信,一定存在一些電壓浪湧,因為同一 vdev (gpt/ta2) 中的另一個驅動器現在完全失效,目視檢查顯示 PCB 上的一個 MOSFET 已燒斷。

所以現在 gpt/ta2 是 UNAVAIL,gpt/ta4 是 OFFLINE,所以顯然 vdev(即 raidz1)也是 UNAVAIL。

我的問題是: 1)有沒有辦法讓 gpt/ta4 重新上線?當我嘗試發出“zpool online Tank gpt/ta4”時,它告訴我該池不可用,所以我不能這樣做。我可以理解為什麼會這樣,但我認為 gpt/ta4 儘管遇到了一些讀取錯誤,但在使其脫機之前基本上仍然是 raidz1 池的“好”成員(zpool 狀態報告沒有已知數據錯誤)。有辦法實現這個目標嗎?

2) 如果做不到這一點,有沒有辦法至少使我的頂級池的其餘部分(由 3 個 raidz1 vdev 組成)在線?其他 2 個 vdev 完全沒問題。

請幫忙,我有很多寶貴的數據:-)

提前致謝。

答案1

並不是說它在這個時候對你有幫助,但這正是為什麼你永遠不會看到我建議人們使用 raidz1 - 對於鏡像集,如果他們使用巨大的磁碟,通常建議使用三鏡像。

/在極端情況下/不太可能/你可以採取的任何行動都會讓坦克重新上線。我必須從這個開始,以免提高你的希望。

1:確保磁碟安全 - 即使這意味著拔掉所有磁碟。

2:更新至 FreeBSD 的最新版本 - 您想要最新的 ZFS 位,您可以使用。

3:將原始 gpt/ta4(據說是“正常”,只是遇到讀取錯誤)放回系統或具有較新 ZFS 位的新系統(以及所有其他位,如果您已刪除它們),啟動並按順序運行,直到其中一個工作正常(預先警告- 這些並不安全,尤其是最後一個,因為在嘗試恢復系統時,他們可能會回滾並因此丟失最近寫入的數據):

  • zpool import -f 坦克
  • zpool import -ff 坦克
  • zpool import -fFX 坦克

如果這三者都失敗,那麼您就超出了「簡單」恢復的範圍。 Google搜尋「導入壞池」、「zdb」、「zpool import -F」、「zpool import -X」、「zpool import -T」(危險!)等,可能會為您提供一些額外的部落格和資訊其他人進行的恢復嘗試,但此時它已經處於非常危險且可能進一步損壞資料的地步,並且您正在快速進入付費恢復服務的領域(而不是來自傳統的資料恢復公司,他們對ZFS 的專業知識為零並且對你沒有任何用處)。

注意:更精確和「更安全」的方法是「zpool import -o readonly=on -f -T [txg_id] Tank」。然而,要使其工作,您需要自己使用 zdb,首先,找到看似健康的最近 txg_id,我不准備嘗試在這裡解釋所有這些。谷歌將成為你的朋友——在你閱讀了足夠的資訊並對你正在做的事情感到滿意之前,不要採取任何行動。不相信單一來源。

註 2:「最安全」的做法是立即聯繫能夠提供 ZFS 恢復服務的人員。

註 3:下一個「最安全」的做法是將磁碟機放入安全系統中,並將每個整個原始磁碟機新增至新磁碟,理論上,為您提供磁碟的相同副本,但這意味著您需要相同數量的新磁碟,最好與舊磁碟具有相似或相同的大小/類型,但並非絕對必要。然後才在一組驅動器上嘗試上述任何操作,同時將其他驅動器放在一邊以確保安全。

相關內容