LVM kwenye Linux: volume za kimwili, vikundi na volume za kimantiki kwa vitendo
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.
| Ngazi | Ni nini | Mfano wa jina | Huundwa na amri |
|---|---|---|---|
| PV (Physical Volume) | diski au sehemu iliyoandaliwa kwa LVM | /dev/sdb, /dev/sdc1 | pvcreate |
| VG (Volume Group) | bwawa linalounganisha PV moja au zaidi | data_vg | vgcreate |
| LV (Logical Volume) | volume iliyokatwa kutoka VG; mfumo wa faili huwekwa juu yake | /dev/data_vg/app | lvcreate |
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
| Kazi | Amri |
|---|---|
| Muhtasari wa PV, VG, LV | pvs, vgs, lvs |
| Kuunda volume ya kimwili | pvcreate /dev/sdb |
| Kuunda kikundi | vgcreate data_vg /dev/sdb |
| Kuongeza diski kwenye kikundi | vgextend data_vg /dev/sdc |
| Kuunda volume | lvcreate -n app -L 15G data_vg |
| Kupanua volume na mfumo wa faili | lvextend -r -L +5G /dev/data_vg/app |
| Kunyoosha PV baada ya kukuza diski | pvresize /dev/sdb |
| Snapshot | lvcreate -s -n snap -L 2G /dev/data_vg/app |
| Kurudi kwenye snapshot | lvconvert --merge /dev/data_vg/snap |
| Kuondoa diski kwenye kikundi | pvmove /dev/sdb, kisha vgreduce data_vg /dev/sdb |
| Kufuta volume | lvremove /dev/data_vg/app |
Makosa ya kawaida
- Volume imepanuliwa, lakini df inaonyesha ukubwa wa zamani. Umesahau
-r. Endesharesize2fsauxfs_growfs. - Insufficient free space. Kwenye kikundi hakuna extents tupu: angalia
vgsna uongeze diski kwavgextendau 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.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.
Nenda kwenye kozi