今天我做了一件非常愚蠢的事情,試圖將第三個鏡像新增到名為 的現有 Linux zpool 中backup
。可以說我犯了幾個錯誤,因為除了每隔幾年交換一次磁碟之外,我並沒有對 ZFS 進行太多管理。在嘗試糾正它們時,我誤讀了重新建立池的線上建議,並創建了一個新的池,backup
從而破壞了現有池。 (是的,我-f
在它抱怨後使用了該選項。是的,我是個白痴。現在我知道再也不會這樣做了。讓我們繼續吧。)
根據我在網上閱讀的內容,backup
我「創建」的原始池可能無法恢復。這沒什麼問題,因為它的命名backup
是有原因的——它主要存放我 15 年前的備份。但是,有一些東西最好能恢復(一些非必要的資料我暫時移到那裡),還有一些與備份設定有關的東西需要我幾天的時間才能重新設定駐留在該磁碟區。 (現在我知道在其他地方備份這些東西,所以這將是一次學習經驗。)
但我有我的備份的備份 - 今天我正在更換第三個鏡像,以替換幾個月前在另一次系統升級(以及作業系統升級)期間刪除的驅動器。該驅動器實際上並沒有出現故障,但它很舊並且已經開始積累一些壞扇區,所以我想我最好把它拿出來,而不是等待它損壞或其他什麼。
不管怎樣,我仍然有那個舊驅動器,所以我想我可以將其放回我的系統並從那裡恢復池資料。我只會丟失過去幾個月的備份資料。現在,我從未正式匯出該磁碟機或其他任何東西上的池。我已經升級了作業系統,所以我沒想到它會自動偵測到該磁碟機。 (我不知道它是否插入同一個 SATA 端口,因為我已經移動了一些驅動器。)
但該zpool import
命令似乎沒有自動找到任何內容。使用一些選項,zpool import
可以看到(現已被破壞的)池的第二個版本backup
,但這只是我在其他兩個驅動器上意外創建的空池。
關於如何嘗試讀取第三個磁碟上的資料有什麼建議嗎?據我所知,在幾個月前我把它從箱子裡拿出來之前,它是 ZFS 池的一個完美且最新的鏡像。尤其:
- 事實上,有一個被破壞的池
backup
可能會幹擾檢測並嘗試恢復/導入這個舊池的能力嗎?有辦法解決這個問題嗎? - 我的伺服器上仍然安裝有舊作業系統,我相信該作業系統在我使用舊磁碟時正在運行。我嘗試啟動它只是為了看看它是否可以檢測到 ZFS 池,但它沒有。 (同樣,驅動器可能沒有插入到同一個位置。)但是是否有任何 ZFS 日誌檔案或其他我可以提取的內容,其中可能包含舊池的元資料或 ID 號碼或我可以提取的內容?匯入該磁碟機上完整的鏡像?
- 我只是假設前兩個磁碟上的池已通過命令銷毀
create -f
。但如果有人知道我如何能夠直接在那裡恢復第一個池,那顯然會很棒。 - ZFS 無法將舊的第三個鏡像偵測為 ZFS 池磁碟還有其他原因嗎?如果是的話,還有其他建議嗎?我可以嘗試其他恢復工具嗎?
感謝您的任何幫助或建議。
zdb -l /dev/sdb1
編輯:這是(這是第三個驅動器)的輸出
------------------------------------
LABEL 0
------------------------------------
version: 5000
name: 'backup'
state: 0
txg: 0
pool_guid: 3936176493905234028
errata: 0
hostid: 8323329
hostname: [omitted]
top_guid: 14695910886267065742
guid: 17986383713788026938
vdev_children: 1
vdev_tree:
type: 'mirror'
id: 0
guid: 14695910886267065742
whole_disk: 0
metaslab_array: 34
metaslab_shift: 33
ashift: 12
asize: 1000197324800
is_log: 0
create_txg: 4
children[0]:
type: 'disk'
id: 0
guid: 17914838236907067293
path: '/dev/sdd1'
whole_disk: 0
DTL: 143
create_txg: 4
children[1]:
type: 'disk'
id: 1
guid: 17986383713788026938
path: '/dev/sdb1'
whole_disk: 0
DTL: 141
children[2]:
type: 'disk'
id: 2
guid: 1683783279473519399
path: '/dev/sdc1'
whole_disk: 0
DTL: 145
create_txg: 4
features_for_read:
com.delphix:hole_birth
com.delphix:embedded_data
create_txg: 0
labels = 0 1 2 3
如果我的解釋正確,狀態 0 表示池應該完好無損。但是,當我嘗試使用池 GUID 進行導入時zpool import 3936176493905234028
,我收到“無法導入...沒有此類可用的池”錯誤。 (我假設我應該使用 pool_guid,但我也嘗試使用 guid 和 top_guid,但似乎沒有任何效果。)
EDIT2:我從該池處於活動狀態並嘗試過的原始作業系統中恢復了 zpool.cache 文件zpool import -c zpool.cache
,這給出了以下內容:
pool: backup
id: 3936176493905234028
state: UNAVAIL
status: One or more devices contains corrupted data.
action: The pool cannot be imported due to damaged devices or data.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
config:
backup UNAVAIL insufficient replicas
mirror-0 UNAVAIL insufficient replicas
sdd1 FAULTED corrupted data
sdc1 FAULTED corrupted data
這在某種程度上是可以預料的。這些是我的建立命令覆蓋池的兩個磁碟。然而,sdb1 並沒有被列為潛在的磁碟機——可能是因為我在取出磁碟後將其從池中刪除了。儘管如此,我認為我在 sdb1 上擁有完整的舊鏡像資料副本,zdb 也同意。為什麼不導入呢?