LVM (Logical Volume Manager) to mechanizm umożliwiający zarządzanie przestrzenią dyskową. Z braku laku jest zastępnikiem solarisowego ZFSa na Linuksach. Posiada kilka pożytecznych cech jak zmiany wielkości przestrzeni dyskowej przeznaczonej dla woluminów logicznych czy grup woluminów … przydatne są też snapshoty.
Z reguły dostajemy zlecenia od DBA, by stworzyć użytkownika mysqlX z katalogiem domowym oraz ze specjalnie przygotowanym zasobem jako wolumin logiczny (Logical Volume) o odpowiedniej wielkości. W takim przypadku poza standardowym krokami:
zmiany w /etc/shadow
zmiany w /etc/passwd
stowrzenie katalogu domowego (z reguły /home/mysqlX)
nadanie odpowiednich uprawnień (z reguły "chown mysqlX:dba /home/mysqlX")
stworzenie katalogu do zamontowania zasobu (z reguły /mysql/mydataX)
nadanie odpowiednich uprawnień (z reguły "chown mysqlX:dba /mysql/mydataX")
Na początek wypada zerknąć ile to przestrzeni jest dostępnej w grupie woluminów (Volume group):
$ vgdisplay | grep Free Free PE / Size 591620 / 2,26 TiB
Jeśli jest jej wystarczająco, to można stworzyć logiczny wolumin (Logical volume):
lvcreate -n <lv_name> -L <lv_size>G <vg_name>
np.
lvcreate -n mysql-X -L ZG mysql
gdzie X numerek mysqla, natomiast Z wielkość wolumenu w gigabajtach
Następnie stworzony wolumin trzeba wyposażyć w filesystem np.:
mkfs.xfs -f /dev/mapper/mysql-mysql--X
Kolejnym krokiem jest podmontowanie zasobu:
mount -o nobarrier /dev/mapper/mysql-mysql--X /mysql/mydataX
oraz zapewnienie, by zasób montował się również po restarcie maszyny poprzez dodanie do /etc/fstab odpowiedniej linii:
/dev/mapper/mysql-mysql--X /mysql/mydataX xfs nobarrier 0 3
Po podmontowaniu warto jeszcze raz wykonać 6. punkt, ponieważ pierwsze podmontowywanie zasobów zmienia uprawnienia katalogu na "root:root". Po takiej czynności zasób przy każdym podmontowaniu powinien zachowywać już poprawne prawa.
Czasem zdarza się, że zasób trzeba powiększyć. Schemat postępowania jest prosty: odmontuj, zwiększ wolumin, podmontuj zasób i powiększ mu filesystem.
umount /mysql/mydataX
lvextend -L+ZG /dev/mapper/mysql-mysql--X
gdzie Z to znów liczba gigabajtów, o które zwiększamy wolumin logiczny (można zamiast +Z dać samo Z, ale wtedy będzie to oznaczać liczba gigabajtów, do której zwiększamy wolumin)
mount -o nobarrier /dev/mapper/mysql-mysql--X /mysql/mydataX
xfs_growfs -d /mysql/mydataX
W teorii można próbować bez odmontowywania i podmontowania (wtedy polecenia umount i mount pomijamy). Ale staramy być tutaj bardzo ostrożni i robimy to na naprawdę specjalną prośbę.
UWAGA!! Pod żadnym warunkiem nie należy zmniejszać zasobu poleceniem lvreduce.
==============================================================
Plik z configiem znajduje się w /etc/lvm/
pvcreate /dev/sdb vgcreate mysql /dev/sdb vgcfgrestore -f /a/etc/lvm/backup/<VG_name> mysql
po tym zabiegu powinny pojawić się zasoby LVM, zasoby te są nieaktywne. Aktywacja:
modprobe dm-mod vgchange -ay #11 logical volume(s) in volume group "mysql" now active
tworzenie filesystem dla pojedynczego zasobu:
mkfs.xfs -f /dev/mapper/mysql-mysql--X
tworzenie filesystm dla kilku zasobów:
for i in $(ls /dev/mapper/mysql-mysql--*);do mkfs.xfs -f $i ;done
tworzymy drzewo katalogów (/a/etc/fstab) musi zostać uzupełniony (do poprawienia w skrypcie!!):
awk '/mysql/{print $2}' /etc/fstab|xargs mkdir -p
montujemy:
mount -a
[root@pgwp-2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
postgres-1 mywp -wi-ao--- 32,00g
[root@pgwp-2 ~]# vgs
vgs vgscan vgsplit
[root@pgwp-2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
mywp 1 1 0 wz--n- 68,36g 36,36g
[root@pgwp-2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb mywp lvm2 a-- 68,36g 36,36g
[root@pgwp-2 ~]#