LVM: Porovnání verzí

Z Wiki UnArt Slavičín
Skočit na navigaciSkočit na vyhledávání
 
(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/PV z jedné volume group do druhé=
=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:

  1. 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
  2. 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