LVM sa Linux: physical volume, volume group, at logical volume sa praktika
Ang LVM (Logical Volume Manager) sa Linux ay isang layer sa pagitan ng mga disk at file system: nagiging physical volume (PV) ang mga disk, pinagsasama sa volume group (VG), at mula rito pinuputol ang logical volume (LV) na may kahit anong laki. Pangunahing bentahe: napapalaki ang volume habang tumatakbo gamit ang lvextend -r, nadaragdagan ng bagong disk ang grupo nang walang paghinto ng serbisyo, at may snapshot bago ang mapanganib na operasyon.
Ang LVM (Logical Volume Manager) ay tagapamahala ng mga logical volume sa Linux na naghihiwalay ng mga file system mula sa pisikal na disk. Sa halip na itali ang /var sa partition na /dev/sdb1, inilalagay mo ang mga disk sa isang pinagsasaluhang pool at pumuputol ng mga volume sa kinakailangang laki. Kapag kinulang ang espasyo, lumalaki ang volume sa isang command, nang walang reboot at nang walang paghinto ng serbisyo. Narito ang paliwanag kung paano gumagana ang LVM sa Linux, paano gumawa ng mga volume mula sa simula, palakihin ang mga ito, gumawa ng snapshot, at iwasan ang pagkawala ng datos sa mga karaniwang pagkakamali.
Bakit kailangan ang LVM kung may regular na partition
Ang regular na partition ay tuluy-tuloy na bahagi ng isang disk. Itinatakda ang laki nito sa pag-partition, at napapalaki lang kung may libreng espasyo agad sa likod nito. Kapag naubos ang disk, kailangang bumili ng bago, ilipat ang datos, at isulat muli ang /etc/fstab, habang nakahinto ang serbisyo.
Tatlong problema ang nilulutas ng LVM:
- Nababagong laki. Maaaring palakihin (at para sa ext4, paliitin) ang logical volume anumang oras.
- Pagsasama ng mga disk. Nagiging iisang pool ang ilang pisikal na disk; maaaring nasa dalawang disk nang sabay ang isang volume.
- Snapshot. Agarang kopya ng volume bago ang pag-update, paglilipat ng database, o iba pang mapanganib na operasyon.
Kaya ang LVM ang default ng mga installer ng Ubuntu Server, RHEL, Rocky, at AlmaLinux, at halos palaging ginagamit ito sa mga server ng datos.
Tatlong antas ng LVM: PV, VG, at LV
Tatlong konsepto lang ang batayan ng buong LVM. Madaling paghambingin: ang mga disk ay mga sako ng harina, ang grupo ay ang pinagsasaluhang bodega, at ang logical volume ay ang mga bahaging kinukuha mo mula sa bodega.
| Antas | Ano ito | Halimbawa ng pangalan | Nilikha ng command |
|---|---|---|---|
| PV (Physical Volume) | disk o partition na inihanda para sa LVM | /dev/sdb, /dev/sdc1 | pvcreate |
| VG (Volume Group) | pool na pinagsasama ang isa o higit pang PV | data_vg | vgcreate |
| LV (Logical Volume) | volume na pinutol mula sa VG; dito ginagawa ang file system | /dev/data_vg/app | lvcreate |
Sa loob ng VG, hinahati ang espasyo sa mga extent (PE, physical extents) — mga block na pare-pareho ang laki, karaniwang 4 MiB. Ang logical volume ay isang hanay lang ng mga extent na hindi kailangang magkakatabi at maaaring nasa iba't ibang disk. Kaya madaling palakihin ang volume: idinadagdag ng LVM ang mga libreng extent mula sa kahit saan.
Maa-access ang device ng logical volume sa dalawang magkatumbas na path: /dev/data_vg/app at /dev/mapper/data_vg-app. Sa ilalim, ito ay device-mapper device ng kernel.
Paano tingnan ang mga umiiral na
Siguraduhing naka-install ang package: sa Debian at Ubuntu ito ang lvm2 (sudo apt install lvm2), at nasa default na pag-install ito sa pamilyang RHEL. Para sa pangkalahatang tanaw, may maiikli at detalyadong command:
$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdb data_vg lvm2 a-- <20.00g 0
/dev/sdc data_vg lvm2 a-- <20.00g <10.00g
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
data_vg 2 1 0 wz--n- 39.99g <10.00g
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta%
app data_vg -wi-ao---- 30.00g
Ang mga detalye ay makikita sa pvdisplay, vgdisplay, at lvdisplay. Ang kabuuang larawan kasama ang regular na partition ay makikita sa lsblk: lumilitaw doon ang mga logical volume na may uri na lvm.
$ lsblk /dev/sdb /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdb 8:16 0 20G 0 disk
└─data_vg-app 253:0 0 30G 0 lvm /srv/app
sdc 8:32 0 20G 0 disk
└─data_vg-app 253:0 0 30G 0 lvm /srv/app
Makikita rito na ang volume na app na 30 GB ay nasa dalawang disk na tig-20 GB — hindi ito magagawa sa regular na partition.
LVM mula sa simula: mula sa hilaw na disk hanggang sa naka-mount na volume
Ipagpalagay na may nadagdag na bagong walang lamang disk na /dev/sdb sa server, at kailangan ng volume na 15 GB para sa datos ng application. I-verify ang pangalan ng disk gamit ang lsblk nang dalawang beses: binubura ng lahat ng sumusunod na command ang datos sa tinukoy na device.
Hakbang 1. Gumawa ng physical volume
$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
Maaaring ibigay sa LVM ang buong disk, o gumawa muna ng partition gamit ang fdisk o parted na may uring “Linux LVM”, at ituro iyon (/dev/sdb1). Mas malinaw ang partition sa ibang administrador, at pinipigilan nito ang aksidenteng pag-partition ng disk sa ibabaw ng LVM; sa cloud, mas simple namang palakihin ang buong disk.
Hakbang 2. Gumawa ng volume group
$ sudo vgcreate data_vg /dev/sdb
Volume group "data_vg" successfully created
Hakbang 3. Pumutol ng logical volume
$ sudo lvcreate -n app -L 15G data_vg
Logical volume "app" created.
Itinatakda ng -L ang eksaktong laki, habang ang -l ay laki sa mga extent o porsyento: ang -l 100%FREE ay kukuha ng lahat ng libreng espasyo sa grupo, ang -l 50%VG ay kalahati ng grupo. Mainam na mag-iwan ng libreng espasyo sa VG: maaari itong idagdag sa anumang volume sa susunod, o ilaan sa snapshot.
Hakbang 4. File system at pag-mount
$ sudo mkfs.ext4 /dev/data_vg/app
$ sudo mkdir -p /srv/app
$ sudo mount /dev/data_vg/app /srv/app
$ df -h /srv/app
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/data_vg-app 15G 24K 14G 1% /srv/app
Para maka-mount ang volume pagkatapos ng reboot, magdagdag ng linya sa /etc/fstab. Para sa logical volume, stable ang path na /dev/mapper/..., kaya maaari itong gamitin, o ang UUID mula sa blkid:
/dev/mapper/data_vg-app /srv/app ext4 defaults 0 2
Suriin ang entry gamit ang sudo mount -a bago mag-reboot: ang error sa fstab ay maaaring magdala sa server sa emergency mode.
Paano palakihin ang LVM volume nang walang paghinto ng serbisyo
Ito ang pangunahing dahilan kung bakit gusto ang LVM. Lumalaki ang volume habang naka-mount ang file system, at patuloy na nagsusulat ang application. Nakadepende ang senaryo sa kung may libreng espasyo sa grupo.
Kung may libreng espasyo sa VG
$ sudo vgs data_vg
VG #PV #LV #SN Attr VSize VFree
data_vg 1 1 0 wz--n- <20.00g <5.00g
$ sudo lvextend -r -L +4G /dev/data_vg/app
Size of logical volume data_vg/app changed from 15.00 GiB to 19.00 GiB.
Logical volume data_vg/app successfully resized.
resize2fs 1.47.0
Filesystem at /dev/mapper/data_vg-app is mounted on /srv/app; on-line resizing required
Ang pangunahing flag ay -r (--resizefs): kaagad pagkatapos palakihin ang volume, pinalalaki rin nito ang file system. Kung wala ito, lalaki ang volume pero ipapakita pa rin ng df -h ang dating laki, dahil hindi alam ng file system ang bagong espasyo. Ito ang pinakakaraniwang pagkakamali: sa ganitong kaso, sapat nang patakbuhin nang mano-mano ang resize2fs para sa ext4 o ang xfs_growfs para sa XFS.
$ sudo resize2fs /dev/data_vg/app # ext4, device ang itinuturo
$ sudo xfs_growfs /srv/app # XFS, mount point ang itinuturo
Tandaan ang pagkakaiba: ang -L +4G ay nagdaragdag ng 4 GB, habang ang -L 4G ay nagtatakda ng kabuuang laki na 4 GB. Para ibigay sa volume ang lahat ng natitirang espasyo, gamitin ang -l +100%FREE.
Kung naubos ang espasyo sa VG: magdagdag ng disk
Ikabit ang bagong disk (sa cloud, ikabit ang volume), hanapin ito gamit ang lsblk, at idagdag sa grupo:
$ sudo pvcreate /dev/sdc
$ sudo vgextend data_vg /dev/sdc
Volume group "data_vg" successfully extended
$ sudo lvextend -r -l +100%FREE /dev/data_vg/app
Tatlong command, zero downtime. Nasa dalawang disk na ngayon ang file system, at hindi ito napapansin ng application.
Kung pinalaki ang disk sa cloud
Sa cloud, kadalasang mas madaling palakihin ang umiiral na disk kaysa magdagdag ng bago. Makikita ng kernel ang bagong laki ng device, at kailangang iunat ang physical volume gamit ang pvresize:
$ sudo pvresize /dev/sdb
Physical volume "/dev/sdb" changed
$ sudo lvextend -r -l +100%FREE /dev/data_vg/app
Kung ang PV ay ginawa sa partition (/dev/sdb1), palakihin muna ang partition, halimbawa gamit ang growpart /dev/sdb 1 mula sa package na cloud-guest-utils, at saka lang ang pvresize /dev/sdb1.
Maaari bang paliitin ang LVM volume
Maaari, pero hindi para sa lahat ng file system at hindi habang tumatakbo. Hindi kayang paliitin ng XFS kailanman — tanging muling paglikha na may paglilipat ng datos ang paraan. Kayang paliitin ang ext4, pero kailangang naka-unmount ito:
$ sudo umount /srv/app
$ sudo lvreduce -r -L 10G /dev/data_vg/app
Gamit ang -r, sinusuri muna ng LVM ang file system (e2fsck) at pinaliliit ito bago paliitin ang volume. Kung walang -r, madaling maputol ang volume na mas maliit kaysa sa file system, at masisira ang datos. Bago magpaliit, laging gumawa ng backup.
LVM snapshot: kopya ng volume bago ang mapanganib na operasyon
Ang snapshot ay agarang kopya ng logical volume. Nabubuo ito sa loob ng ilang bahagi ng segundo at hindi kumokopya ng datos: gumagana ang LVM sa prinsipyong copy-on-write, at isinusulat lang sa snapshot ang mga block na nagbabago sa orihinal na volume pagkatapos ng paglikha nito. Kaya kailangan ng snapshot ng espasyo sa VG para lang sa mga pagbabago, hindi para sa buong laki ng volume.
$ sudo lvcreate -s -n app_before_upgrade -L 2G /dev/data_vg/app
Logical volume "app_before_upgrade" created.
$ sudo lvs data_vg
LV VG Attr LSize Origin Data%
app data_vg owi-aos--- 19.00g
app_before_upgrade data_vg swi-a-s--- 2.00g app 0.01
Ipinapakita ng column na Data% kung gaano na napuno ang imbakan ng mga pagbabago. Kapag umabot ito sa 100%, magiging invalid ang klasikong snapshot at ang magagawa na lang ay burahin ito. Piliin ang laki na may sapat na reserba para sa inaasahang dami ng pagbabago, at bantayan ang mahahabang snapshot gamit ang lvs, o palakihin ang mga ito gamit ang lvextend.
Paano mag-rollback sa snapshot
Kung pumalpak ang update, ibalik ang volume sa estado noong ginawa ang snapshot:
$ sudo umount /srv/app
$ sudo lvconvert --merge /dev/data_vg/app_before_upgrade
Merging of volume data_vg/app_before_upgrade started.
$ sudo mount /srv/app
Pagkatapos ng merge, nawawala ang snapshot. Kung hindi ma-unmount ang volume (halimbawa, root ng sistema ito), maghihintay ang merge hanggang sa susunod na activation ng volume, ibig sabihin, hanggang sa reboot.
Kung maayos ang lahat
Burahin lang ang snapshot para hindi ito magpabagal sa pagsulat at hindi nito sakupin ang espasyo:
$ sudo lvremove /dev/data_vg/app_before_upgrade
Kapaki-pakinabang na i-mount ang snapshot nang read-only para kumuha ng pare-parehong backup ng tumatakbong sistema: mount -o ro, at kopyahin gamit ang rsync o tar. Para sa XFS, idagdag ang opsyong nouuid, kung hindi ay tatanggi ang pag-mount dahil magkapareho ang UUID sa orihinal.
LVM at RAID: huwag pagsamahin ang mga layunin
Hindi pinoprotektahan ng LVM ang sarili nito laban sa pagkasira ng disk. Kapag nakakalat ang volume sa dalawang disk at nasira ang isa, mawawala ang buong volume, hindi kalahati lang nito. Para sa fault tolerance, nilalagay sa ilalim ng LVM ang RAID (mdadm), o ginagamit ang built-in na mirror mode ng LVM (lvcreate --type raid1 -m 1).
Hindi rin pumapalit sa backup ang RAID at snapshot. Nasa parehong disk ang snapshot kasama ng orihinal, at tapat na sinasalamin ng RAID maging ang aksidenteng rm -rf. Kailangan ng hiwalay na kopya sa ibang storage.
Cheat sheet ng mga command ng LVM
| Gawain | Command |
|---|---|
| Tingnan ang PV, VG, LV | pvs, vgs, lvs |
| Gumawa ng physical volume | pvcreate /dev/sdb |
| Gumawa ng grupo | vgcreate data_vg /dev/sdb |
| Magdagdag ng disk sa grupo | vgextend data_vg /dev/sdc |
| Gumawa ng volume | lvcreate -n app -L 15G data_vg |
| Palakihin ang volume at FS | lvextend -r -L +5G /dev/data_vg/app |
| Iunat ang PV pagkatapos palakihin ang disk | pvresize /dev/sdb |
| Snapshot | lvcreate -s -n snap -L 2G /dev/data_vg/app |
| Rollback sa snapshot | lvconvert --merge /dev/data_vg/snap |
| Alisin ang disk sa grupo | pvmove /dev/sdb, saka vgreduce data_vg /dev/sdb |
| Burahin ang volume | lvremove /dev/data_vg/app |
Mga karaniwang pagkakamali
- Napalaki ang volume pero lumang laki pa rin ang ipinapakita ng df. Nakalimutan ang
-r. Patakbuhin angresize2fsoxfs_growfs. - Insufficient free space. Walang libreng extent sa grupo: suriin ang
vgs, at magdagdag ng disk gamit angvgextendo palakihin ang PV. - Device /dev/sdc excluded by a filter. May natirang lumang partition table o signature ng file system ang disk. Kung hindi na kailangan ang datos doon, linisin gamit ang
wipefs -a /dev/sdc. - Naging Invalid ang snapshot. Napuno sa 100% ang imbakan ng mga pagbabago. Hindi na ito mababawi — burahin na lang, at sa susunod, maglaan ng mas maraming espasyo.
Buod
Ang LVM sa Linux ay tatlong layer: ang physical volume (PV) ay ipinapasok sa grupo (VG), at mula roon pinuputol ang logical volume (LV). Nagbibigay ito ng mga bagay na wala sa regular na partition: pagpapalaki ng volume habang tumatakbo gamit ang lvextend -r, pagdaragdag ng disk nang walang downtime, at snapshot bago ang mapanganib na pagbabago. Tandaan na hindi nito pinapalitan ang RAID o ang mga backup. Ang pag-partition ng disk, LVM, RAID, at quota ay tinalakay nang praktikal sa aralin ng kurso sa Linux.
Mga madalas itanong
Maaari bang ilipat sa LVM ang umiiral nang partition na may datos?
Hindi diretso: binubura ng pvcreate ang simula ng device. Gumawa ng LVM sa ibang disk, kopyahin ang datos gamit ang rsync, ayusin ang fstab, at saka lang palayain ang lumang partition.
Pinapabagal ba ng LVM ang disk?
Kapag walang snapshot, halos hindi napapansin ang overhead ng device-mapper. Ang aktibong classic snapshot ay nagpapabagal sa pagsulat sa orihinal na volume dahil sa copy-on-write, kaya huwag itong panatilihin nang ilang linggo.
Kailangan ba ang LVM sa home computer o laptop?
Hindi kinakailangan, pero kapaki-pakinabang kapag naka-encrypt ang disk (LUKS na may LVM sa loob), at kung gusto mong baguhin ang laki ng partition nang hindi nire-repartition. Sa mga server ng datos, halos pamantayan na ang LVM.
Ano ang thin provisioning sa LVM?
Mga thin volume ito: gumagawa ka ng pool (lvcreate --type thin-pool), at kumukuha lang ng aktwal na espasyo ang mga volume sa loob nito habang may naisusulat na datos. Maaaring mag-alok ng mas malaki kaysa sa pisikal na espasyo, pero kailangang bantayan ang pagpuno ng pool.
Paano alisin ang disk sa volume group nang hindi nawawala ang datos?
Ilipat ang mga extent mula rito sa ibang disk ng grupo gamit ang pvmove /dev/sdb (kailangan ng sapat na libreng espasyo), saka patakbuhin ang vgreduce data_vg /dev/sdb at pvremove /dev/sdb.
Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.
Pumunta sa kurso