建立 ZFS 池後恢復它

建立 ZFS 池後恢復它

我重新安裝了 Ubuntu 14.04 系統並嘗試掛載現有的 zfs 磁碟機。它是一個包含所有資料的單一驅動器。作業系統位於不同的磁碟機上,zfs 磁碟機僅儲存資料。

池名稱為crystal.

在我的匆忙中(是的。)我做到了zpool create crystal /dev/disk-by-id/...etc...

泳池現在已經空了。

有什麼方法可以恢復原始池和/或檢索資料嗎?

答案1

很遺憾:不,不是真的。

有點不直觀的是,ZFS 中主要有兩種破壞性操作:zfs destroyzpool create。具體來說,命令zpool destroy 不是具有破壞性,事實上,如果你很快意識到自己的錯誤,就很容易逆轉;它只是設置一個標誌,在這種情況下zpool import -D是你的朋友。

這些命令具有破壞性,原因類似但略有不同:

  • zfs destroy具有破壞性,因為它刪除了對正在被破壞的資料集的引用,因此無法使用任何標準工具在磁碟上找到它。 (但另請參閱這個問題.)
  • zpool create具有破壞性,因為它會覆蓋池中的所有超級區塊,這意味著 ZFS 程式碼無法找到磁碟上 Merkle 樹資料結構的開頭。一旦找不到樹的根,其餘資料就無法存取。

ZFS 複雜的磁碟格式加劇了這兩種情況,這進一步使任何復原嘗試變得複雜。對於大多數其他檔案系統,檔案將一般來說是連續的,或者是在少數不同的位置。使用 ZFS,資料完全有可能分佈在整個磁碟上,在執行上述任一命令後不會留下任何內容來指示哪些部分屬於何處。更糟糕的是,您肯定正在尋找壓縮的資料塊,並且可能還尋找諸如重複資料刪除之類的東西。 (重複資料刪除在您的場景中不太可能,但在一般情況下肯定是可能的。)

可能可以聘請一些 ZFS 專家來恢復您的數據,但普通的數據恢復服務不太可能在這一點上為您提供幫助,並且常用的文件系統恢復軟體甚至不了解 ZFS。假設你能找到願意與你合作的人,它也會非常昂貴的;我看到有提到價格開始對於類似的情況,在五位數美元範圍內。

此時您最好的選擇可能是恢復最近的資料備份並繼續生活。

老實說,我有點困惑為什麼您能夠使用類似於您的問題中所述的命令來覆蓋池。在我的系統上,使用 ZFS On Linux 0.6.4,構建了類似的場景,zpool拒絕create操作並顯示“無效的 vdev 規範”錯誤,指出支援設備is part of exported pool '...'.您應該遇到類似的錯誤,除非您明確傳遞-f給 zpool 來強制操作,在這種情況下您告訴 ZFS 是的,您實際上真的真的去做這個。哪個尤其在 ZFS 的情況下通常是不是你想做什麼。

相關內容