2. LVM - Agenda
A che serve ?
Come funziona ?
Quale versione ?
Lo voglio, dove devo firmare ?
Forte! Ora ho un nuovo attrezzo ...
... come si usa ?
3. LVM : Features overview
Logical Volume Manager
Permette di gestire gli apparati di storage ad un livello
di astrazione pi湛 alto rispetto alla classica visione di
dischi e partizioni.
Consente ampia flessibilit nell'allocazione dello
spazio disponibile ad applicazioni ed utenti.
Permette di ridefinire le dimensioni dei volumi creati e
di spostarne la persistenza attraverso i dispositivi di
storage gestiti.
Consente la gestione dei volumi in gruppi definiti
dall'utente.
4. Vantaggi concreti
Su piccoli sistemi :
Possibilit di ridimensionare le partizioni dedicate agli
applicativi o ai dati a seconda delle necessit.
Possibilit di aggiungere o rimuovere apparati di storage
senza necessit di modifiche al sistema.
Su sistemi enterprise :
Amministrazione e mantenimento semplificati
Associazione gruppi_utenti gruppi_volumi
Continuit dei servizi
Snapshots
6. Anatomia - 2
LVM Esegue il mapping tra LE e PE
Linear Mapping
Striped Mapping : distribuisce frammenti di LE sequenzialmente
nei vari PV, al fine di aumentare le performance del LV. *
7. Snapshots
Uno snapshot 竪 un'istantanea di un LV ottenuta
memorizzando i cambiamenti del LV rispetto allo
snapshot e viceversa.
Gli snapshot possono essere montati ( e in LVM2
modificati ) come normali LV.
La dimensione degli snapshot dipende dai
cambiamenti al LV o allo snapshot stesso nel suo
tempo di vita : per tempi relativamente brevi 竪 molto
inferiore alla dimensione del LV originale.
8. Snapshots - 2
Vantaggi
Ottenere un backup consistente e di dimensioni ridotte, senza
necessit di interruzione dei servizi.
Possibilit di testare software che modifica il filesystem per poi
ripristinare il volume originale, senza bisogno di allocare uno
spazio equivalente al volume.
Accortezze
Applicabile solo a LV, non a partizioni classiche.
Lo snapshot richiede uno spazio allocato proporzionale al suo
tempo di vita ( al pi湛 di dimensioni uguali al LV ).
9. Quale versione ?
LVM2
Retrocompatibile ( a meno degli snapshot LVM1 )
Usa il device mapper kernel driver incluso nei kernel 2.6.x
( ma esiste una patch per i kernel 2.4.x )
Snapshot read / write
LVM1
Usa il device mapper dei kernel 2.4.x
Snapshot read-only
Considerato un progetto maturo
10. Setting up Device Mapper
Device mapper come modulo o incluso nel kernel
> per LVM2 e kernel >= 2.6.9 dovrebbe essere presente
( check /proc/misc, /proc/devices, /sys/class/misc )
se compilato come modulo #modprobe dm_mod
( more at http://sources.redhat.com/dm/ )
> per LVM1 e kernel 2.6.x occorre una patch del kernel
> per LVM1 e kernel 2.4.x assicurarsi di avere l'ultima
patch per il kernel per LVM1 e di compilare il supporto
Multi-device support (RAID and LVM) > LVM
!!! L'uso di Snapshot di LV con fs ReiserFS richiede la patch
linux-2.4.x-VFS-lock presente in LVM/1.0.8/PATCHES
11. Setting up LVM1 Boot time script
Debian - /etc/init.d/lvm
#!/bin/sh
case "$1" in
start)
/sbin/vgscan
/sbin/vgchange -ay ;;
stop)
/sbin/vgchange -an ;;
restart|force-reload) ;;
esac
exit 0
12. Setting up LVM1 Boot time script
Red hat
L'rpm installa lo script di avvio.
Tuttavia se LVM viene compilato come modulo si dovr
aggiungere
modprobe lvm-mod
in /etc/rc.d/rc.sysinit prima dell'attivazione dei LV
13. Setting up LVM2 Boot time script
mkinitrd delle distro moderne dovrebbe essere
configurato per far attivare tutti i LV all'avvio.
Se cos狸 non dovesse essere aggiungere
manualmente
dmsetup mknodes
vgscan --ignorelockingfailure
vgchange -ay ignorelockingfailure
14. Setting up LVM Tools & Libs
Utilizzare il packet manager della distro per
installare LVM Tools e LVM Libraries
... oppure
Scaricare i sorgenti
tar -xzvf lvm-tools-and-libraries.tar.gz
./configure --help
./configure
make
make install
make remove
15. LVM Common tasks overview
# pvcreate /dev/devname
crea un PV descriptor all'inizio di devname
# vgcreate [-s ES] vg_name /dev/deva1 /dev/devb1
crea un VG ed associa i dev come PV
# vgchange -ay vg_name
attiva il VG e tutti i suoi LV
# vgchange -an vg_name
disattiva il VG e tutti i suoi LV
# vgremove vg_name
rimuove il VG
16. LVM Common tasks overview - 2
# vgextend vg_name /dev/devc1
estende il VG aggiungendo il PV
( NB: il PV deve essere inizializzato!)
# pvdisplay /dev/deva1
visualizza informazioni sul PV
# vgdisplay /dev/deva1
visualizza informazioni sul PV
# vgreduce vg_name /dev/deva1
riduce il VG rimuovendo il PV
17. LVM Common tasks overview - 3
# lvcreate -L1500 -n lv_name vg_name
crea un LV di 1500MB lv_name nel VG vg_name
# lvcreate -i2 -I4 -l100 -n lv_name vg_name
crea un LV di 100 LE con 2 stripe di grandezza 4kb
# lvcreate -l $( vgdisplay vg_name | grep "Total PE"
| awk '{print $2}') vg_name -n lv_name
crea un LV della dimensione del VG
# lvcreate -n lv_name vg_name /dev/devb1
crea un LV mappando le LE nelle PE del devb1
18. LVM Common tasks overview - 4
# lvremove /dev/vg_name/lv_name
rimuove il LV ( NB: Deve essere smontato! )
# lvextend -L40G /dev/vg_name/lv_name
estende il LV alla dimensione specificata
# lvextend -L+4G /dev/vg_name/lv_name
estende il LV della dimensione specificata.
E' necessario estendere il fs dopo l'estensione del LV
ext2/ext3 # resize2fs /dev/vg_name/lv_name (*)
reiserfs # resize_reiserfs -f /dev/vg_name/lv_name
xfs # xfs_growfs /mpoint
jfs # mount -o remount,resize=<fs_blocksize> /mpoint
19. LVM Common tasks overview - 5
# lvreduce -L-4G /dev/vg_name/lv_name
riduce il LV della dimensione specificata.
E' necessario ridurre il fs prima della riduzione del LV
ext2/ext3 # resize2fs /dev/vg_name/lv_name <vbsize> (*)
reiserfs # resize_reiserfs -s -4G /dev/vg_name/lv_name
xfs no-way to reduce xfs fs
jfs no-way to reduce jfs fs
# lvcreate -L512M -s -n snap_name /dev/vg/lv_name
crea uno snapshot del LV assegnandogli 512 Mb del VG
Se la persistenza delle differenze tra lo snapshot ed il LV
supera lo spazio allocato, lo snapshot viene disabilitato.
20. Cose a cui prestare attenzione
La partizione di avvio contenete l'immagine del kernel non pu嘆
essere su un LV !
Un filesystem root su un LV richiede un initrd che attivi i LV
altrimenti il fs non pu嘆 essere montato !
( see lvmcreate_initrd for LVM1 )
Creare un PV su un intero disco non partizionato 竪
sconsigliato in quanto altri sistemi rilevano il disco come non
utilizzato !
Ma se proprio ci tenete almeno prima distruggete la tabella delle partizioni:
# dd if=/dev/zero of=/dev/diskname bs=1k count=1
# blockdev --rereadpt /dev/diskname
21. Cose a cui prestare attenzione - 2
Sistemi running LVM1 con devfs richiedono di specificare il
percorso completo dei dev
# vgcreate vg_name /dev/ide/host0/bus0/target0/lun0/part1 ...
E' sconsigliato creare PVs su pi湛 partizioni dello stesso disco: in
caso di striped mapping le prestazioni diminuiscono
notevolmente !
LVM1 su partizioni DOS richiede che il tipo di partizione sia
impostato a 0x8e ( fdisk o simili ... )
Prima di rimuovere un PV da un VG occorre spostare tutte le PE
che il PV ospita sugli alri Pvs del VG !
22. LVM Common tasks overview - 6
# pvmove /dev/devname
distribuisce tutte le PE allocate sul device, sugli altri PV
dello stesso VG sec'竪 abastanza spazio.
Se non c'竪 abbastanza spazio ...
# pvcreate /dev/otherdisk
# vgextend vg_name /dev/otherdisk
# pvmove /dev/devname /dev/otherdisk (*)
# vgreduce vg_name /dev/devname
# vgsplit vg_name another_vg /dev/sdb2
combina vgreduce e vgcreate
23. An useful tool : vgexport / vgimport
Scenario : sostituzione di una macchina server
[admin@old_machine] # unmount /mnt/design/users
[admin@old_machine] # vgchange -an design
vgchange -- volume group "design" successfully deactivated
[admin@old_machine] # vgexport design
vgexport -- volume group "design" successfully exported
[admin@new_machine] # pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- inactive PV "/dev/sdb1" is in EXPORTED VG "design" [996 MB / 996 MB free]
pvscan -- inactive PV "/dev/sdb2" is in EXPORTED VG "design" [996 MB / 244 MB free]
pvscan -- total: 2 [1.95 GB] / in use: 2 [1.95 GB] / in no VG: 0 [0]
[admin@new_machine] # vgimport design
Volume group "vg" successfully imported
[admin@new_machine] # vgchange -ay design
[admin@new_machine] # mkdir -p /mnt/design/users
[admin@new_machine] # mount /dev/design/users /mnt/design/users