Kategorie
LVM

LVM on Ubuntu 16.04 – zaawansowane zarządzanie pojemnością dysków

Ważne pojęcia:

LVM – Logical Volume Manager (Menadżer Woluminów Logicznych), jest to system zaawansowanego zarządzania przestrzenią dysku. Jest on o wiele bardziej elastyczny, niż klasyczne partycje dyskowe.

PV – Physical Volume (Woluminy fizyczny, partycja fizyczna), są bezpośrednio związane z partycjami na dyskach (np. /dev/hda1, /dev/sdb3), które możemy wykorzystać do utworzenia wirtualnych grup.

VG – Volume Group (Grupa woluminów, grupa partycji), składają się co najmniej z jednego PV, ich wielkość to suma wielkości wszystkich PV należących do danej grupy. Całkowite miejsce VG możemy dowolnie rozdzielać pomiędzy kolejne LV.

LV – Logical Volume (Wolumin logiczny, partycja logiczna), są obszarami dostępnymi dla systemu (podobnie jak standardowe partycje). LV są obszarami wydzielonymi z VG, zatem suma wielkości LV nie może przekraczać objętości VG, do którego należą.

LVM powinien być elementem naszego systemu. Jeśli jest inaczej wystarczy wydać z konsoli poniższą komendę:

root@server:/# apt-get install lvm2

Poniżej przykład użycia dysku 50GB, na którym utworzone są 2 partycje 20GB i 30GB jako magazynu LVM. Na bazie 2 partycji została utworzona wirtualna grupa 50GB. W grupie utworzono logiczne woluminy o rozmiarze odpowiednio: lv01 – 5GB i lv02 – 20GB. Wolny obszar jaki został do wykorzystania w wirtualne grupie to 25GB.

<- /dev/sdc ---------------- Fizyczny twardy dysk 50GB ------------------>
<- /dev/sdc1 ---- PV 20GB ----><-- /dev/sdc2 -------- PV 30GB ----------->
<- /dev/new_vg ---------------------- VG 50GB --------------------------->
<- /dev/new_vg/lv01 -LV 5GB -><- /dev/new_vg/lv02 -LV 20GB -><-Free 25GB->

Jeśli chcemy wykorzystać cały dysk (np. sdc) jako magazyn LVM dla fizycznego woluminu wydajemy poniższe polecenie:

root@server:/# pvcreate /dev/sdc

Wyświetlić woluminy fizyczne możemy poleceniem:

root@server:/# pvscan

Bardziej szczegółowe informacje o woluminach fizycznych uzyskamy wydając polecenie:

root@server:/# pvdisplay

Jeśli chcemy poznać dokładny rozmiar fizycznego woluminu, możemy użyć poniższego polecenia wpisując odpowiedni parametr:
m – megabajty
g – gigabajty
t – terabajty.

root@server:/# pvs --units m

Po utworzeniu fizycznych woluminów tworzymy wirtualną grupę o nazwie main poniższym poleceniem:

root@server:/# vgcreate main /dev/sdc

Wyświetlamy wirtualne grupy poleceniem:

root@server:/# vgdisplay

Jeśli chcemy poznać dokładny rozmiar wirtualnej grupy, możemy użyć poniższego polecenia wpisując odpowiedni parametr:
m – megabajty
g – gigabajty
t – terabajty.

root@server:/# vgs --units m

Rozszerzenie wirtualnej grupy o nowy dysk (wcześniej należy oczywiście dodać nowy dysk poleceniem pvcreate jak wyżej):

root@server:/# vgextend main /dev/sdd1

Po tych zabiegach możemy utworzyć logiczne woluminy w wirtualnej grupie main. Poniższym poleceniem utworzymy logiczny wolumin o rozmiarze 100GB, nazwie backup w wirtualnej grupie main:

root@server:/# lvcreate -L 100G -n backup main 

Możemy też utworzyć logiczny wolumin wykorzystujący całą wolną powierzchnię w wirtualnej grupie main:

root@server:/# lvcreate -l 100%FREE -n backup main 

Aby wyświetlić logiczne woluminy należy wydać polecenie:

root@server:/# lvdisplay

Jeśli chcemy poznać dokładny rozmiar logicznego woluminu, możemy użyć poniższego polecenia wpisując odpowiedni parametr:
m – megabajty
g – gigabajty
t – terabajty.

root@server:/# lvs --units m

Sformatować utworzony wolumin logiczny o nazwie backup możemy poniższym poleceniem:

root@server:/#  mkfs.ext4 -m 0 /dev/main/backup

W celu utworzenia Logicznych partycji można użyć komendy pvcreate dla całego dysku /dev/sdc lub utworzyć partycje np. programem cfdisk (jak w przykładzie), a później komendą pvcreate utworzyć partycje, które mogą być wykorzystane do zbudowania Wirtualnej grupy.

root@server:/# pvcreate /dev/sdb1
root@server:/# pvcreate /dev/sdb2

wyświetlenie fizycznych partycji odpowiednio: wszystkich, dla sdc1 o sdc2

root@server:/# pvdisplay
root@server:/# pvdisplay /dev/sdc1
root@server:/# pvdisplay /dev/sdc1

Zwiększenie rozmiaru logicznego woluminu o 40GB wykonamy poniższym poleceniem:

root@server:/# lvresize -L +40GB /dev/main/backup
root@server:/# lvextend -L +40GB /dev/main/backup

lub wykorzystując całą dostępną powierzchnię wirtualnej grupy:

root@server:/# lvextend -l +100%FREE /dev/main/backup

Zmiany nazwy logicznego woluminu dokonamy jednym z poniższych poleceń:

root@server:/# lvrename /dev/main/backup /dev/main/newname
root@server:/# lvrename  main backup newname

Odświeżyć informacje o utworzonych woluminach możemy poniższym poleceniem:

root@server:/# udevadm trigger

lub

root@server:/# vgscan --mknodes

Po zwiększeniu rozmiaru dysku, który zawiera partycje i dane, aby nowy rozmiar był widoczny dla systemu operacyjnego należy wykonać dodatkowe czynności. Jeśli na dysku jest tylko jedna partycja uruchamiamy kolejno:

uruchomić poniższe polecenia:

root@server:/# e2fsck -f /dev/main/backup
root@server:/# resize2fs /dev/main/backup

Jeśli na dysku są inne partycje (np. swap) powinniśmy w pierwszej kolejności wykonać mapowanie partycji:

root@server:/# kpartx -av /dev/main/backup

otrzymamy wynik podobny do poniższego:

add map main-backupp1 (252:1): 0 7811072 linear 252:0 2048
add map main-backupp2 (252:2): 0 306759680 linear 252:0 7813120

Następnie jak poprzednio wykonujemy powyższe polecenia jednak tylko dla wybranej i wcześniej zmapowanej partycji:

root@server:/# e2fsck -f /dev/mapper/main-backupp2
root@server:/# resize2fs /dev/mapper/main-backupp2

Ostatnim krokiem jest usuniecie mapowania:

root@server:/# kpartx -d /dev/main/backup

Usunąć logiczny wolumin o nazwie backup z grupy main możemy poniższym poleceniem

root@server:/# lvremove /dev/main/backup

Jeżeli po wydaniu powyższego polecenia otrzymamy komunikat podobny do poniższego:

  Logical volume main/backup is used by another device.

Rozwiązanie jest pod tym linkiem.

Utworzenie migawki dysku LVM (zachowanie stanu dysku na moment tworzenia migawki):

root@server:/# lvcreate -s -n backup_snap -L 20GB main/backup

Odtworzenie stanu dysku zachowanego w migawce (Uwaga: dysk backup nie może być zamontowany ani używany):

root@server:/# lvconvert --merge main/backup

Uwaga: po odtworzeniu dysku LVM z migawki jest ona automatycznie usuwana. Jeśli chcemy mieć w dalszym ciągu zachowany stan dysku LVM na dany moment, zaraz po jego odtworzeniu musimy utworzyć ponownie migawkę identycznie jak poprzednio.

Usunięcie migawki:

root@server:/# lvremove /dev/main/backup_snap

 

Dodatkowe parametry poleceń:

root@server:/# man vgdisplay root@server:/# man lvcreat

Dezaktywowanie wszystkie woluminów:

root@server:/# vgchange -a n

Aktywowanie wszystkich woluminów:

root@server:/# vgchange -a y

Uszkodzenia fizyczne możemy sprawdzić programem badblocks z pakietu e2fsprogs):

root@server:/# badblocks -s /dev/sda

Naprawa systemu plików:

root@server:/# fsck.ext2 root@server:/# fsck.reiserfs root@server:/# fsck.vfat root@server:/# fsck.jfs root@server:/# xfs_repair