Linux

為 Linux 上的特定 LVM2 VG 自動分發 lvm(條帶)

  • May 10, 2017

使用 Linux lvm2,我可以在 VG 中創建邏輯卷。當我使用lvcreate命令 striping/stripesize 指定時,我可以手動將邏輯卷分佈到所有物理卷上(如下面的lvnova所示)。

有沒有辦法配置 lvcreate 總是條帶化,特別是如果我創建新的 LV,它們應該在設備上循環創建?(即沒有在每個 lvcreate 中指定物理“啟動”設備)

我需要為 OpenStack Nova 用於臨時設備的捲組持久配置它。看起來我無法配置 lvm 驅動程序來更均勻地分配它們。

我正在尋找一種將其指定為 VG 上的屬性的方法(因為 lvcreate 正在談論繼承分配),但我在手冊中找不到它。

LV 繼承了分配策略,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,但我希望擺脫這種間接。

這是帶有 KVM/nova OS Liberty 的 Ubuntu Trusty (lvm 2.0.2.98(2)) 上的 Linux 4.4.0。

Andreas 提到的allocation/raid_stripe_all_devices=1選項lvm.config僅適用於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 錯誤。

您可以在/etc/lvm.conf. 如果您設置raid_stripe_all_devices=1預設值應該是條紋而不是線性。你也應該看看use_linear_target

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