wg. Wikipedii – Logical Volume Manager (zarządca woluminów logicznych) – mechanizm systemu operacyjnego do zarządzania przestrzenią pamięci masowej. W szczególności, zarządca pozwala na połączenie partycji znajdujących się na różnych urządzeniach pamięci masowej w jeden dysk wirtualny. Jego rozmiar nie jest zdefiniowany na stałe – jeśli zachodzi taka potrzeba, istnieje możliwość jego rozszerzenia o nową przestrzeń pamięciową. Obsługa woluminów logicznych zaimplementowana jest w większości systemów operacyjnych, może różnić się funkcjonalnością i stosowaną terminologią.
LVM zapewnia warstwę abstrakcji pomiędzy fizycznym dyskiem a systemem plików. System plików może mieć zmieniony rozmiar, może obejmować wiele fizycznych dysków, może obejmować losowe obszary dysku. LVM pozwala akumulować przestrzenie jednej lub wielu partycji bądź dysków (woluminy fizyczne) to sformowania logicznego kontenera (wolumin logiczny).
Korzyści jakie oferuje LVM to także:
- zmiana rozmiaru grup woluminów i woluminów logicznych,
- przenoszenie online danych pomiędzy logicznymi i fizycznymi woluminami,
- własne nazewnictwo dla grup woluminów i woluminów logicznych,
- mirroring i stripping danych na wielu fizycznych dyskach,
- snapshoty woluminów logicznych.
Struktura LVM jest zbudowana z trzech obiektów: fizycznego woluminu, grupy woluminów i logicznego woluminu. Te obiekty są dalej podzielone na fizyczne ekstenty i logiczne ekstenty.
Wolumin fizyczny (ang. PV – physical volume).
Jest tworzony gdy magazyn dyskowy taki jak partycja czy cały dysk przekazywany jest pod kontrolę LVM. Taki proces konstruuje strukturę danych na urządzeniu obejmującą etykietę i metadane. Etykieta zawiera UUID, rozmiar urządzenia i wskaźniki do położenia danych i metadanych. LVM przechowuje kopię metadanych na końcu fizycznego woluminu.
Lista fizycznych woluminów w systemie:
1 |
# pvs |
Grupa woluminów (ang. VG – volume group).
Jest tworzona gdy przynajmniej jeden wolumin fizyczny jest do niej dodany. Przestrzeń dyskowa ze wszystkich woluminów fizycznych wchodzących w skład grupy woluminów jest agregowana w jeden duży magazyn przeznaczony do budowy jednego lub więcej woluminów logicznych. Fizyczne woluminy dodane do grupy woluminów mogą mieć różne rozmiary. LVM zapisuje metadane grupy woluminów na każdym fizycznym woluminie dodawanym do tej grupy.
Lista grup woluminów:
1 |
# vgs -v |
Fizyczny ekstent (PE – physcial extent).
Gdy wolumin fizyczny dodawany jest do grupy woluminów, dzielony jest na wiele małych logicznych kawałków zwanych ekstentami fizycznymi. Ekstent jest najmniejszą jednostką obszaru możliwą do zaalokowania w LVM. Domyślnym rozmiarem PE są 4MB, możemy go zmienić w czasie tworzenia grupy woluminów. Każdy fizyczny wolumin dodany do grupy woluminów będzie miał taki sam rozmiar PE.
Wyświetlanie rozmiary fizycznego ekstentu grupy woluminów np. vg00:
1 |
# vgdisplay vg00 | grep ‘PE Size’ |
Wolumin Logiczny (LV – logical volume).
Grupa woluminów zawiera pulę magazynów składającą się z jednego lub więcej woluminów. Obszar grupy woluminów podzielony jest na jedną lub wiele partycji logicznych zwanych woluminami logicznymi. Logiczny wolumin może być rozszerzany lub kurczony i może wykorzystywać przestrzeń jednego lub wielu fizycznych woluminów wchodzących w skład grupy woluminów.
Lista woluminów logicznych w systemie:
1 |
# lvs -v |
Logiczny ekstent (LE – logical extent).
Wolumin logiczny złożony jest z ekstentów zwanych logicznymi. Logiczne ekstenty wskazują na fizyczne ekstenty i mogą tworzyć obszar losowo lub w sposób ciągły. Im większy jest wolumin logiczny tym więcej posiada logicznych ekstentów. Ekstenty logiczne są zbiorem ekstentów fizycznych zaalokowanych dla woluminu logicznego. Rozmiary ekstentów fizycznych i logicznych są zazwwyczaj takie same w ramach grupy woluminów, może się jednak zdażyć, że logiczny ekstent jest mniejszy lub większy niż ekstent fizyczny. Domyślnym rozmiarem LE są podobnie jak PE 4MB.
Informacje o logicznym woluminie root w grupie woluminów vg00:
1 |
# lvdisplay /dev/vg00/root |
Zarządzanie przestrzenią dyskową przez LVM.
Komendy LVM przedstawiają poniższe tabele.
Komendy związane z fizycznymi woluminami. | |
Komenda | Opis |
pvck |
Sprawdza integralność woluminu fizycznego. |
pvcreate |
Inicjalizuje dysk lub partycję do wykorzystania przez LVM. |
pvdisplay |
Wyświetla dokładne informacje o fizycznym woluminie. |
pvresize |
Zmienia rozmiar woluminu fizycznego. |
pvmove |
Przenosi dane z jednego fizycznego woluminu do innego. |
pvremove |
Deaktywuje (uninitialize) wolumin fizyczny. |
pvs |
Listuje woluminy fizyczne. |
pvscan |
Skanuje cały system i listuje wszystkie znalezione woluminy fizyczne. |
Komendy związane z grupami woluminów |
|
vgck |
Sprawdza integralność grupy woluminów. |
vgcreate |
Tworzy grupę woluminów. |
vgdisplay |
Wyświetla dokładne informacje o grupie woluminów. |
vgextend |
Dodaje fizyczny wolumin do grupy woluminów. |
vgreduce |
Usuwa fizyczny wolumin z grupy woluminów. |
vgrename |
Zmienia nazwę grupy woluminów. |
vgremove |
Usuwa grupę woluminów. |
vgs |
Listuje grupy woluminów. |
vgscan |
Skanuje cały dysk, listuje znalezione grupy woluminów i przebudowuje cache. |
Komendy związane z woluminami logicznymi |
|
lvcreate |
Tworzy wolumin logiczny. |
lvdisplay |
Wyświetla dokładne informacje o woluminie logicznym. |
lvextend |
Rozszerza rozmiar woluminu logicznego. |
lvreduce |
Zmniejsza rozmiar woluminu logicznego. |
lvremove |
Usuwa logiczny wolumin. |
lvrename |
Zmienia nazwę logicznego woluminu. |
lvresize |
Zmienia rozmiar woluminu logicznego. Z opcją -r komenda odwołuje się do polecenia resize2fs celem zmniejszenia także systemu plików tworzącego wolumin. |
lvs |
Listuje woluminy logiczne. |
lvscan |
Skanuje cały dysk twardy i listuje wszystkie znalezione woluminy logiczne |
Różne komendy LVM | |
lvm |
Interaktywne narzędzie do zarządzania LVM. |
lvmdiskscan |
Skanuje system w poszukiwaniu dysków i partycji LVM a także tych, które mogą być zainicjalizowane do użycia przez LVM. |
Ćwiczenie 1. Tworzenie fizycznego woluminu i grupy woluminów.
Tworzymy partycję o rozmiarze 200MB korzystając z parted:
1 2 3 |
# parted /dev/vdc mklabel msdos # parted /dev/vdc mkpart primary 1 201m # parted /dev/vdc print |
Inicjalizujemy fizyczny wolumin vdb i vdc1 korzystając z komendy pvcreate:
1 2 3 4 5 6 7 8 9 |
# pvcreate –v /dev/vdb /dev/vdc1 Set up physical volume for "/dev/vdb" with 4194304 available sectors Zeroing start of device /dev/vdb Writing physical volume data to disk "/dev/vdb" Physical volume "/dev/vdb" successfully created Set up physical volume for "/dev/vdc1" with 391168 available sectors Zeroing start of device /dev/vdc1 Writing physical volume data to disk "/dev/vdc1" Physical volume "/dev/vdc1" successfully created |
Użyj lsblk do określenia ile jest dostępnej przestrzeni dyskowej.
Tworzymy grupę woluminów vg0 komendą vgcreate i dodajemy do niej fizyczne woluminy vdb i vdc1. Opcji -s używamy do określenia rozmiaru fizycznego ekstentu w MB.
1 2 3 4 5 6 |
# vgcreate –s 16 vg01 /dev/vdb /dev/vdc1 –v Adding physical volume '/dev/vdb' to volume group 'vg01' Adding physical volume '/dev/vdc1' to volume group 'vg01' Archiving volume group "vg01" metadata (seqno 0). Creating volume group backup "/etc/lvm/backup/vg01" (seqno 1). Volume group “vg01” successfully created |
Wyświetlamy podstawowe informacje o grupie woluminów vg01 korzystając z komendy vgs i vgscan:
1 2 |
# vgs vg01 # vgscan |
Możemy także wyświetlić dokładniejsze informacje korzystając z polecenia vgdisplay z opcją -v:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# vgdisplay –v vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 2.16 GiB PE Size 16.00 MiB Total PE 138 Alloc PE / Size 0 / 0 Free PE / Size 138 / 2.16 GiB VG UUID SXTjT1-xtrH-MtGg-U9Kl-aWgq-HEFc-55Hxdo --- Physical volumes --- PV Name /dev/vdb PV UUID 8cVKkL-VGQm-MW7Z-hnTZ-WS2m-M7LG-mKmw0F PV Status allocatable Total PE / Free PE 127 / 127 PV Name /dev/vdc1 PV UUID qBtEPJ-Pb7p-AJf0-zDZX-RGeS-SmrH-IlHE6a PV Status allocatable Total PE / Free PE 11 / 11 The vgdisplay command shows that there are two physical volumes in vg01 volume group, with 127 PEs in the first physical volume and 11 in the second, totaling 138. The PE size is 16MB and total usable space is about 2.16GB. |
Wyświetlamy podstawowe informacje o fizycznym woluminie vdb korzystając z poleceń pvs i pvscan:
1 2 |
# pvs # pvscan |
Dokładniejsze informacje o fizycznym woluminie wyświetlamy poleceniem pvdisplay:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# pvdisplay /dev/vdb --- Physical volume --- PV Name /dev/vdb VG Name vg01 PV Size 2.00 GiB / not usable 16.00 MiB Allocatable yes PE Size 16.00 MiB Total PE 127 Free PE 127 Allocated PE 0 PV UUID 8cVKkL-VGQm-MW7Z-hnTZ-WS2m-M7LG-mKmw0F # pvdisplay /dev/vdc1 PV Name /dev/vdc1 VG Name vg01 PV Size 191.00 MiB / not usable 15.00 MiB Allocatable yes PE Size 16.00 MiB Total PE 11 Free PE 11 Allocated PE 0 PV UUID qBtEPJ-Pb7p-AJf0-zDZX-RGeS-SmrH-IlHE6a |
LVM podczas inicjalizacji i dodawania do grupy woluminów traktuje partycję i dysk w sposób jednakowy.
Ćwiczenie 2. Tworzenie woluminu logicznego.
Tworzymy wolumin logiczny lvol0 o rozmiarze 600MB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# lvcreate –L 600 vg01 –v Setting logging type to disk Finding volume group "vg01" Rounding up size to full physical extent 608.00 MiB Archiving volume group "vg01" metadata (seqno 7). Creating logical volume lvol0 Creating volume group backup "/etc/lvm/backup/vg01" (seqno 8). Activating logical volume "lvol0". activation/volume_list configuration setting not defined: Checking only host tags for vg01/lvol0 Creating vg01-lvol0 Loading vg01-lvol0 table (253:4) Resuming vg01-lvol0 (253:4) Wiping known signatures on logical volume "vg01/lvol0" Initializing 4.00 KiB of logical volume "vg01/lvol0" with value 0. Creating volume group backup "/etc/lvm/backup/vg01" (seqno 8). Logical volume “lvol0” created |
Rozmiar może być podany w KB, MB, GB, TB, PB, EB, bajtach, sectorach lub ilości LE (logicznych ekstentów).
MB są domyślną jednostką. Minimalnym rozmiarem woluminu logicznego jest jest rozmiar fizycznego ekstentu i jest zawsze jego wielokrotnością. Powinno to być brane pod uwagę aby nie marnować przestrzeni dyskowej.
Tworzymy wolumin logiczny oravol o rozmiarze 1.3GB. Opcja -L służy do podania rozmiaru a opcja -n do podania nazwy.
1 2 3 |
# lvcreate –L 1.3g –n oravol vg01 Rounding up size to full physical extent 1.31 GiB Logical volume “oravol” created |
Wyświetlamy podstawowe informacje o dwóch logicznych woluminach:
1 2 |
# lvs # lvscan |
Używamy komendy vgdisplay na grupie woluminów vg01 z opcją -v aby uzyskać dokładne informacje o całej grupie woluminów wraz z logicznymi woluminami, które wchodzą w skład grupy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# lvdisplay /dev/vg01/lvol0 --- Logical volume --- LV Path /dev/vg01/lvol0 LV Name lvol0 VG Name vg01 LV UUID e2c5W3-TLkU-0V6q-l8pg-dfFl-R0X8-Rd8UVT LV Write Access read/write LV Creation host, time server1.example.com, 2014-10-23 21:45:18 -0400 LV Status available # open 0 LV Size 608.00 MiB Current LE 38 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 |
vgdisplay informacje o grupie woluminów bierze z plików w katalogu /etc/lvm/backup.
Ćwiczenie 3. Rozszerzenie grupy woluminów i logicznego woluminu.
Tworzymy fizyczny wolumin /dev/vdd komendą pvcreate:
1 2 3 4 5 6 |
# pvcreate /dev/vdd –v Set up physical volume for "/dev/vdd" with 4194304 available sectors Zeroing start of device /dev/vdd Writing physical volume data to disk "/dev/vdd" Physical volume "/dev/vdd" successfully created |
Dodajemy fizyczny wolumin vg01 do grupy woluminów vg01:
1 2 3 4 5 6 7 |
# vgextend vg01 /dev/vdd –v Checking for volume group "vg01" Archiving volume group "vg01" metadata (seqno 1). Adding physical volume '/dev/vdd' to volume group 'vg01' Volume group "vg01" will be extended by 1 new physical volumes Creating volume group backup "/etc/lvm/backup/vg01" (seqno 2). Volume group "vg01" successfully extended |
Wyświetlamy podstawowe informacje o grupie woluminów vg01:
1 |
# vgs vg01 |
Rozszerzamy logiczny wolumin lvo10 podając całkowity pożądany rozmiar woluminu lub podajemy dodatkową przestrzeń o jaką rozszerzamy wolumin:
1 2 3 |
# lvextend –L 1g /dev/vg01/lvol0 Extending logical volume lvol0 to 1.00 GiB Logical volume lvol0 successfully resized |
lub
1 |
# lvextend –L +400m /dev/vg01/lvol0 |
Zmieniamy rozmiar logicznego woluminu oravol:
1 2 3 4 |
# lvresize –L 2g /dev/vg01/oravol Rounding size to boundary between physical extents: 704.00 MiB Extending logical volume oravol to 2.00 GiB Logical volume oravol successfully resized |
lub
1 |
# lvresize –L +700m /dev/vg01/oravol |
Wyświetlamy szczegółowe informacje o grupie woluminów vg01:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# vgdisplay –v vg01 --- Volume group --- VG Name vg01 System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 55 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 4.14 GiB PE Size 16.00 MiB Total PE 265 Alloc PE / Size 192 / 3.00 GiB Free PE / Size 73 / 1.14 GiB VG UUID SXTjT1-xtrH-MtGg-U9Kl-aWgq-HEFc-55Hxdo --- Logical volume --- LV Path /dev/vg01/lvol0 LV Name lvol0 VG Name vg01 LV UUID e2c5W3-TLkU-0V6q-l8pg-dfFl-R0X8-Rd8UVT LV Write Access read/write LV Creation host, time server1.example.com, 2014-10-23 21:45:18 -0400 LV Status available # open 0 LV Size 1.00 GiB Current LE 64 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:2 --- Logical volume --- LV Path /dev/vg01/oravol LV Name oravol VG Name vg01 LV UUID JeQF6O-ReLp-eg4z-wjZh-ufdf-aqAL-1efXgL LV Write Access read/write LV Creation host, time server1.example.com, 2014-10-24 07:45:35 -0400 LV Status available # open 0 LV Size 2.00 GiB Current LE 128 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:3 --- Physical volumes --- PV Name /dev/vdb PV UUID 8cVKkL-VGQm-MW7Z-hnTZ-WS2m-M7LG-mKmw0F PV Status allocatable Total PE / Free PE 127 / 0 PV Name /dev/vdc1 PV UUID qBtEPJ-Pb7p-AJf0-zDZX-RGeS-SmrH-IlHE6a PV Status allocatable Total PE / Free PE 11 / 11 PV Name /dev/vdd PV UUID 2MWF1s-QGyj-Msb8-pi41-J226-Cfel-hC3cQ4 PV Status allocatable Total PE / Free PE 127 / 62 |
Ćwiczenie 4. Zmiana nazwy, zmniejszenie rozmiaru i usuwanie woluminu logicznego.
Zmieniamy nazwę lvo10 na lvolnew:
1 2 |
# lvrename vg01 lvol0 lvolnew Renamed "lvol0" to "lvolnew" in volume group "vg01" |
Potwierdzamy:
1 2 |
# lvs | grep lvolnew lvolnew vg01 -wi-a----- 1.00g |
Redukujemy rozmiar woluminu logicznego lvolnew do 800MB komendą lvreduce:
1 2 3 4 5 6 |
# lvreduce –L 800m /dev/vg01/lvolnew WARNING: Reducing active logical volume to 800.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lvolnew? [y/n]: y Reducing logical volume lvolnew to 800.00 MiB Logical volume lvolnew successfully resized |
lub
1 |
# lvreduce –L –200m /dev/vg01/lvolnew |
Redukujemy rozmiar woluminu logicznego lvolnew do 700MB komendą lvresize:
1 2 3 4 5 6 7 |
# lvresize –L 700m /dev/vg01/lvolnew Rounding size to boundary between physical extents: 96.00 MiB WARNING: Reducing active logical volume to 704.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lvolnew? [y/n]: y Reducing logical volume lvolnew to 704.00 MiB Logical volume lvolnew successfully resized |
lub
1 |
# lvresize –L –100m /dev/vg01/lvolnew) |
Podczas zmniejszania rozmiaru woluminu logicznego jest ryzyko utraty danych zlokalizowanych usuwanych na logicznych ekstentach. Najlepiej zrobić zatem backup woluminu logicznego przed zmniejszeniem jego rozmiaru.
Usuwamy woluminy logiczne lvolnew i oravol poleceniem lvremove. Opcja -f potwierdzi zapytanie “Do you really want to remove active logical volume <lvol_name>” .
1 2 3 4 |
# lvremove –f /dev/vg01/lvolnew Logical volume "lvolnew" successfully removed # lvremove –f /dev/vg01/oravol Logical volume "oravol" successfully removed |
Wyświetlamy informacje o grupie volumminów poleceniem vgdisplay. Cur LC powinnno wskazywać teraz 0.
1 2 |
# vgdisplay vg01 | grep ‘Cur LV’ Cur LV 0 |
Ćwiczenie 5. Redukcja i usunięcie grupy woluminów.
Usuwamy fizyczne woluminy vdb i vdc1 z grupy woluminów vg01 poleceniem vgreduce:
1 2 3 |
# vgreduce vg01 /dev/vdb /dev/vdc1 Removed "/dev/vdb" from volume group "vg01" Removed "/dev/vdc1" from volume group "vg01" |
Usuwamy grupę woluminów vg01 korzystając z polecenia vgremove. Spowoduje to także usunięcie ostatniego fizycznego woluminu z grupy.
1 2 |
# vgremove vg01 Volume group "vg01" successfully removed |
Można także użyć opcji -f do wymuszenia usunięcia grupy woluminów nawet jeżeli zawiera logiczne i fizyczne woluminy.
Ćwiczenie 6. Deinicializacja fizycznego woluminu.
Deinicjalizujemy fizyczne woluminy vdb, vdc1 i vdd poleceniem pvremove:
1 2 3 4 |
# pvremove /dev/vdb /dev/vdc1 /dev/vdd Labels on physical volume "/dev/vdb" successfully wiped Labels on physical volume "/dev/vdc1" successfully wiped Labels on physical volume "/dev/vdd" successfully wiped |
Dysk został przywrócony do stanu pierwotnego.