Rad s LVM-om
LVM (Logical Volume Manager) je sustav za upravljanje diskovima koji dodaje sloj apstrakcije iznad fizičke pohrane. Omogućuje fleksibilnu dodjelu prostora na disku, promjenu veličine bez zaustavljanja sustava i izradu sigurnosnih kopija na temelju snapshotova. LVM se često koristi kao sloj pohrane za virtualizaciju. Na šifriranim sustavima LVM se često nalazi na uređaju šifriranom pomoću LUKS-a, tako da jedno otključavanje omogućuje pristup cijeloj grupi volumena.
Ovaj članak obrađuje instalaciju LVM-a na Linuxu, stvaranje fizičkih volumena, grupa volumena i logičkih volumena, promjenu njihovih veličina, rad sa snapshotovima te korištenje thin provisioninga.
Instalacija LVM-a
LVM je prema zadanim postavkama uključen u većinu Linux distribucija. Ako nije instaliran, instalirajte paket lvm2 pomoću upravitelja paketa sustava.
Na Debianu i Ubuntu:
sudo apt-get install lvm2
Na RHEL-u, CentOS Streamu, AlmaLinuxu i Rocky Linuxu:
sudo dnf install lvm2
Stvaranje Physical Volumea
Physical Volume (PV) osnovni je gradivni element LVM-a na najnižoj razini. Može biti cijeli disk (na primjer, /dev/sdb) ili jedna particija (na primjer, /dev/sdb1).
Korištenje cijelog diska kao PV-a pojednostavljuje kasnije operacije promjene veličine jer prethodno nije potrebno povećavati osnovnu particiju. Korištenje particije preporučuje se kada disk također mora sadržavati podatke koji nisu povezani s LVM-om ili kada drugi alati sustava očekuju particijsku tablicu.
Stvorite Physical Volume pomoću pvcreate:
sudo pvcreate /dev/sdb
Zamijenite /dev/sdb putanjom do odgovarajućeg blok uređaja.
Provjerite rezultat pomoću pvdisplay:
sudo pvdisplay
Izlaz prikazuje Physical Volume kojima LVM trenutno upravlja, zajedno s njihovom veličinom i informacijama o Volume Groupu.
Stvaranje Volume Groupa
Volume Group (VG) kombinira jedan ili više Physical Volumea u jedan zajednički spremišni pool. Logical Volume stvaraju se iz tog poola.
Stvorite Volume Group pod nazivom vg0 iz jednog Physical Volumea:
sudo vgcreate vg0 /dev/sdb
Ili istovremeno iz više Physical Volumea:
sudo vgcreate vg0 /dev/sdb /dev/sdc
Provjerite rezultat pomoću vgdisplay:
sudo vgdisplay
Stvaranje Logical Volumea
Logical Volume (LV) sustav vidi kao običan blok uređaj. Možete ga formatirati datotečnim sustavom i montirati.
Stvorite Logical Volume lv0 veličine 10 GB unutar Volume Groupa vg0:
sudo lvcreate -n lv0 -L 10G vg0
Opcija -n određuje naziv Logical Volumea, a -L njegovu veličinu.
Provjerite rezultat pomoću lvdisplay:
sudo lvdisplay
Stvorite datotečni sustav na Logical Volumeu:
sudo mkfs.ext4 /dev/vg0/lv0
Stvorite točku montiranja i montirajte datotečni sustav:
sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0
Novi datotečni sustav sada je dostupan na /mnt/lv0. Kako biste ga automatski montirali pri pokretanju sustava, dodajte odgovarajući unos u /etc/fstab.
LVM svaki Logical Volume izlaže putem dviju ekvivalentnih putanja: /dev/<vg>/<lv> i /dev/mapper/<vg>-<lv>. U gornjem primjeru to su /dev/vg0/lv0 i /dev/mapper/vg0-lv0. Obje putanje upućuju na isti uređaj; alati i konfiguracijske datoteke mogu koristiti bilo koju od njih.
Da biste vidjeli cijelu PV/VG/LV hijerarhiju zajedno s uobičajenim blok uređajima, pokrenite:
lsblk
Promjena veličine volumena
LVM podržava online promjenu veličine na svim razinama: Physical Volume, Volume Group i Logical Volume.
pvresize ažurira prikaz Physical Volumea u LVM-u nakon promjene veličine osnovnog blok uređaja (na primjer, nakon povećanja virtualnog diska u hipervizoru):
sudo pvresize /dev/sdb
vgextend dodaje Physical Volume postojećem Volume Groupu i na taj način povećava njegovu veličinu:
sudo vgextend vg0 /dev/sdc
vgreduce uklanja Physical Volume iz Volume Groupa:
sudo vgreduce vg0 /dev/sdc
lvresize mijenja veličinu Logical Volumea. Na primjer, za dodavanje 5 GB na lv0:
sudo lvresize -L +5G /dev/vg0/lv0
Ili za proširenje Logical Volumea tako da koristi sav slobodni prostor u Volume Groupu:
sudo lvresize -l +100%FREE /dev/vg0/lv0
Obratite pozornost na razliku između -L (veliko slovo) i -l (malo slovo). Velika verzija prihvaća veličinu sa sufiksom jedinice, kao što su M, G ili T. Mala verzija prihvaća broj extenta ili postotak.
Promjena veličine Logical Volumea ne mijenja veličinu datotečnog sustava na njemu. Koristite odgovarajući alat za određeni datotečni sustav. Za ext2, ext3 i ext4:
sudo resize2fs /dev/vg0/lv0
Za XFS pokrenite xfs_growfs nad točkom montiranja datotečnog sustava.
Na podržanim datotečnim sustavima, uključujući ext4 i XFS, lvextend s opcijom -r mijenja veličinu Logical Volumea i datotečnog sustava u jednom koraku:
sudo lvextend -r -L +5G /dev/vg0/lv0
To je najčešći način online povećanja veličine.
Smanjivanje Logical Volumea izvodi se obrnutim redoslijedom: prvo se mora smanjiti datotečni sustav, a tek nakon toga Logical Volume. Ako postupak izvršite obrnutim redoslijedom, osnovni će uređaj biti skraćen dok datotečni sustav i dalje smatra da ima izvornu veličinu, što dovodi do uništenja podataka. Kod ext4 operacija se mora izvršiti offline. Odmontirajte datotečni sustav, pokrenite sudo e2fsck -f /dev/vg0/lv0, smanjite datotečni sustav pomoću sudo resize2fs /dev/vg0/lv0 <new_size>, smanjite Logical Volume na istu veličinu pomoću sudo lvresize -L <new_size> /dev/vg0/lv0, a zatim ponovno montirajte datotečni sustav. XFS uopće ne podržava smanjivanje; jedini način da XFS datotečni sustav učinite manjim jest izraditi sigurnosnu kopiju, stvoriti manji datotečni sustav i vratiti podatke.
Svaka od prethodno navedenih naredbi prihvaća --help za prikaz potpunog popisa opcija.
LVM snapshotovi
Snapshot bilježi stanje Logical Volumea u određenom trenutku. Radi pomoću mehanizma copy-on-write: kako se izvorni Logical Volume mijenja, izmijenjeni blokovi spremaju se u rezervirani prostor snapshota, pa snapshot nastavlja prikazivati izvorno stanje.
Snapshotovi su korisni za izradu sigurnosnih kopija pokrenutog datotečnog sustava koje odgovaraju stanju u trenutku pada sustava te za testiranje promjena koje se mogu poništiti brisanjem snapshota. Sigurnosne kopije usklađene s aplikacijom zahtijevaju dodatnu koordinaciju, primjerice zamrzavanje datotečnog sustava ili privremeno zaustavljanje aplikacije prije izrade snapshota.
Stvaranje snapshota
Stvorite snapshot pomoću lvcreate i opcije -s:
sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume
Ova naredba stvara snapshot pod nazivom myvolume_snap Logical Volumea myvolume u Volume Groupu myvg, uz rezerviranih 1 GB za promjene. Veličinu rezerviranog prostora odredite prema količini podataka za koju se očekuje da će se promijeniti tijekom postojanja snapshota: snapshotovi uglavnom neaktivnih volumena trebaju malo prostora, dok volumeni s mnogo upisa mogu zahtijevati znatan dio izvorne veličine.
Za dugotrajne snapshotove i slučajeve koji uključuju velik broj snapshotova razmotrite thin snapshotove unutar thin poola. Oni prostor dobivaju iz zajedničkog poola prema potrebi umjesto da unaprijed rezerviraju fiksnu količinu, što je obično učinkovitije u pogledu iskorištavanja prostora.
Ako se izvorni Logical Volume promijeni više nego što snapshot može pohraniti, snapshot postaje nevažeći, a podaci koje je zabilježio bit će izgubljeni. Veličina snapshota treba pokriti očekivanu količinu promjena tijekom cijelog razdoblja njegova korištenja.
Korištenje snapshota
Snapshot se može montirati kao bilo koji drugi Logical Volume. Za sigurnosno kopiranje i pregled montirajte ga samo za čitanje, osim ako je pristup za pisanje stvarno potreban:
sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot
Nakon montiranja snapshot se može čitati radi sigurnosnog kopiranja ili pregleda.
Uklanjanje snapshota
Kada snapshot više nije potreban, uklonite ga pomoću lvremove:
sudo lvremove /dev/myvg/myvolume_snap
Uklanjanjem snapshota oslobađa se prostor koji je bio rezerviran za njega. Svi podaci zapisani izravno u snapshot, a ne u izvorni volumen, bit će izgubljeni.
Za vraćanje izvornog volumena u stanje zabilježeno snapshotom koristite lvconvert --merge umjesto lvremove:
sudo lvconvert --merge /dev/myvg/myvolume_snap
Nakon spajanja snapshot se potroši i automatski uklanja. Ako se izvorni volumen trenutačno koristi, spajanje se odgađa do sljedeće aktivacije volumena.
Thin provisioning
Thin pool je posebna vrsta Logical Volumea koja po potrebi dodjeljuje prostor za pohranu. Logical Volumei stvoreni unutar njega (thin volumei) mogu imati deklariranu veličinu koja premašuje stvarno slobodan prostor u poolu, a stvarni prostor troše samo blokovi koji su zapisani.
Ovo se široko koristi u virtualizaciji, gdje mnogi virtualni diskovi dijele jedan zajednički storage pool, ali rijetko svi istodobno dosegnu deklarirani kapacitet.
Stvaranje thin poola
Stvorite thin pool mythinpool veličine 50 GB u Volume Groupu myvg:
sudo lvcreate -L 50G -T -n mythinpool myvg
Opcija -L postavlja veličinu poola, -T govori alatu lvcreate da stvori thin pool, a -n postavlja naziv poola. LVM dodjeljuje pool iz slobodnog prostora Volume Groupa; na kraju naredbe mogu se navesti određeni Physical Volumei ako pool treba biti smješten na određenim uređajima.
Stvaranje thin volumea
Stvorite thin volume mythinvolume veličine 10 GB unutar mythinpool:
sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume
Opcija -V postavlja virtualnu veličinu thin volumea, -T određuje thin pool, a -n postavlja naziv novog volumena.
Korištenje thin volumea
Thin volume koristi se kao i svaki drugi Logical Volume. Na njemu stvorite datotečni sustav:
sudo mkfs.ext4 /dev/myvg/mythinvolume
Nakon toga thin volume može se montirati i koristiti kao običan blok uređaj.
Budući da thin poolovi mogu koristiti overcommit, pratite njihovu stvarnu iskorištenost. Prostor za podatke i prostor za metapodatke mogu se neovisno potrošiti, a oba su kritična: ako thin pool ostane bez prostora za podatke ili metapodatke tijekom zapisivanja u thin volume, operacije zapisivanja na taj volumen počet će neuspješno završavati.
Trenutnu iskorištenost prostora za podatke i metapodatke svih Logical Volumea, uključujući thin poolove, možete provjeriti pomoću lvs:
sudo lvs -o +data_percent,metadata_percent
Kada se data_percent ili metadata_percent približi vrijednosti 100, proširite thin pool pomoću lvextend prije nego što se potpuno popuni.
Referenca naredbi
Uobičajene LVM naredbe grupirane prema razinama.
Physical Volumei:
- pvcreate inicijalizira blok uređaj kao Physical Volume.
- pvdisplay prikazuje detaljne informacije o Physical Volumeima.
- pvs prikazuje sažetu tablicu Physical Volumea.
- pvresize ažurira Physical Volume nakon promjene veličine osnovnog uređaja.
Volume Groupovi:
- vgcreate stvara Volume Group iz jednog ili više Physical Volumea.
- vgextend dodaje Physical Volume u Volume Group.
- vgreduce uklanja Physical Volume iz Volume Groupa.
- vgdisplay prikazuje detaljne informacije o Volume Groupovima.
- vgs prikazuje sažetu tablicu Volume Groupova.
Logical Volumei:
- lvcreate stvara Logical Volume.
- lvextend i lvresize mijenjaju veličinu Logical Volumea.
- lvremove uklanja Logical Volume.
- lvconvert --merge spaja snapshot natrag s izvornim volumenom.
- lvdisplay prikazuje detaljne informacije o Logical Volumeima.
- lvs prikazuje sažetu tablicu Logical Volumea.
Za svakodnevnu upotrebu kratke naredbe za sažetak pvs, vgs i lvs obično su praktičnije od detaljnih varijanti *display. Svaka naredba podržava --help za prikaz potpunog popisa opcija.