LVM
Sisukord
LVM
LVM moodustab kihi failisüsteemi ja füüsilise kõvaketta vahele. Kui kasutusel on ka RAID, siis võiks kujutleda kihte selliselt
- Failisüsteemid
- LVM
- RAID
- Füüsilised plokkseadmed
LVM pakub selliseid võimalusi
- failisüsteemide snapshotide kasutamine, ainult loetavad või loetavad-kirjutatavad
- eeldusel, et failisüsteem toetab, muuta olemasoleva failisüsteemi suurust
- erinevalt nö fdisk partitsioonide kasutamisest, kui mingil moel kasutusel olevate partitsioonidega kõvakette partitsioonitabelit muuta, nt tekitada kõvakettale partitsioon juurde, siis muudatuse kehtestamiseks tuleb operatsioonisüsteem alglaadida, LVM puhul ei ole see vajalik
- korraldada online'is andmete migreerimist füüsiliste kõvaketaste vahel (kuigi nö põhimõtteliselt õigem on seda teostada mdadm RAID vahenditega)
- ühendada kokku väiksemaid füüsilised plokkseadmed üheks suuremaks loogiliseks seadmeks (jällegi, seda võib olla õigem teha mdadm vahenditega)
LVMi kasutamisel tuleb arvestada selliste puudustega
- tõenäoliselt on LVM köited kasutatavad ainult Linux operatsioonisüsteemiga
Tuuma seadistamine
Linuxi 2.6 tuuma puhul on oluline lisaks füüsiliste ketaste draiveritele valida eriti device-mapper, ühe olulise mooduli nimi on dm_mod, fail dm-mod.ko
Device Drivers -> Multi-device support (RAID and LVM) -> valida kõik
2009 aastal aga on vaevalt tarvis tavakasutajal reeglina omale ise tuuma kompileerima hakata, sobib ja on soovitav kasutada distributsiooni tuuma.
LVM seadistamine
LVM lahenduse seadistamiseks sobib kasutada tarkvara lvm2 http://sourceware.org/lvm2/, reeglina on see distributsiooni jaoks pakendatud.
LVMi tuleks käsitleda kolmekihilisena
- Plokkseadmed tuleb LVM juures kasutamiseks spetsiaalselt märgistada.
- Plokkseadmed on organiseeritud voluum gruppidesse, mis on konteinerid loogilistele voluumidele.
- Loogilised voluumid on kõige otsekohesemalt kasutatavad, sinna peale moodustatakse tavaliselt failisüsteemid.
Iga kihi tegevusteks kasutatakse oma utiliite, vastavalt nimedega pv*, vg* ja lv*.
Esmalt tuleb olemasolevad blokkseadmed (füüsilised kõvakettad või RAID seadmed) märkida füüsilisteks voluumideks
aix:~# pvcreate /dev/md0
Tulemust näeb sedasi
aix:~# pvdisplay --- Physical volume --- PV Name /dev/md0 VG Name voluum PV Size 465.77 GB / not usable 0 Allocatable yes PE Size (KByte) 4096 Total PE 119237 Free PE 106949 Allocated PE 12288 PV UUID dC1zcu-3caT-Uirt-sbB9-r7j0-Yf06-FUGVmP
Seejärel tuleb moodustada loogiline grupp
aix:~# vgcreate voluum /dev/md0
Tulemust näeb selliselt
aix:~# vgdisplay voluum --- Volume group --- VG Name voluum System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 16 VG Access read/write VG Status resizable MAX LV 0 Cur LV 3 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 465.77 GB PE Size 4.00 MB Total PE 119237 Alloc PE / Size 12288 / 48.00 GB Free PE / Size 106949 / 417.77 GB VG UUID j8OONB-HABJ-HH1g-7Ywx-RLVG-1OzZ-IA68j9
Lõpuks moodustada loogilised voluumid
aix:~# lvcreate -L 16G -n vm01 voluum Logical volume "vm01" created aix:~# lvcreate -L 16G -n vm02 voluum Logical volume "vm02" created aix:~# lvcreate -L 16G -n vm03 voluum Logical volume "vm03" created
Tulemust näeb selliselt
aix:~# lvdisplay /dev/voluum/vm01 --- Logical volume --- LV Name /dev/voluum/vm01 VG Name voluum LV UUID dXfxk5-0jmz-TfQY-hTwz-XxKw-XtgS-H1IOvz LV Write Access read/write LV Status available # open 0 LV Size 16.00 GB Current LE 4096 Segments 1 Allocation inherit Read ahead sectors 0 Block device 253:0
Voluum saab olla available või NOT available olekus. Kasutada saab available voluume, kusjuures lvcreate järgselt viiakse voluum automaatselt available olekusse.
Voluumi eemaldamiseks tuleb esmalt ta viia NOT available olekusse
aix:~# lvchange -a n /dev/voluum/vm01
ning seejärel
aix:~# lvremove /dev/voluum/vm01
Voluumigruppide eemaldamiseks tuleks öelda
aix:~# vgremove /dev/voluum
Peale arvuti käivitamist tuleb näiteks Debian GNU/Linuxi puhul öelda
aix:~# /etc/init.d/lvm start
/dev kataloogi seadmete moodustamiseks ning ennem arvuti seiskamist
aix:~# /etc/init.d/lvm stop
Snapshot
Snapshot Logical Volume (SLV) on koopia tema moodustamise ajahetkel vastava loogilise seadme olekust, mida saab seejärel kasutada nagu tavalist failisüsteemi. Snapshoti tegemise eelduseks on, et samas voluumi grupis on piisavalt vaba kasutamata ruumi, st mida pole omistatud ühelegi loogilisele voluumile. Tavaliselt on snapshoti moodustamise põhjuseks soov olemasoleva failisüsteemi seisuga mingi muudatus järgi proovida, näiteks tarkvara uuendamine ilma, et see töötavat süsteemi segaks. Snapshoti loomiseks tuleb anda käsk
# lvcreate -L 2G -s -n vm01_snapshot /dev/voluum/vm01
Andes käsu tekitada snapshot luuakse tegelikult lvmi kettast "copy on write" dublikaat. Ehk siis iga blokk mis snapshotitud kettal muutub salvestatakse kõigepealt snapshotti. Ehk selleks, et muudatused jõustuksid pole vaja muud kui lihtsalt snapshot eemaldada. Tasub tähele panna, et snapshoti moodustamisel määratakse selle suurus -L võtmega (meiepuhul 2 gigabaiti). Juhul kui see suurus ületatakse, ehk muudatusi tekib rohkem kui kahe giga jagu, siis kustutatakse snapshot automaatselt ja seda pole võimalik kasutada. Snapshoti täituvust näeb näiteks lvdisplay käsuga
# lvdisplay | grep snap LV snapshot status source of vm01-snapshot [active] LV Path /dev/voluum/vm01_snapshot LV Name vm01-snapshot LV snapshot status active destination for vm01 Allocated to snapshot 3,42%
Snapshoti külge haakimiseks
# mount /dev/voluum/vm01_snapshot /mnt/vm01_snapshot
Snapshoti vabastamiseks tuleb esmalt ta lahti ühendada ja siis öelda
# lvremove /dev/voluum/vm01_snapshot
Soovides pöörduda snapshotitud kettal tagasi algsele seisule ehk teha nö rollback.
# lvconvert --merge /dev/voluum/vm01_snapshot Merging of volume vm-snapshot started. vm01: Merged: 96,5% vm01: Merged: 96,7% ... vm01: Merged: 99,7% vm01: Merged: 100,0% vm01: Merged: 100,0% Merge of snapshot into logical volume vm01 has finished. Logical volume "vm01_snapshot" successfully removed
Merge käsu täitmine võib võtta mõnigast aega ning kõik lugemis-kirjutamis operatsioonid mis samal ajal tulevad allikaks olevale kettale suunatakse automaatselt mergetavale snapshotile. Pelae merge käsu lõppu on algketas samas seisus mil ta oli enne snapshoti tegemist (lisaks muudatused mis tehti kettale merge käsu täitmise ajal kasutajate poolt). Snapshot ose eemaldatakse peale merge lõpetamist automaatselt.
Snapshoti moodustamine kasutab mõni MB arvuti mälu, mis snapshoti eemaldamisel vabastatakse. Lisaks tuleb arvestada, et kui labelit kasutavast juurifailisüsteemist teha snapshot, siis on sama label kahel failisüsteemil ning operatsioonisüsteemi alglaadimine ei õnnestu sellises olukorras. Lahenduseks võiks olla snapshotile muu labeli omistamine öeldes
# e2label /dev/voluum/juurikas uuslabel
Snapshotile ruumi juurde andmiseks sobib öelda, kusjuures etteantud uus ruum peab olema suurem kui olemasoleva snapshot ruum
# lvresize -L4G /dev/voluum/vm01_snapshot
LVM kolimine ühelt füüsiliselt kettalt teisele
Kui soovida kolida juurpartitsiooni sisaldav LVM voluum teisele füüsilisele kettale või mdadm abil tehtud mirrorile, siis kõigepealt installeerime mdadm
apt-get install mdadm
Siin tuleks valida küsimusele vastuseks "all" devices
Järgnevalt teeme mirrori
debian:~# mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sdc2 missing
Ning kolime juurfailisüsteemi sisaldava voluumgrupi ümber /dev/md0
debian:~# lvm lvm> pvcreate /dev/md0 Physical volume "/dev/md0" successfully created lvm> vgextend juur /dev/md0 Volume group "juur" successfully extended lvm> pvmove /dev/sda2 /dev/md0
Ootame, kuni move käsk lõpetab töö ja edasi:
lvm> vgreduce juur /dev/sda2 lvm> quit
Kui /dev/sda2 on täpselt sama suur, kui /dev/sdc2, siis soovitavalt peale rebooti saame panna sda2 lisaks md0 mirrorisse.
Antud kolimise näide peaks kehtima juhul, kui partitsioon, kuhu kolitakse on piisavalt suur, et mahutada kõik sellel kettal olevad Logical Volumed (lvm -> käsk pvs), samuti peaks see võimaldama kopeerida ka ainult üht ketast mitmest kettast koosnevate LVMide puhul. Mõistlik on sellist operatsiooni teha siiski eelnevalt kontrollides varukoopiate olemasolu ja cd-lt buutides.
Veel toredaid programme
Programm lvm töötab interaktiivses režiimis
aix:~# lvm lvm> pvs PV VG Fmt Attr PSize PFree /dev/md0 voluum lvm2 a- 465.77G 167.77G
lvm> lvs LV VG Attr LSize Origin Snap% Move Log Copy% kraam250 voluum -wi-ao 250.00G vm01 voluum -wi-ao 16.00G vm02 voluum -wi-ao 16.00G vm03 voluum -wi-ao 16.00G
lvm> vgs VG #PV #LV #SN Attr VSize VFree voluum 1 4 0 wz--n- 465.77G 167.77G
lvm> lvscan ACTIVE '/dev/voluum/vm01' [16.00 GB] inherit ACTIVE '/dev/voluum/vm02' [16.00 GB] inherit ACTIVE '/dev/voluum/vm03' [16.00 GB] inherit ACTIVE '/dev/voluum/kraam250' [250.00 GB] inherit
lvm> vgscan Reading all physical volumes. This may take a while... Found volume group "voluum" using metadata type lvm2
lvm> pvscan PV /dev/md0 VG voluum lvm2 [465.77 GB / 167.77 GB free] Total: 1 [465.77 GB] / in use: 1 [465.77 GB] / in no VG: 0 [0 ]
Voluumi ümbernimetamine
Voluumi nime muutmiseks tuleb esmalt voluumi kasutamine lõpetada, nt vastav failisüsteem lahti ühendada ning märkida voluum mitte-aktiivseks ning seejärel näidata vana ja uus nimi
bash# lvchange -a n /dev/voluum/voluuminimi bash# lvrename /dev/voluum/voluuminimi /dev/voluum/voluumi_uus_nimi
Seejärel märkida voluum uuesti aktiivseks ning kasutada tavapäraselt moel
bash# lvchange -a y /dev/voluum/voluumi_uus_nimi
Märkused
- loogilise voluumi moodustamisel saab määrata suurust LVMi jaoks kõige nö loomulikumates mõõtühikutes, extent'ides, nt kogu volume groupi suuruse logical volume tekitamiseks tuleb öelda
# lvcreate -l arv -n voluuminimi grupinimi
kus arv on extentide arv vastavas grupis, mida saab vaadata vgdisplay grupinimi käsuga
- Tihtipeale ei ole LVM seadistusfailis /etc/lvm/lvm.conf tarvis muudatusi teha, aga seal saab juhtida filter direktiiviga, milliseid seadmeid LVM käsitleb võimaliku ressursina LVM moodustamiseks või nt kuivõrd LVM utiliitidega sooritatud tegevusi logitakse sh kuhu. Kusjuures, kui filter parameetrit muuta tuleb seejärel öelda 'vgscan', et LVM cache failis /etc/lvm/.cache uuendataks.
- Kõigi LVM volume grupi voluumide aktiivseks (või mitteaktiivseks) muutmiseks sobib öelda vastavalt
# vgchange -a y volumegrupinimi # vgchange -a n volumegrupinimi
- Kui pvdisplay ei näita seadmete nimekirjas oodatavat seadet, maksab küsida otse
# pvdisplay /dev/md0
- Voluumi grupi eemaldamisel kututatakse kõik grupis olevad voluumid
# vgremove data Do you really want to remove volume group "data" containing 32 logical volumes? [y/n]: y Logical volume "fs" successfully removed Logical volume "moraal" successfully removed Logical volume "cyrus_data" successfully removed ... Volume group "data" successfully removed
- Kui süsteemi on tekkinud mõni nö ületäitunud snapshot, mis on INACTIVE olekus, siis võivad LVM käsud anda sellised teateid oma muu väljundi alguses
# vgdisplay /dev/dm-2: read failed after 0 of 4096 at 0: Input/output error ..
- Kui LVM PV, VG, LV ja failisüsteem asuvad kõik ühel plokkseadmel /dev/sdb, siis failisüsteemi suurendamiseks sobib selline järgnevus
Esmalt öelda, kusjuures tulemusena tekib vastavasse volume gruppi vaba ruumi juurde
# pvresize /dev/sdb Physical volume "/dev/sdb" changed 1 physical volume(s) resized / 0 physical volume(s) not resized
Seejärel suurendada lvm köidet, eeldusel, et viimine suurus oli 40 G nt
# lvresize -L80G /dev/pgdata/data_postgresql
Ja lõpuks failisüsteemi
e2fsck, resize2fs jne
- 100% täitmine olemasolevast vabast VG mahust
# lvcreate -l100%FREE -n voluuminimi voluumigrupinimi
Failisüsteemide moodustamine LVMile
Failisüsteemi tekitamine LVM partitsioonile toimub samamoodi nagu tavalisele blokkseadmele Näiteks ext3 failisüsteemi moodustamine toimub käsuga
# mkfs.ext3 /dev/virtual/vm01-backup
Ning seejärel võib anda mountimiseks käsu
# mount /dev/virtual/vm01-backup /backup
Kontrollime kas ketas tuli külge
# df Filesystem 1K-blocks Used Available Use% Mounted on ... /dev/mapper/virtual-vm01--backup 103212320 192248 97777192 1% /backup
LVM partitsioonid mounditakse fstabi abil arvuti boodil samamoodi nagu tavalised partitsioonidki, tuleb vaid teada täisrada.
# /dev/mapper/virtual-vm01--backup /backup ext3 defaults 1 2
Probleemidega tegelemine
Mida teha kui juhtub kogematta hävitama lvm ketta, näiteks tekitama sinna peale fdiskiga uue partitsiooni ja eksitusest arusaades sooviks lvmi viilakad taastada?
LVM hoiab enda infost tegelikult varukoopiaid /etc/lvm/archive/ kaustas. Näiteks /etc/lvm/archive/vg1_00227-2048533959.vg. Kuid neid niisama kasutada ei saa, vaja on ka LVMi ID-d. Selle saab vaadata vg1_00227-2048533959.vg faili seest. Asub see üsna alguses kujul:
vg1 { id = "RYLA7U-H0hv-KR0F-DVPH-UdBS-7zbb-nkzASt"
Seejärel saame käivitada käsu:
# pvcreate --uuid "oh2ZbK-weKX-zVxb-ou2t-jvaT-esW1-lAzYYn" --restorefile /etc/lvm/archive/vg1_00227-2048533959.vg /dev/sdb
Kui see käsk ütleb: Can't open /dev/mapper/multi2 exclusively. Mounted filesystem? Saab vaadata dmsetup status käsuga endiselt katkise lvmi küljes rippuvaid viilakaid ja nad lahti haakida.
# dmsetup remove_all
Seejärel käivitame käsu vgscan ja lvm metadata peaks olema taastatud ning kettad taastunud.
Kui metadata pole täielikult hävinud saab taastada ka ilma pvcreate käsuta nt
# vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Võti --test näitab vaid tehtavaid muudatusi ja midagi reaalselt ei käivita.
Taastatud volume group vg1 on vaja veel ka täiendavalt aktiveerida
# vgchange -a y vg1 16 logical volume(s) in volume group "vg1" now active