在Linux上为特定的LVM2 VG自动分配lvm(stripes)

使用Linux lvm2,我可以在VG中创build逻辑卷。 当我用lvcreate命令指定striping / stripesize时,我可以在所有物理卷上手动分配逻辑卷(如下面的lvnova所示)。

有没有一种方法来configurationlvcreate将始终条带化,特别是如果我创build新的LV,他们应该在设备上循环创build? (即没有在每个lvcreate中指定一个物理的“启动”设备)

我需要持久地为OpenStack Nova用于临时设备的卷组进行configuration。 看起来我无法configurationlvm驱动程序实际上更均匀地分配它们。

我正在寻找一种方法来指定它作为VG上的属性(因为lvcreate正在谈论inheritance分配),但我不能在手册中find它。

LV有分配策略inheritance,VG告诉我这是正常的:

 # vgchange vgdata --alloc normal Volume group allocation policy is already normal 

我也在看lvm.conf里面是否有分配策略。 但是只有cling2策略的参数,特别是在扩展音量的时候保持音段紧密(这里不是我主要关心的)。

手动条带化的LV样本和OpenStack在4个物理卷系统上生成一个卷:

 nvme0n1 259:0 0 1.5T 0 disk └─nvme0n1p1 259:4 0 1.5T 0 part ├─vgdata-lvnova (dm-0) 252:0 0 750G 0 lvm /srv/data ├─vgdata-ec3d1f0d--76f2--4cb2--af66--665dba0582b1_disk (dm-3) 252:3 0 50G 0 lvm ├─vgdata-ec3d1f0d--76f2--4cb2--af66--665dba0582b1_disk.swap (dm-4) 252:4 0 8G 0 lvm ├─vgdata-290ef35d--6d84--49cf--8d7d--3240dcd84a3e_disk (dm-5) 252:5 0 20G 0 lvm ... nvme1n1 259:1 0 1.5T 0 disk └─nvme1n1p1 259:5 0 1.5T 0 part └─vgdata-lvnova (dm-0) 252:0 0 750G 0 lvm /srv/data nvme2n1 259:2 0 1.5T 0 disk └─nvme2n1p1 259:6 0 1.5T 0 part └─vgdata-lvnova (dm-0) 252:0 0 750G 0 lvm /srv/data nvme3n1 259:3 0 1.5T 0 disk └─nvme3n1p1 259:7 0 1.5T 0 part └─vgdata-lvnova (dm-0) 252:0 0 750G 0 lvm /srv/data root@compute18:~# lvs --segments LV VG Attr #Str Type SSize lv-root vg0 -wi-ao--- 1 linear 223.52g lv-swap vg0 -wi-ao--- 1 linear 46.56g 17bad6e1-41f0-4725-a74d-7a1f1df5f0b6_disk vgdata -wi-ao--- 1 linear 20.00g 17bad6e1-41f0-4725-a74d-7a1f1df5f0b6_disk.swap vgdata -wi-ao--- 1 linear 1.00g 189585e0-9b69-4d7c-b1b4-194156312553_disk vgdata -wi-ao--- 1 linear 20.00g ... lvnova vgdata -wi-ao--- 4 striped 750.00g 

顺便说一句:我之前使用了条纹/ dev / md0,但我希望摆脱这种间接性。

这是Ubuntu Trusty上的Linux 4.4.0(lvm 2.0.2.98(2)),带有KVM / nova OS Liberty。

你可以在/etc/lvm.confconfiguration它。 如果你设置raid_stripe_all_devices=1那么默认应该是条带而不是线性的。 你也应该看看use_linear_target

Andreas提到的lvm.config中的allocation/raid_stripe_all_devices=1选项仅在Ubuntu Zesty中可用,即使这样,默认情况下它似乎也不打开条带卷。

基于这个原因我们修补了操作系统:

 /usr/lib/python2.7/dist-packages/nova/virt/libvirt/storage/lvm.py else: check_size(vg, lv, size) - cmd = ('lvcreate', '-L', '%db' % size, '-n', lv, vg) + cmd = ('lvcreate', '-i', '4','-L', '%db' % size, '-n', lv, vg) 

这对我们的情况是这样的:

 nvme0n1 259:0 0 1.5T 0 disk └─nvme0n1p1 259:4 0 1.5T 0 part ├─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk (dm-5) 252:5 0 100G 0 lvm └─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk.swap (dm-6) 252:6 0 8G 0 lvm nvme1n1 259:1 0 1.5T 0 disk └─nvme1n1p1 259:5 0 1.5T 0 part ├─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk (dm-5) 252:5 0 100G 0 lvm └─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk.swap (dm-6) 252:6 0 8G 0 lvm nvme2n1 259:2 0 1.5T 0 disk └─nvme2n1p1 259:6 0 750G 0 lvm /srv/data ├─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk (dm-5) 252:5 0 100G 0 lvm └─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk.swap (dm-6) 252:6 0 8G 0 lvm nvme3n1 259:3 0 1.5T 0 disk └─nvme3n1p1 259:7 0 1.5T 0 part ├─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk (dm-5) 252:5 0 100G 0 lvm └─vgdata-b063d1b9--e1ac--4cab--98d8--9a2d1c71406e_disk.swap (dm-6) 252:6 0 8G 0 lvm # lvs --segments b063d1b9-e1ac-4cab-98d8-9a2d1c71406e_disk vgdata -wi-ao--- 4 striped 100.00g b063d1b9-e1ac-4cab-98d8-9a2d1c71406e_disk.swap vgdata -wi-ao--- 4 striped 8.00g 

我们将为这个缺失的设置打开一个OpenStack错误。