Lvm

LVM 類型 raid1 和 Thinpool 可能嗎?

  • December 7, 2020

我們正在將安裝從頂部帶有 LVM 的 mdadm raid 移動到純 LVM,因此我們會將原始 raid 分區作為獨立分區添加到 LVM 組中 類似:

lvcreate -L 240G -n thin pve /dev/nvme0n1p2
 Logical volume "thin" created.

然後我們在另一個磁碟/分區上添加一個鏡像

lvconvert –type raid1 –mirrors 1 pve/thing /dev/nvme1n1p2
 Logical volume pve/thin successfully converted.

當我們為 LXC 使用精簡池儲存系統時,我們假設我們可以將其轉換為精簡池 lvconvert –type thin-pool pve/thin 將 pve/thin 轉換為精簡池。

一切似乎都有效,但問題是我們不確定最後一次轉換是否會影響前一次。原因是當我們使用 lvs 列出時,我們得到:

thin           pve  twi-a-tz--  240,00g                 0,00   10,42

屬性 1 a 7 顯示這是一個精簡池,但沒有提及 raid1 或同步中的值。

雖然 lvs -a -o +devices 確實顯示它被鏡像到兩個分區:

[thin_tdata]              pve  rwi-aor---  240,00g                                        24,17            thin_tdata_rimage_0(0),thin_tdata_rimage_1(0)
 [thin_tdata_rimage_0]     pve  iwi-aor---  240,00g                                                         /dev/nvme0n1p2(67074)                  
 [thin_tdata_rimage_1]     pve  Iwi-aor---  240,00g                                                         /dev/nvme1n1p2(67075)                  
 [thin_tdata_rmeta_0]      pve  ewi-aor---    4,00m                                                         /dev/nvme0n1p2(128514)                 
 [thin_tdata_rmeta_1]      pve  ewi-aor---    4,00m                                                         /dev/nvme1n1p2(67074)                  
 [thin_tmeta]              pve  ewi-ao----  120,00m                                                         /dev/sdd2(0)                 

所以現在的疑問是,如果在thinpool 的“後面”,raid 是否仍在工作,或者只是已經分配但現在沒有被使用。創建精簡池並將其轉換為 –raid1 類型會返回錯誤。

我們還沒有找到任何關於這種情況的文件,如果這是有效的,我們完全不知道如何監控 lvm-raid 狀態,因為我們計劃通過返回“r”類型的 lvs 來監控驅動器狀態。

是的,可以有一個帶有 RAID 1 的精簡池,並且您的設置幾乎是正確的。問題在於元數據不是 RAID 1 而是線性的,因此在失去一個驅動器後,您的精簡池將被破壞。您需要為元數據創建一個單獨的 RAID 1 LV,然後--poolmetadata <vg>/<metadata lv>在將 RAID LV 轉換為精簡池時使用lvconvert.

有關更多詳細資訊,請參見lvmthin 手冊頁部分Tolerate device failures using raid

手冊頁中的範例:

  # lvcreate --type raid1 -m 1 -n pool0 -L 10G vg /dev/sdA /dev/sdB
  # lvcreate --type raid1 -m 1 -n pool0meta -L 1G vg /dev/sdC /dev/sdD
  # lvconvert --type thin-pool --poolmetadata vg/pool0meta vg/pool0

lvs -a使用此設置的輸出:

$ sudo lvs raid_test -a
 LV                     VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 [lvol0_pmspare]        raid_test ewi-------  12,00m                                                    
 pool0                  raid_test twi-a-tz-- 100,00m             0,00   10,29                           
 [pool0_tdata]          raid_test rwi-aor--- 100,00m                                    100,00          
 [pool0_tdata_rimage_0] raid_test iwi-aor--- 100,00m                                                    
 [pool0_tdata_rimage_1] raid_test iwi-aor--- 100,00m                                                    
 [pool0_tdata_rmeta_0]  raid_test ewi-aor---   4,00m                                                    
 [pool0_tdata_rmeta_1]  raid_test ewi-aor---   4,00m                                                    
 [pool0_tmeta]          raid_test ewi-aor---  12,00m                                    100,00          
 [pool0_tmeta_rimage_0] raid_test iwi-aor---  12,00m                                                    
 [pool0_tmeta_rimage_1] raid_test iwi-aor---  12,00m                                                    
 [pool0_tmeta_rmeta_0]  raid_test ewi-aor---   4,00m                                                    
 [pool0_tmeta_rmeta_1]  raid_test ewi-aor---   4,00m

屬性輸出的問題lvs是,只有第一位用於指定 LV 的類型,並且看起來兩者都有(r)aid(t)hin pool精簡池獲勝,你只能到達t那裡。

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