zpool 導出到底是做什麼的?
在閱讀了關於
zpool export
in的部分後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 將所有數據發送到它,然後導出該池並將其帶到異地。我沒有這樣做,但它應該可以工作……雖然可能要慢很多。
.