Batayan

LVM sa Linux: physical volume, volume group, at logical volume sa praktika

Na-update: · Skillaria.Top

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.

AntasAno itoHalimbawa ng pangalanNilikha ng command
PV (Physical Volume)disk o partition na inihanda para sa LVM/dev/sdb, /dev/sdc1pvcreate
VG (Volume Group)pool na pinagsasama ang isa o higit pang PVdata_vgvgcreate
LV (Logical Volume)volume na pinutol mula sa VG; dito ginagawa ang file system/dev/data_vg/applvcreate

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

GawainCommand
Tingnan ang PV, VG, LVpvs, vgs, lvs
Gumawa ng physical volumepvcreate /dev/sdb
Gumawa ng grupovgcreate data_vg /dev/sdb
Magdagdag ng disk sa grupovgextend data_vg /dev/sdc
Gumawa ng volumelvcreate -n app -L 15G data_vg
Palakihin ang volume at FSlvextend -r -L +5G /dev/data_vg/app
Iunat ang PV pagkatapos palakihin ang diskpvresize /dev/sdb
Snapshotlvcreate -s -n snap -L 2G /dev/data_vg/app
Rollback sa snapshotlvconvert --merge /dev/data_vg/snap
Alisin ang disk sa grupopvmove /dev/sdb, saka vgreduce data_vg /dev/sdb
Burahin ang volumelvremove /dev/data_vg/app

Mga karaniwang pagkakamali

  • Napalaki ang volume pero lumang laki pa rin ang ipinapakita ng df. Nakalimutan ang -r. Patakbuhin ang resize2fs o xfs_growfs.
  • Insufficient free space. Walang libreng extent sa grupo: suriin ang vgs, at magdagdag ng disk gamit ang vgextend o 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.

Pag-aralan ito sa video

Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.

Pumunta sa kurso