Misingi

LVM kwenye Linux: volume za kimwili, vikundi na volume za kimantiki kwa vitendo

Imesasishwa: · Skillaria.Top

LVM (Logical Volume Manager) kwenye Linux ni safu kati ya diski na mifumo ya faili: diski hugeuka kuwa volume za kimwili (PV), huunganishwa kuwa kikundi cha volume (VG), na kutoka kwake hukatwa volume za kimantiki (LV) za ukubwa wowote. Faida kubwa ni kupanua volume papo hapo kwa lvextend -r, kuongeza diski kwenye kikundi bila kusimamisha huduma, na kutengeneza snapshot kabla ya operesheni hatari.

LVM (Logical Volume Manager) ni meneja wa volume za kimantiki kwenye Linux, anayetenganisha mifumo ya faili na diski halisi. Badala ya kufunga /var kwenye sehemu /dev/sdb1, unakusanya diski kwenye bwawa moja la pamoja na kukata kutoka humo volume za ukubwa unaohitajika. Nafasi ikiisha, volume inakua kwa amri moja, bila kuwasha upya na bila kusimamisha huduma. Hapa chini tutaangalia jinsi LVM inavyofanya kazi kwenye Linux, jinsi ya kuunda volume kutoka mwanzo, kuzipanua, kutengeneza snapshot, na kutopoteza data kwa makosa ya kawaida.

Kwa nini LVM inahitajika wakati kuna sehemu za kawaida

Sehemu ya kawaida ni kipande kinachoendelea cha diski moja. Ukubwa wake unawekwa wakati wa kugawanya, na unaweza kuongezeka tu ikiwa kuna nafasi tupu moja kwa moja nyuma yake. Diski ikiisha, inabidi ununue mpya, uhamishe data na uandike upya /etc/fstab, na huduma inasimama wakati wote huo.

LVM inatatua mambo matatu:

  • Ukubwa unaonyumbulika. Volume ya kimantiki inaweza kuongezwa (na kwa ext4 pia kupunguzwa) wakati wowote.
  • Kuunganisha diski. Diski kadhaa halisi zinakuwa bwawa moja; volume moja inaweza kukaa kwenye diski mbili kwa wakati mmoja.
  • Snapshots. Picha ya papo hapo ya volume kabla ya sasisho, uhamishaji wa hifadhidata au operesheni nyingine hatari.

Ndiyo sababu wasakinishaji wa Ubuntu Server, RHEL, Rocky na AlmaLinux hupendekeza LVM kwa chaguo-msingi, na kwenye seva zenye data karibu kila mara huiweka.

Ngazi tatu za LVM: PV, VG na LV

Mantiki yote ya LVM inafupishwa katika dhana tatu. Mfano rahisi: diski ni mifuko ya unga, kikundi ni ghala la pamoja, na volume za kimantiki ni sehemu unazopima kutoka ghalani.

NgaziNi niniMfano wa jinaHuundwa na amri
PV (Physical Volume)diski au sehemu iliyoandaliwa kwa LVM/dev/sdb, /dev/sdc1pvcreate
VG (Volume Group)bwawa linalounganisha PV moja au zaididata_vgvgcreate
LV (Logical Volume)volume iliyokatwa kutoka VG; mfumo wa faili huwekwa juu yake/dev/data_vg/applvcreate

Ndani ya VG nafasi imegawanywa katika extents (PE, physical extents) — vipande vya ukubwa usiobadilika, kwa chaguo-msingi MiB 4. Volume ya kimantiki ni seti tu ya extents, ambazo hazilazimiki kufuatana na zinaweza kukaa kwenye diski tofauti. Ndiyo maana volume ni rahisi kupanua: LVM huongeza extents tupu kutoka popote.

Kifaa cha volume ya kimantiki kinapatikana kwa njia mbili sawa: /dev/data_vg/app na /dev/mapper/data_vg-app. Chini ya pazia ni kifaa cha device-mapper cha kernel.

Kuona kilichopo tayari

Kwanza hakikisha kifurushi kimewekwa: kwenye Debian na Ubuntu ni lvm2 (sudo apt install lvm2), kwenye familia ya RHEL kipo tayari. Kwa muhtasari kuna amri fupi na ndefu:

$ 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

Maelezo zaidi yanatolewa na pvdisplay, vgdisplay na lvdisplay. Picha kamili pamoja na sehemu za kawaida inatoa lsblk: volume za kimantiki zinaonekana humo na aina 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

Hapa unaona kwamba volume ya app yenye GB 30 inakaa kwenye diski mbili za GB 20 kila moja — kwa sehemu ya kawaida hilo haliwezekani.

LVM kutoka mwanzo: kutoka diski tupu hadi volume iliyowekwa

Tuseme diski tupu /dev/sdb imeongezwa kwenye seva, na programu inahitaji volume ya GB 15 kwa data zake. Kagua jina la diski kwa lsblk mara mbili: amri zote hapa chini zinafuta data kwenye kifaa kilichotajwa.

Hatua ya 1. Kuunda volume ya kimwili

$ sudo pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.

Unaweza kumpa LVM diski nzima, au kwanza kutengeneza sehemu kwa fdisk au parted yenye aina «Linux LVM» na kuitaja (/dev/sdb1). Sehemu ni wazi zaidi kwa wasimamizi wengine na inazuia kugawanya diski kimakosa juu ya LVM; diski nzima ni rahisi kupanua kwenye wingu.

Hatua ya 2. Kuunda kikundi cha volume

$ sudo vgcreate data_vg /dev/sdb
  Volume group "data_vg" successfully created

Hatua ya 3. Kukata volume ya kimantiki

$ sudo lvcreate -n app -L 15G data_vg
  Logical volume "app" created.

Bendera -L huweka ukubwa kamili, -l — ukubwa kwa extents au asilimia: -l 100%FREE inachukua nafasi yote tupu ya kikundi, -l 50%VG — nusu ya kikundi. Ni desturi nzuri kuacha akiba tupu kwenye VG: baadaye unaweza kuiongeza kwenye volume yoyote au kuipa snapshot.

Hatua ya 4. Mfumo wa faili na kuweka

$ 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

Ili volume iwekwe baada ya kuwasha upya, ongeza mstari kwenye /etc/fstab. Kwa volume za kimantiki njia /dev/mapper/... ni thabiti, kwa hiyo unaweza kuitumia au UUID kutoka blkid:

/dev/mapper/data_vg-app  /srv/app  ext4  defaults  0 2

Angalia kuingizwa kwa amri sudo mount -a kabla ya kuwasha upya: kosa kwenye fstab linaweza kuacha seva katika hali ya dharura.

Jinsi ya kupanua volume ya LVM bila kusimamisha huduma

Hii ndiyo sababu kuu ya kupenda LVM. Volume inakua juu ya mfumo wa faili uliowekwa, na programu inaendelea kuandika data. Mbinu inategemea kama kuna nafasi tupu kwenye kikundi.

Kama kuna nafasi tupu kwenye 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

Bendera muhimu ni -r (--resizefs): mara baada ya kuongeza volume, pia hupanua mfumo wa faili. Bila hiyo volume itakuwa kubwa, lakini df -h itaonyesha ukubwa wa zamani, kwa sababu mfumo wa faili haujui nafasi mpya. Hili ndilo kosa la kawaida zaidi: ikitokea hivyo, inatosha kuendesha resize2fs kwa ext4 au xfs_growfs kwa XFS kwa mkono.

$ sudo resize2fs /dev/data_vg/app      # ext4, hutajwa kifaa
$ sudo xfs_growfs /srv/app             # XFS, hutajwa sehemu ya kuwekea

Zingatia tofauti: -L +4G huongeza GB 4, na -L 4G huweka jumla ya GB 4. Ili kumpa volume nafasi yote iliyobaki, tumia -l +100%FREE.

Kama nafasi kwenye VG imeisha: kuongeza diski

Unganisha diski mpya (kwenye wingu — ambatisha volume), itambue kwa lsblk na uiongeze kwenye kikundi:

$ 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

Amri tatu, bila muda wowote wa kutofanya kazi. Sasa mfumo wa faili unakaa kwenye diski mbili, na programu haioni tofauti.

Kama diski imekuzwa kwenye wingu

Kwenye wingu mara nyingi ni rahisi zaidi kutoongeza diski, bali kukuza iliyopo. Kisha kernel itaona ukubwa mpya wa kifaa, na volume ya kimwili inapaswa kunyooshwa kwa pvresize:

$ sudo pvresize /dev/sdb
  Physical volume "/dev/sdb" changed
$ sudo lvextend -r -l +100%FREE /dev/data_vg/app

Ikiwa PV imeundwa kwenye sehemu (/dev/sdb1), kwanza panua sehemu, kwa mfano kwa zana ya growpart /dev/sdb 1 kutoka kifurushi cha cloud-guest-utils, na ndipo pvresize /dev/sdb1.

Je, volume ya LVM inaweza kupunguzwa

Inaweza, lakini si kwa mifumo yote ya faili na si papo hapo. XFS haiwezi kupunguzwa kabisa — inaweza tu kuundwa upya na uhamishaji wa data. Ext4 hupunguzwa, lakini ikiwa imetolewa tu:

$ sudo umount /srv/app
$ sudo lvreduce -r -L 10G /dev/data_vg/app

Kwa bendera -r LVM yenyewe itakagua mfumo wa faili (e2fsck) na kuubana kabla ya kupunguza volume. Bila -r ni rahisi kukata volume ndogo kuliko mfumo wa faili, na kuharibu data. Kabla ya kupunguza, fanya nakala rudufu kila wakati.

Snapshots za LVM: picha ya volume kabla ya operesheni hatari

Snapshot ni picha ya papo hapo ya volume ya kimantiki. Inaundwa ndani ya sehemu ya sekunde na hainakili data yote: LVM inafanya kazi kwa kanuni ya copy-on-write na huhifadhi kwenye snapshot tu vizuizi vinavyobadilika kwenye volume ya asili baada ya kuundwa kwake. Kwa hiyo snapshot inahitaji nafasi kwenye VG kwa mabadiliko tu, si kwa ukubwa wote wa 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

Safu ya Data% inaonyesha kiasi cha hifadhi ya mabadiliko kilichojazwa. Ikifikia 100%, snapshot ya kawaida inakuwa batili na itabaki kufutwa tu. Chagua ukubwa kwa akiba ya mabadiliko yanayotarajiwa, na fuatilia snapshots ndefu kwa lvs, au ziongeze kwa lvextend.

Jinsi ya kurudi nyuma kwa snapshot

Ikiwa sasisho limeenda vibaya, rudisha volume kwenye hali ya wakati wa 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

Baada ya kuunganishwa, snapshot inatoweka. Ikiwa volume haiwezi kutolewa (kwa mfano ni mzizi wa mfumo), kuunganisha kutaahirishwa hadi volume itakapowashwa tena, yaani hadi kuwasha upya.

Ikiwa kila kitu kimeenda vizuri

Snapshot inafutwa tu, ili isipunguze kasi ya uandishi na isichukue nafasi:

$ sudo lvremove /dev/data_vg/app_before_upgrade

Snapshot ni rahisi kuweka kwa kusoma tu, ili kuchukua nakala rudufu thabiti ya mfumo unaofanya kazi: mount -o ro na kunakili kwa rsync au tar. Kwa XFS ongeza chaguo nouuid, vinginevyo kuweka kutakataliwa kwa sababu UUID inafanana na ya asili.

LVM na RAID: usichanganye kazi

LVM peke yake haikulindi dhidi ya kuharibika kwa diski. Ikiwa volume imeenea kwenye diski mbili na moja imekufa, volume nzima inapotea, si nusu yake. Kwa ustahimilivu wa kushindwa chini ya LVM huwekwa RAID (mdadm), au hutumika hali ya kioo (mirror) iliyojengwa ndani ya LVM (lvcreate --type raid1 -m 1).

Na RAID wala snapshots hazibadilishi nakala rudufu. Snapshot iko kwenye diski zilezile na asili, na RAID huakisi kwa utii hata rm -rf ya kubahatisha. Unahitaji nakala tofauti kwenye kifaa kingine.

Karatasi ya kudanganya ya amri za LVM

KaziAmri
Muhtasari wa PV, VG, LVpvs, vgs, lvs
Kuunda volume ya kimwilipvcreate /dev/sdb
Kuunda kikundivgcreate data_vg /dev/sdb
Kuongeza diski kwenye kikundivgextend data_vg /dev/sdc
Kuunda volumelvcreate -n app -L 15G data_vg
Kupanua volume na mfumo wa faililvextend -r -L +5G /dev/data_vg/app
Kunyoosha PV baada ya kukuza diskipvresize /dev/sdb
Snapshotlvcreate -s -n snap -L 2G /dev/data_vg/app
Kurudi kwenye snapshotlvconvert --merge /dev/data_vg/snap
Kuondoa diski kwenye kikundipvmove /dev/sdb, kisha vgreduce data_vg /dev/sdb
Kufuta volumelvremove /dev/data_vg/app

Makosa ya kawaida

  • Volume imepanuliwa, lakini df inaonyesha ukubwa wa zamani. Umesahau -r. Endesha resize2fs au xfs_growfs.
  • Insufficient free space. Kwenye kikundi hakuna extents tupu: angalia vgs na uongeze diski kwa vgextend au unyooshe PV.
  • Device /dev/sdc excluded by a filter. Kwenye diski kumebaki mgawanyo wa zamani au sahihi ya mfumo wa faili. Ikiwa data yake hakika haihitajiki, isafishe kwa wipefs -a /dev/sdc.
  • Snapshot imekuwa Invalid. Hifadhi ya mabadiliko imejaa 100%. Haiwezi kurejeshwa — inabaki kufutwa tu, na wakati ujao itengewe nafasi zaidi.

Muhtasari

LVM kwenye Linux ina tabaka tatu: volume za kimwili (PV) zinakusanywa kwenye kikundi (VG), na kutoka kwake hukatwa volume za kimantiki (LV). Hii inatoa kile ambacho sehemu za kawaida hazina: kupanua volume papo hapo kwa lvextend -r, kuongeza diski bila kusimama, na snapshots kabla ya mabadiliko hatari. Kumbuka kwamba LVM haibadilishi RAID wala nakala rudufu. Kugawanya diski, LVM, RAID na mgao wa diski vinafafanuliwa kwa vitendo katika somo la kozi ya Linux.

Maswali ya mara kwa mara

Je, inawezekana kuhamisha sehemu inayofanya kazi yenye data kwenye LVM?

Moja kwa moja hapana: pvcreate inafuta mwanzo wa kifaa. Unahitaji kuunda LVM kwenye diski nyingine, kunakili data kwa rsync, kurekebisha fstab, na ndipo kuachilia sehemu ya zamani.

Je, LVM inapunguza kasi ya diski?

Bila snapshots, gharama ya device-mapper karibu haionekani. Snapshots za kawaida zinazofanya kazi hupunguza kasi ya uandishi kwenye volume ya asili kwa sababu ya copy-on-write, kwa hiyo usizihifadhi kwa wiki nyingi.

Je, LVM inahitajika kwenye kompyuta ya nyumbani au laptop?

Si lazima, lakini ni muhimu unapofanya usimbaji fiche wa diski (LUKS yenye LVM ndani) na unapotaka kubadilisha ukubwa wa sehemu bila kugawanya upya. Kwenye seva zenye data LVM ni karibu kiwango.

Thin provisioning kwenye LVM ni nini?

Ni volume nyembamba: unaunda bwawa (lvcreate --type thin-pool), na volume ndani yake zinachukua nafasi halisi tu kadiri data inavyoandikwa. Kwa hiyo unaweza kutoa volume zaidi ya nafasi iliyopo kimwili, lakini ujazo wa bwawa lazima ufuatiliwe.

Nitaondoaje diski kutoka kwenye kikundi cha volume bila kupoteza data?

Hamisha extents zake kwenda diski nyingine za kikundi kwa amri pvmove /dev/sdb (nafasi tupu ya kutosha inahitajika), kisha endesha vgreduce data_vg /dev/sdb na pvremove /dev/sdb.

Jifunze mada hii kwa video

Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.

Nenda kwenye kozi