Delo z LVM
LVM (Logical Volume Manager) je sistem za upravljanje diskov, ki doda abstrakcijsko plast nad fizičnim pomnilnikom. Omogoča prilagodljivo dodeljevanje prostora na disku, spreminjanje velikosti med delovanjem sistema in ustvarjanje varnostnih kopij na podlagi posnetkov. Pogosto se uporablja kot pomnilniška plast za virtualizacijo. V šifriranih sistemih je LVM pogosto nameščen na napravi, šifrirani z LUKS, tako da eno odklepanje omogoči dostop do celotne skupine nosilcev.
Ta članek zajema namestitev LVM v Linuxu, ustvarjanje fizičnih nosilcev, skupin nosilcev in logičnih nosilcev, spreminjanje njihovih velikosti, delo s posnetki ter uporabo thin provisioning.
Namestitev LVM
LVM je privzeto vključen v večino distribucij Linuxa. Če ni nameščen, namestite paket lvm2 s sistemskim upravljalnikom paketov.
V Debianu in Ubuntuju:
sudo apt-get install lvm2
V RHEL, CentOS Stream, AlmaLinux in Rocky Linux:
sudo dnf install lvm2
Ustvarjanje fizičnega nosilca
Fizični nosilec (PV) je osnovni gradnik LVM na najnižji ravni. Lahko je celoten disk (na primer /dev/sdb) ali posamezna particija (na primer /dev/sdb1).
Uporaba celotnega diska kot PV poenostavi poznejše spreminjanje velikosti, saj pred tem ni treba povečati osnovne particije. Uporaba particije je priporočljiva, kadar mora disk gostiti tudi podatke, ki niso povezani z LVM, ali kadar druga sistemska orodja pričakujejo particijsko tabelo.
Ustvarite fizični nosilec z ukazom pvcreate:
sudo pvcreate /dev/sdb
/dev/sdb zamenjajte s potjo do vaše blokovne naprave.
Rezultat preverite z ukazom pvdisplay:
sudo pvdisplay
Izpis vsebuje seznam fizičnih nosilcev, ki jih trenutno upravlja LVM, skupaj z njihovo velikostjo in informacijami o skupini nosilcev.
Ustvarjanje skupine nosilcev
Skupina nosilcev (VG) združi enega ali več fizičnih nosilcev v skupen prostor za shranjevanje. Iz tega prostora se ustvarijo logični nosilci.
Ustvarite skupino nosilcev z imenom vg0 iz enega fizičnega nosilca:
sudo vgcreate vg0 /dev/sdb
Ali iz več fizičnih nosilcev hkrati:
sudo vgcreate vg0 /dev/sdb /dev/sdc
Rezultat preverite z ukazom vgdisplay:
sudo vgdisplay
Ustvarjanje logičnega nosilca
Logični nosilec (LV) se sistemu prikaže kot običajna blokovna naprava. Na njem lahko ustvarite datotečni sistem in ga priklopite.
Ustvarite logični nosilec lv0 velikosti 10 GB znotraj skupine nosilcev vg0:
sudo lvcreate -n lv0 -L 10G vg0
Zastavica -n določa ime logičnega nosilca, -L pa njegovo velikost.
Rezultat preverite z ukazom lvdisplay:
sudo lvdisplay
Ustvarite datotečni sistem na logičnem nosilcu:
sudo mkfs.ext4 /dev/vg0/lv0
Ustvarite točko priklopa in priklopite datotečni sistem:
sudo mkdir -p /mnt/lv0 sudo mount /dev/vg0/lv0 /mnt/lv0
Novi datotečni sistem je zdaj na voljo v /mnt/lv0. Če ga želite samodejno priklopiti ob zagonu sistema, dodajte ustrezen vnos v /etc/fstab.
LVM vsak logični nosilec omogoča prek dveh enakovrednih poti: /dev/<vg>/<lv> in /dev/mapper/<vg>-<lv>. V zgornjem primeru sta to /dev/vg0/lv0 in /dev/mapper/vg0-lv0. Obe poti kažeta na isto napravo; orodja in konfiguracijske datoteke lahko uporabljajo katero koli od njiju.
Če želite videti celotno hierarhijo PV/VG/LV skupaj z običajnimi blokovnimi napravami, zaženite:
lsblk
Spreminjanje velikosti nosilcev
LVM podpira spreminjanje velikosti med delovanjem na vseh ravneh: fizičnih nosilcev, skupin nosilcev in logičnih nosilcev.
pvresize posodobi pogled LVM na fizični nosilec, potem ko je bila spremenjena velikost osnovne blokovne naprave (na primer po povečanju navideznega diska v hipervizorju):
sudo pvresize /dev/sdb
vgextend doda fizični nosilec v obstoječo skupino nosilcev in s tem poveča njeno velikost:
sudo vgextend vg0 /dev/sdc
vgreduce odstrani fizični nosilec iz skupine nosilcev:
sudo vgreduce vg0 /dev/sdc
lvresize spremeni velikost logičnega nosilca. Če želite na primer dodati 5 GB k lv0:
sudo lvresize -L +5G /dev/vg0/lv0
Ali razširiti logični nosilec tako, da uporabi ves prosti prostor v skupini nosilcev:
sudo lvresize -l +100%FREE /dev/vg0/lv0
Upoštevajte razliko med -L (velika črka) in -l (mala črka). Različica z veliko črko sprejme velikost s pripono enote, kot so M, G ali T. Različica z malo črko sprejme število extentov ali odstotek.
Spreminjanje velikosti logičnega nosilca ne spremeni velikosti datotečnega sistema na njem. Uporabite ustrezno orodje za posamezni datotečni sistem. Za ext2, ext3 in ext4:
sudo resize2fs /dev/vg0/lv0
Za XFS zaženite xfs_growfs za točko priklopa datotečnega sistema.
Pri podprtih datotečnih sistemih, vključno z ext4 in XFS, lvextend z zastavico -r spremeni velikost logičnega nosilca in datotečnega sistema v enem koraku:
sudo lvextend -r -L +5G /dev/vg0/lv0
To je najpogostejši način spletnega povečanja velikosti.
Zmanjševanje logičnega nosilca poteka v obratnem vrstnem redu: najprej je treba zmanjšati datotečni sistem in šele nato logični nosilec. Če vrstni red obrnete, se osnovna naprava skrajša, medtem ko datotečni sistem še vedno meni, da ima prvotno velikost, kar uniči podatke. Pri ext4 je treba operacijo izvesti brez povezave. Odklopite datotečni sistem, zaženite sudo e2fsck -f /dev/vg0/lv0, zmanjšajte datotečni sistem z ukazom sudo resize2fs /dev/vg0/lv0 <new_size>, zmanjšajte logični nosilec na enako velikost z ukazom sudo lvresize -L <new_size> /dev/vg0/lv0 in nato datotečni sistem ponovno priklopite. XFS zmanjševanja sploh ne podpira; edini način za zmanjšanje datotečnega sistema XFS je izdelava varnostne kopije, ustvarjanje manjšega datotečnega sistema in obnovitev podatkov.
Vsak zgornji ukaz podpira možnost --help, ki prikaže celoten seznam možnosti.
Posnetki LVM
Posnetek zajame stanje logičnega nosilca v določenem trenutku. Deluje po mehanizmu copy-on-write: ko se prvotni logični nosilec spremeni, se spremenjeni bloki shranijo v rezerviran prostor posnetka, zato posnetek še naprej prikazuje prvotno stanje.
Posnetki so uporabni za ustvarjanje varnostnih kopij delujočega datotečnega sistema, skladnih z morebitnim izpadom, in za testiranje sprememb, ki jih je mogoče razveljaviti z odstranitvijo posnetka. Varnostne kopije, skladne z aplikacijo, zahtevajo dodatno usklajevanje, na primer zamrznitev datotečnega sistema ali začasno ustavitev aplikacije pred izdelavo posnetka.
Ustvarjanje posnetka
Ustvarite posnetek z ukazom lvcreate in zastavico -s:
sudo lvcreate -L 1G -s -n myvolume_snap /dev/myvg/myvolume
To ustvari posnetek z imenom myvolume_snap logičnega nosilca myvolume v skupini nosilcev myvg in rezervira 1 GB za spremembe. Velikost rezerviranega prostora izberite glede na količino podatkov, za katero pričakujete, da se bo spremenila v času obstoja posnetka: posnetki večinoma nedejavnih nosilcev potrebujejo malo prostora, medtem ko lahko pogosto zapisovani nosilci zahtevajo znaten delež prvotne velikosti.
Pri dolgotrajnih posnetkih in primerih uporabe z velikim številom posnetkov razmislite o uporabi thin posnetkov znotraj thin poola. Prostor pridobivajo iz skupnega poola po potrebi, namesto da bi vnaprej rezervirali fiksno količino prostora, kar je običajno učinkovitejše z vidika porabe prostora.
Če se prvotni logični nosilec spremeni bolj, kot lahko posnetek shrani, posnetek postane neveljaven in podatki, ki jih je zajel, se izgubijo. Velikost posnetka določite tako, da bo pokrila pričakovano količino sprememb v času njegovega obstoja.
Uporaba posnetka
Posnetek je mogoče priklopiti kot kateri koli drug logični nosilec. Za postopke varnostnega kopiranja in pregledovanja ga priklopite samo za branje, razen če je dostop za pisanje dejansko potreben:
sudo mkdir -p /mnt/snapshot sudo mount -o ro /dev/myvg/myvolume_snap /mnt/snapshot
Ko je posnetek priklopljen, ga lahko berete za varnostno kopiranje ali pregledovanje.
Odstranjevanje posnetka
Ko posnetek ni več potreben, ga odstranite z ukazom lvremove:
sudo lvremove /dev/myvg/myvolume_snap
Odstranitev posnetka sprosti prostor, ki ga je rezerviral. Vsi podatki, zapisani neposredno v posnetek in ne v izvirni nosilec, se izgubijo.
Če želite prvotni nosilec povrniti v stanje, ki ga je zajel posnetek, uporabite lvconvert --merge namesto lvremove:
sudo lvconvert --merge /dev/myvg/myvolume_snap
Po združitvi se posnetek porabi in samodejno odstrani. Če je prvotni nosilec trenutno v uporabi, se združitev odloži do njegove naslednje aktivacije.
Thin provisioning
Thin pool je posebna vrsta logičnega nosilca, ki prostor za shranjevanje dodeljuje po potrebi. Logične nosilce, ustvarjene znotraj njega (thin volume), je mogoče ustvariti z navedeno velikostjo, ki presega dejansko prosti prostor v poolu, pri čemer dejanski prostor porabljajo le zapisani bloki.
To se pogosto uporablja pri virtualizaciji, kjer več navideznih diskov uporablja en skupni pomnilniški pool, vendar le redko vsi hkrati dosežejo svojo navedeno zmogljivost.
Ustvarjanje thin poola
Ustvarite thin pool mythinpool velikosti 50 GB v skupini nosilcev myvg:
sudo lvcreate -L 50G -T -n mythinpool myvg
Zastavica -L določa velikost poola, -T ukaže programu lvcreate, naj ustvari thin pool, -n pa določa njegovo ime. LVM pool dodeli iz prostega prostora skupine nosilcev; na koncu ukaza lahko navedete določene fizične nosilce, če mora biti pool nameščen na določenih napravah.
Ustvarjanje thin volume
Ustvarite thin volume mythinvolume velikosti 10 GB znotraj mythinpool:
sudo lvcreate -V 10G -T myvg/mythinpool -n mythinvolume
Zastavica -V določa navidezno velikost thin volume, -T določa thin pool, -n pa določa ime novega nosilca.
Uporaba thin volume
Thin volume se uporablja enako kot kateri koli drug logični nosilec. Na njem ustvarite datotečni sistem:
sudo mkfs.ext4 /dev/myvg/mythinvolume
Nato lahko thin volume priklopite in uporabljate kot običajno blokovno napravo.
Ker je thin pool mogoče nadomestno dodeljevati, spremljajte njegovo dejansko uporabo. Tako prostor za podatke kot prostor za metapodatke se lahko izčrpata neodvisno drug od drugega in oba sta kritična: če thin pool med pisanjem v thin volume zmanjka prostora za podatke ali metapodatke, bodo operacije pisanja v ta nosilec začele odpovedovati.
Trenutno porabo podatkovnega prostora in prostora za metapodatke vseh logičnih nosilcev, vključno s thin pooli, lahko preverite z ukazom lvs:
sudo lvs -o +data_percent,metadata_percent
Ko se data_percent ali metadata_percent približuje 100, razširite thin pool z ukazom lvextend, preden se popolnoma zapolni.
Referenca ukazov
Pogosti ukazi LVM, razvrščeni po ravneh.
Fizični nosilci:
- pvcreate inicializira blokovno napravo kot fizični nosilec.
- pvdisplay prikaže podrobne informacije o fizičnih nosilcih.
- pvs prikaže zgoščeno preglednico fizičnih nosilcev.
- pvresize posodobi fizični nosilec po spremembi velikosti osnovne naprave.
Skupine nosilcev:
- vgcreate ustvari skupino nosilcev iz enega ali več fizičnih nosilcev.
- vgextend doda fizični nosilec v skupino nosilcev.
- vgreduce odstrani fizični nosilec iz skupine nosilcev.
- vgdisplay prikaže podrobne informacije o skupinah nosilcev.
- vgs prikaže zgoščeno preglednico skupin nosilcev.
Logični nosilci:
- lvcreate ustvari logični nosilec.
- lvextend in lvresize spremenita velikost logičnega nosilca.
- lvremove odstrani logični nosilec.
- lvconvert --merge združi posnetek nazaj z njegovim izvornim nosilcem.
- lvdisplay prikaže podrobne informacije o logičnih nosilcih.
- lvs prikaže zgoščeno preglednico logičnih nosilcev.
Za vsakodnevno uporabo so kratki zbirni ukazi pvs, vgs in lvs običajno priročnejši od podrobnih različic *display. Vsak ukaz podpira možnost --help, ki prikaže celoten seznam možnosti.