Przejdź do głównej zawartości

LVM - Logical Volume Manager - Wolumeny logiczne bez tajemnic

LVM czyli Logical Volume Manager jest mechanizmem systemu operacyjnego do zarządzania przestrzenią dyskową. Zaletą tego rozwiązania jest możliwość komponowania przestrzeni dyskowej łącząc ze sobą miejsce fizycznej przestrzeni partycji utworzonych na różnych urządzeniach fizycznych prosto mówiąc jeden wolumen logiczny może być zbudowany z dwóch lub więcej dysków fizycznych lub ich niezależnych partycji. Rozwiązanie to daje większe pole manewru w zarządzaniu przestrzenią dyskową w systemach operacyjnych. Co więcej przestrzeń jaką zawiera dany wolumin logiczny może być elastycznie zmieniana i powiększana w locie jeżeli zajdzie taka potrzeba. 

Aby w ogóle mówić o wolumenach logicznych zacząć należy od tego co znajduję się pod spodem czyli : 
  1. Urządzenia fizyczne (dyski twarde, urządzenia zewnętrzne, urządzenia przechowywania danych) 
  2. Partycje utworzone na urządzeniach fizycznych (/dev/hda1, dev/sdb4 itp) (Physical volumes PV) 
  3. Grupy wolumenów (Volumes group - VG) w skład których wchodzi co najmniej jeden PV
  4. Wolumeny logiczne ( LV) które utworzone są z przestrzeni zawartej w VG 
Bardziej obrazowo i dla lepszego zrozumienia istoty wolumenów logicznych wyobraźmy sobie, iż wolumen fizyczny jest po prostu stosem złożonym z bloków, gdzie blok jest to jednostka w jakiej przechowywane są dane. Możliwe jest łączenie stosów bloków (wolumenów fizycznych) w jeden stos o większej przestrzeni wspólnej co oznacza możliwość łączenia woluminów fizycznych w grupy woluminów. Powstały w ten sposób jeden większy stos o określonym rozmiarze, który to następnie może zostać podzielony na kilka mniejszych stosów o rożnych rozmiarach w taki sposób jak grupa wolumenów złożona jest z kilku wolumenów fizycznych. Można by zastanawiać się po co z mniejszych stosów robić jeden większy i ponownie dzielić go na mniejsze? Ale właśnie dzięki tej operacji czyli utworzeniu jak gdyby jednej puli zawierającej sumę dostępnej przestrzeni urządzeń fizycznych mamy możliwość dysponowania tą pulą jak tortem jaki można pokroić na dowolne kawałki co więcej możemy również zmieniać rozmiary tych kawałków w trybie on-line bez utraty danych (no prawie bez utraty danych). 

Pracując z wolumenami logicznymi administrator ma możliwość manipulacji rozmiarem takiego woluminu i może go z powodzeniem zwiększać na tyle na ile pozwalają na to zasoby oraz zmniejszać uważając by nie przekroczyć poziomu zajętości danego woluminu. Zmniejszenie woluminu logicznego do rozmiaru mniejszego niż zajmowana przestrzeń przez dane może powodować ich utratę. Dobrą praktyką jest wcześniejsze zaplanowanie rozmiaru wolumenów oraz pozostawienie nieco nie przydzielonej przestrzeni by w razie potrzeby wykorzystać ją do zwiększenie rozmiaru wolumenów. 

Tworzymy wolumen logiczny (LVM).


Krok 1 - Sprawdzenie dostępnego miejsca oraz dostępnych dysków fizycznych.

[root@localhost ~]# cat /proc/partitions | grep sd
8 0 20971520 sda
8 1 512000 sda1
8 2 20458496 sda2
8 16 8388608 sdb
8 17 4200966 sdb1
8 18 2104515 sdb2
8 19 2080417 sdb3



Powyższe polecenie wyświetliło dostępne partycję w raz z ich rozmiarem i widzimy, iż w tym przykładzie mamy do dyspozycji dwa dyski sda oraz sdb podzielone na partycje sda1, sda2 oraz sdb1, sdb2, sdb3 o podanych rozmiarach.

Krok 2 - Utworzenie grupy wolumenów


[root@localhost ~]# vgcreate vg_test /dev/sdb3 /dev/sdb2
  
  Writing physical volume data to disk "/dev/sdb3"
  Physical volume "/dev/sdb3" successfully created
  Writing physical volume data to disk "/dev/sdb2"
  Physical volume "/dev/sdb2" successfully created
  Volume group "vg_test" successfully created

Utworzono grupę vg_test z partycji sdb3 oraz sdb2. 

Krok 3 - Utworzenie wolumenów logicznych (LVM) 

Mamy do dyspozycji 4GB , które możemy podzielić według potrzeb dla przykładu zrobimy tak : 

[root@ localhost  /]# lvcreate -L 512 -n lv_test vg_test
  Logical volume "lv_test" created

Sprawdzamy ile miejsca mamy teraz do dyspozycji :

[root@ localhost  /]# vgs
  VG         #PV  #LV #SN Attr   VSize  VFree
  vg_test      2  1   0 wz--n-   3.98g  3.48g

Jak widać wykorzystaliśmy 512 MB i mamy jeszcze 3.48 GB z tej grupy wolumenów do przydzielenia


[root@ localhost  /]# lvcreate -L 2048 -n lv_nowy vg_test
  Logical volume "lv_nowy" created

Ponownie sprawdzamy ile miejsca zostało 

[root@ localhost  /]# vgs
  VG         #PV #LV #SN Attr   VSize  VFree
  vg_test      2   2   0 wz--n-  3.98g 1.48g

Jak widać zostało już tylko 1,48 GB i miejsce to zostawimy na potrzeby zmiany rozmiaru wybranego LVM.

Powyższe działania przedstawiają sposób utworzenia dwóch przykładowych wolumenów logicznych : 
  • lv_test 512MB
  • lv_nowy 2048MB
Krok 4 - Utworzenie systemu plików dla wolumenów

Po kroku 3 mamy już gotowe wolumeny logiczne i możemy się do nich odwoływać poprzez /dev/lv_test oraz /dev/lv_nowy aby jednak były nam do czegoś przydatne należy sformatować je nadając tym samym wybrany system plików. 

[root@localhost /]# mkfs.ext3 /dev/vg_test/lv_test
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32768 inodes, 131072 blocks
6553 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=134217728
4 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 27 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
Po utworzeniu systemu plików możemy zamontować stworzone wolumeny w klasyczny sposób i wykorzystywać przestrzeń dyskową. Dalej oczywiście należy zadbać o odpowiednie wpisy w /ets/fstab. 

Zmiana rozmiaru LVM.

Sprawdźmy jakie rozmiary mają utworzone wcześniej LVM. 

[root@ localhost 1 /]# lvs
  LV      VG Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_nowy vg_test    -wi-a-   2.00g
  lv_test vg_test    -wi-a- 512.00m

Załóżmy , iż zachodzi potrzeba zwiększenia rozmiaru lv_test wiemy oczywiście z poprzednich operacji, że możemy rozdysponować jeszcze 1,48 GB tak więc powiększmy lv_test do 1.5 GB. 

By było jeszcze ciekawiej utworzony został katalog /test pod jaki zamontowano zasób /dev/vg_test/lv_test

[root@ localhost  /]# mkdir test
[root@ localhost  /]# mount /dev/vg_test/lv_test /test/

Sprawdzamy punkty montowania : 

[root@localhost /]# mount
/dev/mapper/vg_rhel01-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/mapper/vg_test-lv_test on /test type ext3 (rw)

W katalogu /test utworzymy również testowy plik z dowolną zawartością. 

[root@RHEL01 test]# touch plik.txt
[root@RHEL01 test]# vi plik.txt
[root@RHEL01 test]#
[root@RHEL01 test]#
[root@RHEL01 test]# ll
total 20
drwx------. 2 root root 16384 Jul  9 12:37 lost+found
-rw-r--r--. 1 root root   198 Jul  9 12:55 plik.txt

Teraz dokonamy powiększenie rozmiaru woluminu lv_test do 1.5 GB 


[root@RHEL01 test]# lvextend -L 1536 /dev/vg_test/lv_test
  Extending logical volume lv_test to 1.50 GiB
  Logical volume lv_test successfully resized

[root@RHEL01 test]# ll
total 20
drwx------. 2 root root 16384 Jul  9 12:37 lost+found
-rw-r--r--. 1 root root   198 Jul  9 12:55 plik.txt

[root@RHEL01 test]# lvs
  LV    VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  lv_nowy  vg_test    -wi-a-  2.00g
  lv_test  vg_test    -wi-ao  1.50g

Jak widać rozmiar został powiększony do 1.5 GB a z plikiem nic się nie stało. Cała operacja przebiegła w momencie gdy zasób był zamontowany i znajdowały się na nim dane. 

Teraz zmniejszenie woluminu lv_test do 512 MB 


[root@RHEL01 test]# lvreduce -L 512 /dev/vg_test/lv_test
  WARNING: Reducing active and open logical volume to 512.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_test? [y/n]: y
  Reducing logical volume lv_test to 512.00 MiB
  Logical volume lv_test successfully resized

[root@RHEL01 test]# ll
total 20
drwx------. 2 root root 16384 Jul  9 12:37 lost+found
-rw-r--r--. 1 root root   198 Jul  9 12:55 plik.txt


[root@RHEL01 test]# lvs
  LV     VG  Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_nowy  vg_test    -wi-a-   2.00g
  lv_test  vg_test    -wi-ao 512.00m


Jak widać powyżej dostajemy ostrzeżenie o możliwości utraty danych ale jeżeli zostawimy rozmiar większy niż zawarte na danym woluminie dane raczej nie powinno się nic stać z plikami. 

Identyczny efekt uzyskamy stosując polecenie : 

[root@RHEL01 test]# lvresize -L 512 /dev/vg_test/lv_test
  WARNING: Reducing active and open logical volume to 512.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv_test? [y/n]: y
  Reducing logical volume lv_test to 512.00 MiB
  Logical volume lv_test successfully resized

[root@RHEL01 test]# ll
total 20
drwx------. 2 root root 16384 Jul  9 12:37 lost+found
-rw-r--r--. 1 root root   198 Jul  9 12:55 plik.txt

[root@RHEL01 test]# lvs
  LV   VG   Attr   LSize   Origin Snap%  Move Log Copy%  Convert
  lv_test  vg_group01 -wi-a-   1.50g
  lv_test2 vg_group01 -wi-a-   1.00g
  lv_root  vg_rhel01  -wi-ao  17.54g
  lv_swap  vg_rhel01  -wi-ao   1.97g
  lv_nowy  vg_test    -wi-a-   2.00g
  lv_test  vg_test    -wi-ao 512.00m

Również i tutaj dane czyli nasz plik.txt pozostały bez zmian. 

Troszkę materiałów video :

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości