Zfs

zpool 導出到底是做什麼的?

  • December 16, 2020

在閱讀了關於zpool exportin的部分後man zpool,我有點擔心:

從系統中導出給定的池。所有設備都標記為已導出,但仍被其他子系統視為正在使用。只要存在足夠數量的設備,設備就可以在系統之間移動(甚至是不同字節序的系統)並導入。

“但仍被其他子系統考慮使用”是什麼意思?“只要存在足夠數量的設備”是什麼意思?

背景:

我有一個相當複雜的備份腳本,它基於 ZFS 快照將生產伺服器上的 VM 儲存複製到備用伺服器(準確地說,它是主機和 VM 上的各種腳本的系統,它們一起工作以凍結文件VM 中的系統,獲取 ZFS 快照,解凍 VM 中的文件系統,並將快照複製到備用伺服器)。這部分工作就像一個魅力。

但實際上,除了複製之外,我還需要一種備份。也就是說,我想將虛擬機儲存備份到一個磁碟上,然後我可以從它所連接的盒子中取出該磁碟,並將其安全地儲存在另一個位置。

我已經徹底考慮了最好的方法,並得出了以下想法:

  • 在備用伺服器中,安裝一個 SATA / SAS HDD 托盤,以便我可以在那裡插入和拔出 HDD(或使用連接到其背板的現有托盤之一)。
  • 在備用伺服器上,插入一個新的 HDD 並製作一個新的 ZPOOL,其中僅包含一個僅包含該 HDD 的 VDEV。
  • 除了它已經復製到的 ZPOOL之外,讓生產伺服器將其 VM 儲存複製到新的 ZPOOL。
  • 複製完成後,導出新的 ZPOOL,拔下新的 HDD,並將其存放在安全的地方。**
  • 在備用伺服器上,插入第二個也代表 ZPOOL 的新 HDD,並重複前兩個步驟。****
  • 依此類推……(例如,每天將目前連接到備用伺服器的 HDD 更換為另一塊,或使用 7 個 HDD 並每週輪換一次等)。

** 這是我不喜歡的步驟(在閱讀了上面引用的部分之後)。一方面,在導出 ZPOOL(它是唯一的設備)之後移除 HDD 應該沒有問題,因為文件系統在導出之前會被解除安裝(並因此被刷新)。另一方面,手冊說即使在導出池之後,該硬碟仍將“被其他子系統考慮使用”,這讓我相信在這種情況下簡單地刪除它是一個壞主意。

因此,我想知道這句話的確切含義,以及如何使其他子系統不再使用 HDD。

**** 我知道我必須為此付出一些努力。計劃是創建一個腳本以及一個適當的udev規則,讓備用伺服器在插入 HDD 時辨識並導入現有的 ZPOOL(HDD 將直接通過 SATA-3 或 SAS 12G 連接,而不是通過 USB)。但這不是這個問題的一部分。

總結一下:

zpool export在導出 ZPOOL 之後,我可以安全地物理移除作為 ZPOOL 中唯一設備的 HDD 之前,我需要執行哪些操作,或者換句話說,我需要執行哪些步驟?

我做了類似於你所描述的事情,我認為你在使用 zpool 導出時可能有點混淆。

zpool export 從系統中刪除整個池…快照和所有。這不是你想要的。

要按照您的要求進行操作,第一步是了解我們正在處理的 zpool 類型。特別是,您可能需要一個簡單的鏡像池。至少 3 個驅動器。

就我而言,我有一個帶有 3 個鏡像的 zpool。當我想將數據帶到異地進行安全保存時,我會“離線”我想要異地取出的驅動器,然後將其從陣列中移除。這看起來像:

     pool: pool_09
state: ONLINE
 scan: resilvered 1000G in 2h15m with 0 errors on Sun Nov 22 19:49:53 2020

config:

       NAME                         STATE     READ WRITE CKSUM
       pool_09                      ONLINE       0     0     0
         mirror-0                   ONLINE       0     0     0
           c0t5000C500B0BCFB13d0    ONLINE       0     0     0
           c0t5000C500B0889E5Bd0    ONLINE       0     0     0
           c0t5000C500B09F0C54d0    ONLINE       0     0     0
       logs
         mirror-1                   ONLINE       0     0     0
           c0t5F8DB4C095690612d0s3  ONLINE       0     0     0
           c0t5F8DB4C095691282d0s3  ONLINE       0     0     0


     # zpool offline  pool_09 c0t5000C500B0BCFB13d0

這將為池留下兩個鏡像驅動器,因此我仍然可以處理本地故障。對我來說,我不會將驅動器導入另一個系統,但我不明白為什麼你不能。我只是帶我去另一棟樓。

當我準備好重新同步鏡像時,我將移除的驅動器放回陣列並“聯機”它:

zpool online pool_09 c0t5000C500B0BCFB13d0

ZFS 將在您聯機後自動重新同步驅動器,然後您可以重複該過程。

我認為您不想使用一堆旋轉驅動器來執行此操作。我什至不確定這會奏效。我想如果你有 10x 鏡像集或其他東西的話。請記住,移除的驅動器離開陣列的時間越長,重新同步所需的時間就越長。

另一種選擇是創建另一個池,zfs 將所有數據發送到它,然後導出該池並將其帶到異地。我沒有這樣做,但它應該可以工作……雖然可能要慢很多。

.

引用自:https://unix.stackexchange.com/questions/624612