LVM类型raid1和thinpool可以吗?

LVM类型raid1和thinpool可以吗?

我们正在将安装从带有 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
  Converted pve/thin to thin pool.

一切似乎都有效,但问题是我们不确定最后一次转换是否会影响前一次转换。原因是当我们列出时lvs我们得到:

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

属性 1 和 7 显示这是一个 Thinpool,但没有提及 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)                 

因此,现在的疑问是,在精简池“后面”,raid 是否仍在工作,或者只是已分配但现在未使用。创建精简池并将其转换为--raid1类型会返回错误。

我们还没有找到任何有关此场景的文档,并且在这种情况有效的情况下,我们完全不知道如何监视 lvm-raid 状态,因为我们计划通过返回lvstype来监视驱动器状态r

答案1

是的,可以有一个带有 RAID 1 的精简池,并且您的设置几乎是正确的。问题在于元数据不是 RAID 1,而是线性的,因此在丢失一个驱动器后,您的精简池就会损坏。您需要为元数据创建一个单独的 RAID 1 LV,然后--poolmetadata <vg>/<metadata lv>在使用 将 RAID LV 转换为精简池时使用lvconvert

lvmthin 联机帮助页部分使用 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 的类型,看起来 LV(r)aid(t)hin pool精简池都获胜,而您只能到达t那里。

相关内容