Linux

LVM RAID 5 未產生預期的邏輯卷大小

  • May 30, 2017

我遇到了 LVM RAID 5 的問題,它不允許我創建一個使用 VG 中所有四個驅動器上的空間的 LV。特別令人討厭的是,兩年前我在同一個系統上使用相同型號的驅動器創建了相同的 VG/LV,我不記得有這個問題。

這是我嘗試創建 RAID 5 LV 之前 pvs 和 vgs 的輸出:

pvs的輸出:

PV         VG          Fmt  Attr PSize   PFree 
/dev/sda1  vg_sklad02  lvm2 a--    2.73t  2.73t
/dev/sdb1  vg_sklad01  lvm2 a--    2.73t     0 
/dev/sdc1  vg_sklad02  lvm2 a--    2.73t  2.73t
/dev/sdd1  vg_sklad01  lvm2 a--    2.73t     0 
/dev/sde1  vg_sklad01  lvm2 a--    2.73t     0 
/dev/sdf1  vg_sklad02  lvm2 a--    2.73t  2.73t
/dev/sdg1  vg_sklad02  lvm2 a--    2.73t  2.73t
/dev/sdh1  vg_sklad01  lvm2 a--    2.73t     0 
/dev/sdi2  vg_bootdisk lvm2 a--  118.75g 40.00m
/dev/sdj2  vg_bootdisk lvm2 a--  118.75g 40.00m

vgs的輸出:

VG          #PV #LV #SN Attr   VSize   VFree 
vg_bootdisk   2   2   0 wz--n- 237.50g 80.00m
vg_sklad01    4   1   0 wz--n-  10.92t     0 
vg_sklad02    4   0   0 wz--n-  10.92t 10.92t

我上次在同一系統上使用相同型號的驅動器創建 LV 的命令是:

lvcreate --type raid5 -L 8.18T -n lv_sklad01 vg_sklad01

當我發出相同的命令更改 VG 和 LV 目標名稱時,我得到:

lvcreate --type raid5 -L 8.18T -n lv_sklad02 vg_sklad02

Using default stripesize 64.00 KiB.
Rounding up size to full physical extent 8.18 TiB
Insufficient free space: 3216510 extents needed, but only 2861584 available

這沒有意義,因為我有四個容量為 2.73T 的驅動器。4 * 2.73 = 10.92。為奇偶校驗減去一個得到 8.19T,這是我在這個系統上擁有的原始 LV 的大小。敲打。我的。頭。反對。監視器。:?

抓住稻草,我也嘗試過:

[root@sklad ~]# lvcreate --type raid5 -l 100%VG -n lv_sklad02 vg_sklad02
 Using default stripesize 64.00 KiB.
 Logical volume "lv_sklad02" created.

這導致 LV 是我期望的大小的 2/3。lvs的輸出:

LV         VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lv_root    vg_bootdisk rwi-aor--- 102.70g                                    100.00          
lv_swap    vg_bootdisk rwi-aor---  16.00g                                  100.00          
lv_sklad01 vg_sklad01  rwi-aor---   8.19t                                    100.00          
lv_sklad02 vg_sklad02  rwi-a-r---   5.46t                                    0.18

發出上述 lvcreate 命令後,pvs、vgs 和 lvs 的輸出如下:

[root@sklad ~]# pvs
 PV         VG          Fmt  Attr PSize   PFree 
 /dev/sda1  vg_sklad02  lvm2 a--    2.73t     0 
 /dev/sdb1  vg_sklad01  lvm2 a--    2.73t     0 
 /dev/sdc1  vg_sklad02  lvm2 a--    2.73t     0 
 /dev/sdd1  vg_sklad01  lvm2 a--    2.73t     0 
 /dev/sde1  vg_sklad01  lvm2 a--    2.73t     0 
 /dev/sdf1  vg_sklad02  lvm2 a--    2.73t     0 
 /dev/sdg1  vg_sklad02  lvm2 a--    2.73t  2.73t
 /dev/sdh1  vg_sklad01  lvm2 a--    2.73t     0 
 /dev/sdi2  vg_bootdisk lvm2 a--  118.75g 40.00m
 /dev/sdj2  vg_bootdisk lvm2 a--  118.75g 40.00m

[root@sklad ~]# vgs
 VG          #PV #LV #SN Attr   VSize   VFree 
 vg_bootdisk   2   2   0 wz--n- 237.50g 80.00m
 vg_sklad01    4   1   0 wz--n-  10.92t     0 
 vg_sklad02    4   1   0 wz--n-  10.92t  2.73t

[root@sklad ~]# lvs
 LV         VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 lv_root    vg_bootdisk rwi-aor--- 102.70g                                    100.00          
 lv_swap    vg_bootdisk rwi-aor---  16.00g                                    100.00          
 lv_sklad01 vg_sklad01  rwi-aor---   8.19t                                    100.00          
 lv_sklad02 vg_sklad02  rwi-a-r---   5.46t                                    2.31            

出於某種原因,vg_sklad02(我正在處理的 VG)中有未分配的空間。-l 100%VG 不應該使用 VG 中的所有可用空間嗎?

LV lv_sklad01 和 lv_sklad02 應該具有相同的大小,因為它們是從相同的驅動器創建的,據我記得我嘗試使用相同的創建命令。

有人對我做錯了什麼有任何建議嗎?

正如我在我的問題中所說,我以前做過這個,並且有一個兩年前我為完成它所做的事情的擷取日誌。由於某種原因,相同的 lvcreate 命令不起作用。要創建這個 LV,我必須使用 -i 3 指定條帶的數量。所以,工作命令是:

lvcreate -i 3 --type raid5 -L 8.18T -n lv_sklad02 vg_sklad02

我猜想 LVM 工具的更新發生了一些變化?

更新

他們確實對 LVM2 進行了更改。從 rpm -q –changelog lvm2

* Fri Jul 29 2016 Peter Rajnoha <prajnoha@redhat.com> - 7:2.02.162-1
<...>
- Add allocation/raid_stripe_all_devices to reinstate previous behaviour.
- Create raid stripes across fixed small numbers of PVs instead of all PVs.
<...>

很高興知道我並不是完全瘋了。:-) 我是 RTFM,但我猜不是正確的 FM。:-))

引用自:https://serverfault.com/questions/852920