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

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%VG /dev/main/backup

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 uruchomić poniższe polecenia:

root@server:/# e2fsck -f /dev/main/backup e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/main/backup: 16/130560 files (0.0% non-contiguous), 426988/522080 blocks
root@server:/# resize2fs /dev/main/backup resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/main/backup to 1044192 (1k) blocks. The filesystem on /dev/main/backup is now 1044192 blocks long

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

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

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