LVM: Porovnání verzí
(Není zobrazeno 12 mezilehlých verzí od stejného uživatele.) | |||
Řádek 1: | Řádek 1: | ||
=Informace o parametrech PV, VG, LV = | |||
Typicky chceme zjistit volné místo na VG: | |||
vgdisplay | |||
To samé lze zobrazit i pro PV či LV, takže: | |||
lvdisplay | |||
pvdisplay | |||
=Přidání nové lvm partition= | =Přidání nové lvm partition= | ||
Příklad: vytvoření nové partition | Příklad: vytvoření nové partition | ||
Řádek 26: | Řádek 34: | ||
=Odsun LV z disku/pole, který chceme odebrat ze systému= | =Odsun LV z disku/pole, který chceme odebrat ze systému= | ||
Pokud potřebujeme LVM odsunout na jiný disk, např. z md3 na md2 | Pokud potřebujeme LVM odsunout na jiný disk, např. z md3 na md2+md1 | ||
#pvmove /dev/md3 /dev/md2 | #pvmove /dev/md3 /dev/md2 /dev/md1 | ||
/dev/md3: Moved: 0.1% | /dev/md3: Moved: 0.1% | ||
/dev/md3: Moved: 1.0% | /dev/md3: Moved: 1.0% | ||
Řádek 36: | Řádek 44: | ||
Removed "/dev/md3" from volume group "vg_main" | Removed "/dev/md3" from volume group "vg_main" | ||
=Přesun LV/ | =Přesun všeho z jedné VG do druhé a zrušení zdrojové VG= | ||
Příklad: chceme kompletně zrušit vg_backup a všechny její LV přesunout do vg_main. | |||
Nejdřív musí být všechny LV v vg_backup odmountovány a odpojeny od virtuálních mašin, pak je potřeba spustit deaktivaci: | |||
vgchange -an /dev/vg_backup | |||
a samotný přesun LV + zrušení vg_backup: | |||
vgsplit /dev/vg_backup /dev/vg_main [ PhysicalVolumePath_to_move ...] | |||
Udělá vlastně to samé jako | |||
#odsun obsazeného místa ve PhysicalVolumePath do jiných fyzických volumes v SourceGroup, které mají něco volného | |||
pvmove PhysicalVolumePath {všechny_volné_fyzické_volumes_v_SourceVolumeGroupName} | |||
#odstranění fyzického volume ze SourceVolumeGroup: | |||
vgreduce SourceVolumeGroupName PhysicalVolumePath | |||
#přidání do DestinationVolumeGroup | |||
vgextend DestinationVolumeGroupName PhysicalVolumePath | |||
Nakonec musíme přesunuté LV v cílové VG aktivovat: | |||
vgchange -ay /dev/vg_main | |||
=Přesun jedné LV ze sourceVG1 do destVG2= | |||
Tohle LVM neumí. | |||
Jsou 2 způsoby, jak to udělat: | |||
#vytvoření nového LV v destVG2 a pak rsync souborů (pro velké LVs) nebo kopie celého LV přes dd (pro malé LVs). <br/>Pokud je v LV virtuální mašina, která je hodně aktivní a má mnoho souborů, pak i metoda s rsync může být hodně zdlouhavá a vyžaduje dost dlouhý downtime | |||
#využití RAID1 bez superbloku (=Dulíkova metoda). Návod je zde: | |||
Předpokládejme, že máme LV /dev/vg_backup/src, kterou využívá nějaká XEN VM jako svůj disk /dev/hdb a chceme jej replikovat do /dev/vg_main/dst s co nejmenším downtime. | |||
Takže: | |||
Nejdřív v XENu připojíme novou LV /dev/vg_main/dst k dané XEN VM (např. VM guestdomain): | |||
xm block-attach guestdomain phy:/dev/vg_main/dst /dev/hdc rw | |||
Pak se přihlásíme do VM a vytvoříme RAID1 bez superblock-u pomocí legacy příkazu --build | |||
guestdomain:~# mdadm --build /dev/md0 --level=1 -n 2 /dev/hdb missing | |||
mdadm: array /dev/md0 built and started. | |||
Nyní máme /dev/md0, který obsahuje to samé, co /dev/hdb, takže můžeme udělat: | |||
umount /dev/hdb | |||
#zde je malý okamžik, kdy budeme mít downtime | |||
mount /dev/md0 {původní mount point /dev/hdb} | |||
mdadm -a /dev/md0 /dev/hdc | |||
Teď už se nám /dev/hdb pěkně na pozadí replikuje na /dev/hdc. Až bude operace dokončena, můžeme původní disk odebrat: | |||
mdadm --fail --remove /dev/md0 /dev/hdb | |||
Protože md0 nemá persistentní superblock, asi nebude riskovat jeho další používání a radši ho vypneme: | |||
umount /dev/md0 | |||
#zde je malý okamžik, kdy budeme mít downtime | |||
mount /dev/hdc {původní mount point /dev/hdb} | |||
mdadm --stop /dev/md0 | |||
Pak můžeme /dev/vg_backup/src odebrat i z XENu: | |||
xm block-detach guestdomain phy:/dev/vg_main/dst /dev/hdc rw | |||
Celý návod můžeme použít i bez XENu, tohle je samozřejmě jen jedna aplikace. | |||
=Přesun všech LV ze sourceVG1 do destVG2= | =Přesun všech LV ze sourceVG1 do destVG2= | ||
Řádek 48: | Řádek 109: | ||
předčímž je nutné všechny LV ve sourceVG1 odmountovat | předčímž je nutné všechny LV ve sourceVG1 odmountovat | ||
=Přejmenování, odstranění, ...= | |||
lvrename | |||
lvremove |
Aktuální verze z 1. 10. 2011, 17:29
Informace o parametrech PV, VG, LV
Typicky chceme zjistit volné místo na VG:
vgdisplay
To samé lze zobrazit i pro PV či LV, takže:
lvdisplay pvdisplay
Přidání nové lvm partition
Příklad: vytvoření nové partition
lvcreate -L 256M -n host-swap vg_main
LVM data recovery
Pokud máme v systému připojený disk (fyzický disk nebo nastartované mdX pole), který obsahuje LVM partition, stačí udělat toto:
# lvm vgscan Reading all physical volumes. This may take a while... Found volume group "vg_main" using metadata type lvm2 # lvm vgchange -ay 5 logical volume(s) in volume group "vg_main" now active # lvm lvscan ACTIVE '/dev/vg_main/lv_root' [223.52 GB] inherit ACTIVE '/dev/vg_main/zamestnanci-swap' [128.00 MB] inherit ACTIVE '/dev/vg_main/zamestnanci-disk' [100.00 GB] inherit ACTIVE '/dev/vg_main/sip-swap' [128.00 MB] inherit ACTIVE '/dev/vg_main/sip-disk' [2.00 GB] inherit
(příkazy uvádím včetně příkladu jejich výstupu na školním serveru xeric)
Přidání nové partition do LVM
# pvcreate /dev/md4 Physical volume "/dev/md4" successfully created # vgextend /dev/vg_main /dev/md4 Volume group "vg_main" successfully extended
Odsun LV z disku/pole, který chceme odebrat ze systému
Pokud potřebujeme LVM odsunout na jiný disk, např. z md3 na md2+md1
#pvmove /dev/md3 /dev/md2 /dev/md1 /dev/md3: Moved: 0.1% /dev/md3: Moved: 1.0% ... /dev/md3: Moved: 99.7% /dev/md3: Moved: 100.0% #vgreduce /dev/vg_main /dev/md3 Removed "/dev/md3" from volume group "vg_main"
Přesun všeho z jedné VG do druhé a zrušení zdrojové VG
Příklad: chceme kompletně zrušit vg_backup a všechny její LV přesunout do vg_main. Nejdřív musí být všechny LV v vg_backup odmountovány a odpojeny od virtuálních mašin, pak je potřeba spustit deaktivaci:
vgchange -an /dev/vg_backup
a samotný přesun LV + zrušení vg_backup:
vgsplit /dev/vg_backup /dev/vg_main [ PhysicalVolumePath_to_move ...]
Udělá vlastně to samé jako
#odsun obsazeného místa ve PhysicalVolumePath do jiných fyzických volumes v SourceGroup, které mají něco volného pvmove PhysicalVolumePath {všechny_volné_fyzické_volumes_v_SourceVolumeGroupName} #odstranění fyzického volume ze SourceVolumeGroup: vgreduce SourceVolumeGroupName PhysicalVolumePath #přidání do DestinationVolumeGroup vgextend DestinationVolumeGroupName PhysicalVolumePath
Nakonec musíme přesunuté LV v cílové VG aktivovat:
vgchange -ay /dev/vg_main
Přesun jedné LV ze sourceVG1 do destVG2
Tohle LVM neumí. Jsou 2 způsoby, jak to udělat:
- vytvoření nového LV v destVG2 a pak rsync souborů (pro velké LVs) nebo kopie celého LV přes dd (pro malé LVs).
Pokud je v LV virtuální mašina, která je hodně aktivní a má mnoho souborů, pak i metoda s rsync může být hodně zdlouhavá a vyžaduje dost dlouhý downtime - využití RAID1 bez superbloku (=Dulíkova metoda). Návod je zde:
Předpokládejme, že máme LV /dev/vg_backup/src, kterou využívá nějaká XEN VM jako svůj disk /dev/hdb a chceme jej replikovat do /dev/vg_main/dst s co nejmenším downtime.
Takže: Nejdřív v XENu připojíme novou LV /dev/vg_main/dst k dané XEN VM (např. VM guestdomain):
xm block-attach guestdomain phy:/dev/vg_main/dst /dev/hdc rw
Pak se přihlásíme do VM a vytvoříme RAID1 bez superblock-u pomocí legacy příkazu --build
guestdomain:~# mdadm --build /dev/md0 --level=1 -n 2 /dev/hdb missing mdadm: array /dev/md0 built and started.
Nyní máme /dev/md0, který obsahuje to samé, co /dev/hdb, takže můžeme udělat:
umount /dev/hdb #zde je malý okamžik, kdy budeme mít downtime mount /dev/md0 {původní mount point /dev/hdb} mdadm -a /dev/md0 /dev/hdc
Teď už se nám /dev/hdb pěkně na pozadí replikuje na /dev/hdc. Až bude operace dokončena, můžeme původní disk odebrat:
mdadm --fail --remove /dev/md0 /dev/hdb
Protože md0 nemá persistentní superblock, asi nebude riskovat jeho další používání a radši ho vypneme:
umount /dev/md0 #zde je malý okamžik, kdy budeme mít downtime mount /dev/hdc {původní mount point /dev/hdb} mdadm --stop /dev/md0
Pak můžeme /dev/vg_backup/src odebrat i z XENu:
xm block-detach guestdomain phy:/dev/vg_main/dst /dev/hdc rw
Celý návod můžeme použít i bez XENu, tohle je samozřejmě jen jedna aplikace.
Přesun všech LV ze sourceVG1 do destVG2
vgmerge destVG2 sourceVG1
Pak je asi potřeba udělat i pvmove?
sourceVG1 musí být inactive, viz http://www.redhat.com/docs/manuals/csgfs/browse/4.6/Cluster_Logical_Volume_Manager/VG_move.html:
vgchange -a n sourceVG1
předčímž je nutné všechny LV ve sourceVG1 odmountovat
Přejmenování, odstranění, ...
lvrename lvremove