Repository 32bit  Forum
Repository 64bit  Wiki

Slackware LVM HOWTO: differenze tra le versioni

Da Slacky.eu.
(Estensione di una partizione)
 
(5 revisioni intermedie di un utente non mostrate)
Riga 1: Riga 1:
[[Category:Install_e_Upgrade]]
[[Category:Install_e_Upgrade]]
 
WORK IN PROGRESS
 
== Introduzione ==
== Introduzione ==
Riga 274: Riga 272:
La procedura è molto delicata perché potrebbe intaccare i nostri dati, per cui avere un backup dei dati non è mai una cosa superflua, può essere effettuata in due modalità:
La procedura è molto delicata perché potrebbe intaccare i nostri dati, per cui avere un backup dei dati non è mai una cosa superflua, può essere effettuata in due modalità:
la prima coinvolge direttamente e2fsadm un tool per il ridimensionamento del filesystem:
+
La prima coinvolge direttamente e2fsadm un tool per il ridimensionamento del filesystem:
root@box:/# df -h
root@box:/# df -h
Riga 283: Riga 281:
La partizione da ridimensionare è lvhome che è di 1000 M e gliene vogliamo togliere 500.
La partizione da ridimensionare è lvhome che è di 1000 M e gliene vogliamo togliere 500.
  +
  +
Smontaggio della partizione:
root@box:/# umount /home
root@box:/# umount /home
Ridimensioniamo sottraendo 500M
+
Ridimensioniamo sottraendo 500M:
root@box:/# e2fsadm -L-500M /dev/vgDATI/lvhome
root@box:/# e2fsadm -L-500M /dev/vgDATI/lvhome
Riga 309: Riga 309:
e2fsadm -- ext2fs in logical Volume /dev/vgDATI/lvhome successfully reduced to 500 MB
e2fsadm -- ext2fs in logical Volume /dev/vgDATI/lvhome successfully reduced to 500 MB
Il messaggio ci dice successfully reduced to 500 MB ma per esserne sicuri la montiamo e guardiamo lo spazio ora a disposizione:
+
Il messaggio ci dice successfully reduced to 500 MB ma per esserne sicuri la montiamo e guardiamo lo spazio ora a disposizione.
  +
  +
Montiamo la partizione per verifica:
root@box:/# mount /dev/vgDATI/lvhome /home
root@box:/# mount /dev/vgDATI/lvhome /home
Riga 319: Riga 319:
/dev/vgDATI/lvhome 492M 20k 467M 1% /home
/dev/vgDATI/lvhome 492M 20k 467M 1% /home
La seconda richiede qualche passaggio in più ma è analoga:
+
La seconda richiede qualche passaggio in più ma è analoga.
  +
  +
La partizione originale è da 1 giga:
root@box:/# df -h
root@box:/# df -h
Riga 326: Riga 326:
/dev/hda1 15M 7.1M 7.3M 49% /boot
/dev/hda1 15M 7.1M 7.3M 49% /boot
/dev/vgDATI/lvhome 984M 20k 934M 1% /home
/dev/vgDATI/lvhome 984M 20k 934M 1% /home
  +
  +
Smontaggio della partizione:
root@box:/# umount /home
root@box:/# umount /home
  +
Esecuzione (richiesta) di e2fsck:
  +
root@box:/# e2fsck -f /dev/vgDATI/lvdati
root@box:/# e2fsck -f /dev/vgDATI/lvdati
e2fsck 1.27 (8-Mar-2002)
e2fsck 1.27 (8-Mar-2002)
Riga 338: Riga 342:
/dev/vgDATI/lvdati: 11/128000 files (0.0% non-contiguous), 4031/256000 blocks
/dev/vgDATI/lvdati: 11/128000 files (0.0% non-contiguous), 4031/256000 blocks
Questi sono i blocchi disponibili sui quali effettuare la riduzione:
+
Questi sono i blocchi disponibili sui quali effettuare la riduzione.
  +
  +
Specifichiamo la dimensione in blocchi, riducendola della metà:
root@box:/# resize2fs /dev/vgDATI/lvdati 128000
root@box:/# resize2fs /dev/vgDATI/lvdati 128000
resize2fs 1.27 (8-Mar-2002)
resize2fs 1.27 (8-Mar-2002)
The filesystem on /dev/vgDATI/lvdati is now 128000 blocks long.
The filesystem on /dev/vgDATI/lvdati is now 128000 blocks long.
  +
  +
Montiamo la prtizione:
root@box:/# mount /dev/vgDATI/lvhome /home
root@box:/# mount /dev/vgDATI/lvhome /home
root@box:/# df -h
root@box:/# df -h
Filesystem Size Used Avail Use% Mounted on
Filesystem Size Used Avail Use% Mounted on
 
/dev/hda2 14G 3.2G 10G 24% /
/dev/hda2 14G 3.2G 10G 24% /
/dev/hda1 15M 7.1M 7.3M 49% /boot
/dev/hda1 15M 7.1M 7.3M 49% /boot
/dev/vgDATI/lvdati 492M 20k 467M 1% /home
/dev/vgDATI/lvdati 492M 20k 467M 1% /home
== Ridimensionamento dei Volume Group (VG ==
+
== Ridimensionamento dei Volume Group (VG) ==
=== Rimozione di un Volume Group (VG) ===
=== Rimozione di un Volume Group (VG) ===
Riga 361: Riga 366:
root@box:/# umount /dev/vgDATI/lvhome
root@box:/# umount /dev/vgDATI/lvhome
  +
  +
Eliminazione del LV:
root@box:/# lvremove /dev/vgDATI/lvhome
root@box:/# lvremove /dev/vgDATI/lvhome
Riga 371: Riga 378:
root@box:/# vgchange -a n /dev/vgDATI
root@box:/# vgchange -a n /dev/vgDATI
vgchange -- Volume group "vgDATI" successfully deactivated
vgchange -- Volume group "vgDATI" successfully deactivated
  +
  +
Rimozione del VG:
root@box:/# vgremove -v /dev/vgDATI
root@box:/# vgremove -v /dev/vgDATI
Riga 388: Riga 397:
vgremove -- unlocking logical Volume manager
vgremove -- unlocking logical Volume manager
La procedura è completa.
+
La procedura è completa.
=== Estensione di un Volume Group (VG) aggiungendo un device ===
=== Estensione di un Volume Group (VG) aggiungendo un device ===
  +
  +
Se volessimo aggiungere un nuovo device (hdd) al nostro gruppo di Volume dovremmo creare un nuovo PV.
  +
  +
root@box ~/ # pvcreate /dev/hdd
  +
root@box ~/ # vgextend vgDATI /dev/hdd
  +
  +
In questo modo il device hdd può essere utilizzato “in continuità” per aumentare le dimensione della partizioni che verrebbero a distendersi su due dischi diversi, ma dello stesso Volume logico.
  +
  +
Questo ci fa capire le grandi potenzialità di LVM, come sia possibile aggiungere interi dischi a partizioni esistenti e dilatarne le capacità fino a 255 GB limite imposto per un singolo Volume logico.
  +
  +
Nel nostro caso abbiamo preso due dischi uno da 10 GB e l’atro da 20GB e li abbiamo sommati in un’unica grande partizione (LV) di 30 GB, lo schema dovrebbe rendere più chiara l’operazione:
  +
  +
PV Phisical Volume Phisical Volume
  +
(hdc - 10 GB) (hdd - 20 GB)
  +
| |
  +
\ /
  +
VG Volume Group DATI
  +
|
  +
LV Logical Volume
  +
hdc+hdd=10 GB+20GB
  +
/home ~30GB
  +
  +
Dopo aver esteso il VG Dati al device hdd dobbiamo effettuare le operazioni necessarie all’allargamento della nostra partizione:
  +
  +
Smontaggio della partizione:
  +
  +
root@box:~# umount /home
  +
  +
Estensione a 29GB:
  +
  +
root@box:~# lvextend -L 29200M /dev/vgDATI/lvhome
  +
lvextend -- extending logical Volume "/dev/vgDATI/lvhome" to 28.52 GB
  +
lvextend -- doing automatic backup of Volume group "vgDATI"
  +
lvextend -- logical Volume "/dev/vgDATI/lvhome" successfully extended
  +
  +
Controllo dell'integrità:
  +
  +
root@box:~# e2fsck -f /dev/vgDATI/lvhome
  +
e2fsck 1.27 (8-Mar-2002)
  +
Pass 1: Checking inodes, blocks, and sizes
  +
Pass 2: Checking directory structure
  +
Pass 3: Checking directory connectivity
  +
Pass 4: Checking reference counts
  +
Pass 5: Checking group summary information
  +
  +
/dev/vgDATI/lvhome: 11/2567264 files (0.0% non-contiguous), 80579/5120000 blocks
  +
  +
Ridimensionamento della partizione:
  +
  +
root@box:~# resize2fs /dev/vgDATI/lvhome
  +
resize2fs 1.27 (8-Mar-2002)
  +
The filesystem on /dev/vgDATI/lvhome is now 7475200 blocks long.
  +
  +
Montaggio per verifica:
  +
  +
root@box:~# mount /dev/vgDATI/lvhome /home
  +
root@box:~# df -h
  +
Filesystem Size Used Avail Use% Mounted on
  +
/dev/hda2 14G 3.2G 10G 24% /
  +
/dev/hda1 15M 7.1M 7.3M 49% /boot
  +
/dev/vgDATI/lvhome 28G 20k 26G 1% /home
  +
  +
Lavorando con i blocchi al posto dei MB si possono ottenere dimensionamenti più precisi. Quello che comunque interessava nel nostro caso era estendere la partizione /home su più dischi (un po’ come per lo striping) per poterne aumentare le capacità.
  +
  +
Nel caso in cui si volesse rimuovere il PV dal VG:
  +
  +
root@box ~/ # vgreduce vgDATI /dev/hdd
  +
  +
Per poter rendere disponibile la partizione subito all’avvio del sistema modifica /etc/fstab in questo modo:
  +
  +
/dev/hda3 swap swap defaults 0 0
  +
/dev/hda2 / ext3 defaults 1 1
  +
/dev/hda1 /boot ext3 defaults 1 2
  +
/dev/vgDATI/lvhome /home ext2 defaults 0 2
  +
  +
Il filesystem utilizzato è stato ext2 per comodità funziona comunque anche con ext3 e Reiserfs, anche se per quest’ultimo occorre usare i tools specifici per il ridimensionamento delle partizioni.
=== Estensione di un Volume Group (VG) aggiungendo una partizione ===
=== Estensione di un Volume Group (VG) aggiungendo una partizione ===
  +
  +
Un caso abbastanza frequente può richiedere di creare un LV da un disco precedentemente partizionato, che non può essere messo totalmente a disposizione del Volume LV.
  +
  +
E’ anche possibile creare un Volume esteso tra un disco ed una singola partizione di un altro disco, che può contenere altre partizioni con normali filesystem. In questo modo non si è costretti a destinare interi dischi ai Volume logici ma si può tranquillamente riutilizzare dischi parzialmente impegnati.
  +
  +
Nel nostro caso:
  +
  +
* hdc è tutto in LVM;
  +
* hdd1 è montata su /disco1 in ext3;
  +
* hdd2 è in LVM.
  +
  +
Configuriamo un disco metà in partizione type linux standard è meta in type LVM (8e).
  +
  +
Per poter fare questo occorre utilizzare fdisk è specificare il tipo di partizione che entrerà nel LV come partizione Linux LVM con type 8e.
  +
  +
Command (m for help): p
  +
  +
Disk /dev/hdd: 16 heads, 63 sectors, 39535 cylinders
  +
Units = cylinders of 1008 * 512 bytes
  +
  +
Device Boot Start End Blocks Id System
  +
/dev/hdd1 1 20000 10079968+ 83 Linux
  +
/dev/hdd2 20001 39535 9845640 83 Linux
  +
  +
Command (m for help): t
  +
Partition number (1-4): 2
  +
Hex code (type L to list codes): 8e
  +
Changed system type of partition 2 to 8e (Linux LVM)
  +
  +
Command (m for help): p
  +
  +
Disk /dev/hdd: 16 heads, 63 sectors, 39535 cylinders
  +
Units = cylinders of 1008 * 512 bytes
  +
  +
Device Boot Start End Blocks Id System
  +
/dev/hdd1 1 20000 10079968+ 83 Linux
  +
/dev/hdd2 20001 39535 9845640 8e Linux LVM
  +
  +
  +
La partizione hdd1 sarà montata sotto la directory /disco1 è non rientrerà nel LV.
  +
  +
root@box:/# mount
  +
/dev/hda2 on / type ext3 (rw)
  +
none on /proc type proc (rw)
  +
/dev/hda1 on /boot type ext3 (rw)
  +
none on /dev/pts type devpts (rw,gid=5,mode=620)
  +
/dev/hdd1 on /disco1 type ext2 (rw)
  +
  +
root@box:/# df -h
  +
Filesystem Size Used Avail Use% Mounted on
  +
/dev/hda2 14G 3.2G 10G 24% /
  +
/dev/hda1 15M 7.1M 7.3M 49% /boot
  +
/dev/hdd1 9.5G 20k 8.9G 1% /disco1
  +
  +
* hdc è tutto in LVM;
  +
* hdd è pate in /disco1 (hdd1) e parte in LVM.
  +
  +
Procediamo alla crezione delle partizioni in LV secondo la procedura classica:
  +
  +
Creazione dei PV:
  +
root@box:/# pvcreate /dev/hdc
  +
pvcreate -- physical Volume "/dev/hdc" successfully created
  +
  +
root@box:/# pvcreate /dev/hdd2
  +
pvcreate -- physical Volume "/dev/hdd2" successfully created
  +
  +
Questo ci risponde che la partizione non ha il type giusto.
  +
  +
root@box:/# pvcreate /dev/hdd1
  +
pvcreate -- invalid partition type 0x83 for "/dev/hdd1" (must be 0x8e)
  +
  +
Creazione del VG:
  +
  +
root@box:/# vgcreate vgDATI /dev/hdc /dev/hdd2
  +
vgcreate -- INFO: using default physical extent size 4 MB
  +
  +
vgcreate -- INFO: maximum logical Volume size is 255.99 Gigabyte
  +
vgcreate -- doing automatic backup of Volume group "vgDATI"
  +
vgcreate -- Volume group "vgDATI" successfully created and activated
  +
  +
oppure se avevate già creato il Volume lo si può aggiungere anche in un secondo momento vgextend vgDATI /dev/hdd2
  +
  +
Creazione LV (esteso tra hdc e hdd2):
  +
  +
root@box:/# lvcreate -L 19000M -n lvhome /dev/vgDATI
  +
lvcreate -- doing automatic backup of "vgDATI"
  +
lvcreate -- logical Volume "/dev/vgDATI/lvhome" successfully created
  +
  +
root@box:/# df -h
  +
Filesystem Size Used Avail Use% Mounted on
  +
/dev/hda2 14G 3.2G 10G 24% /
  +
/dev/hda1 15M 7.1M 7.3M 49% /boot
  +
/dev/hdd1 9.5G 20k 8.9G 1% /disco1
  +
/dev/vgDATI/lvhome 18G 20k 17G 1% /home
  +
  +
root@box:/# mount
  +
/dev/hda2 on / type ext3 (rw)
  +
none on /proc type proc (rw)
  +
/dev/hda1 on /boot type ext3 (rw)
  +
none on /dev/pts type devpts (rw,gid=5,mode=620)
  +
/dev/hdd1 on /disco1 type ext2 (rw)
  +
/dev/vgDATI/lvhome on /home type ext2 (rw)
  +
  +
Il volume /dev/vgDATI/lvhome si estende tra il disco hdc (interamente) e parte del disco hdd (partizione hdd2).
  +
  +
E’ proprio in queste funzionalità che possiamo osservare la potenzialità e la scalabilità di questo metodo di gestione dello storage.
== Note ==
== Note ==

Versione attuale delle 22:53, 13 set 2006


Indice

[modifica] Introduzione

Ho dovuto affrontare questo argomento per motivi pratici visto che mi hanno chiesto di predisporre un sistema che consentisse con il tempo di ampliare le partizioni (per i dati contenuti), sia per un eventuale spazio di swap (per un proxy) che per un’area dedicata allo storage di dati per utenti (home directory).

Ho pensato di utilizzare le potenzialità del LVM ovvero il Logical Volume Manager da tempo incorporate nel kernel di Linux. Con questo sistema diventa infatti possibile superare le limitazioni offerte dalle partizioni standard, che possono essere maneggiate (ampliate o ridotte) con grande difficoltà. Le caratteristiche di LVM consentono invece la manipolazione e soprattutto l’estensione delle partizioni dati con grande facilità, rendendo meno complessa l’espansione dello storage su di un sistema.

Siccome l’argomento è complesso ed io non mi ritengo un esperto in materia (non lo sono in nulla) eviterò le trattazioni teoriche che lascio all’HOWTO originale e ad alcuni argomenti disponibili su web.

Vi documenterò invece la parte pratica, ovvero le operazioni che ho fatto per poter espandere dei Volumei creati con LVM. E’ stato abbastanza semplice e si è rivelato incredibilmente versatile è potente tanto da farmi pensare ad un suo utilizzo un po’ più su larga scala su alcuni dei miei sistemi.

Alcune distribuzioni (RedHat, Mandrake, Suse) offrono la possibilità di installare l’intero sistema in LVM a partire dalla prima installazione. In questo caso sui doc di RedHat ho visto che ciò può essere fatto ma la partizione boot deve per forza essere montata in una normale partizione perché il kernel non può partire da un LVM.

Nel mio caso il sistema è montato su di un disco con distribuzione Slackware 9.0 kernel 2.4.21, mentre i Volumei in LVM (due partizioni) sono stati creati prima su un disco secondario (/dev/hdc) e poi sono state estese con l’aggiunta di un secondo disco (/dev/hdd).

Il punto di partenza consiste nel predisporre un sistema con Kernel 2.4.x con il supporto LVM compilato:

Multi-device support (RAID and LVM)  ---> [*] Multiple devices driver support (RAID and LVM)
< >  RAID support
<M>  Logical Volume Manager (LVM) support

Una volta ricompilato il kernel possiamo caricare il modulo con:

modprobe lvm-mod 

Un altro elemento essenziale per poter manipolare i Logical Volume ed il filesystem è rappresentato da E2fsprogs, se non presente sul sistema è reperibile qui.

[modifica] Nozioni Basilari

Prima di effettuare le operazioni sul sistema è bene avere per lo meno un’idea di come funziona LVM e quali siano i suoi concetti di base. Potremmo dire che la struttura di LVM è concentrica o nucleare infatti alla base della creazione di un Volume logico c’è il Physical Volume in pratica il Volume Fisico che conterrà alla fine i nostri Volumei Logici.

In realtà esso contiene ancora un unità intermedia chiamata Volume Group la quale conterrà infine i Logical Volume (LV).

Questa spiegazione è davvero sintetica, in realtà l’argomento è molto più complesso per cui è bene lasciare a documenti più approfonditi tale trattazione (vedi HOWTO), per noi è comunque sufficiente per poter operare con LVM.

Alcune regole base vanno comunque tenute presenti durante la procedura di crezione dei LV:

  • Un volume fisico non può essere disteso su più di una unità. Quindi bisogna creare un volume fisico per ogni unità.
  • I volumi logici possono essere estesi su più dischi, due dischi IDE nel nostro caso, ma anche su un pool di disci SCSI o SATA, per cui LVM è molto versatile.

[modifica] Legenda

Le sigle utilizzate nel documento:

  • PV - Phisical Volume;
  • VG - Volume Group;
  • LV - Logical Volume;
  • LVM - Logical Volume Manager.

[modifica] Procedura

A questo punto si può iniziare a creare i PV sul sistema per poi arrivare alla creazione dei veri e propri LV obiettivo della nostra dimostrazione.

[modifica] Creazione del Volume Fisico (PV)

root@box:~# pvcreate /dev/hdc
pvcreate -- device "/dev/hdc" has a partition table 

Con pvcreate viene creato il primo Volume fisico sul primo disco IDE su cui verranno creati i LV. Trovando delle partizione attive lo segnala per cui è bene eliminare le partizioni presenti con fdisk e rilanciare il comando:

root@box:~# pvcreate /dev/hdc 
pvcreate -- physical Volume "/dev/hdc" successfully created 

Il comando pvscan ci informa sui device utilizzati:

root@box:/# pvscan  
pvscan -- reading all physical Volumes (this may take a while...)  
pvscan -- ACTIVE   PV "/dev/hdc" of VG "vgDATI" [9.54 GB / 4.65 GB free] 
pvscan -- total: 1 [9.54 GB] / in use: 1 [9.54 GB] / in no VG: 0 [0] 

il device coinvolto è hdc e ha dimensione 10 GB di cui circa la metà liberi.

[modifica] Creazione del Volume Group (VG)

root@box:~# vgcreate vgDATI /dev/hdc  
vgcreate -- INFO: using default physical extent size 4 MB 
vgcreate -- INFO: maximum logical Volume size is 255.99 Gigabyte 
vgcreate -- doing automatic backup of Volume group "vgDATI" 
vgcreate -- Volume group "vgDATI" successfully created and activated 

Il comando vgcreate crea il Volume Group in cui verranno poi inseriti il Volumei Logici. Qui sta la parte interessante del discorso poiché i VG possono contenere più dischi in modo da permettere ai LV di espandersi su più dischi superando le limitazioni offerte dal singolo device.

Informazioni su VG esistenti si possono ottenere con vgscan:

root@box:/# vgscan            
vgscan -- reading all physical Volumes (this may take a while...) 
vgscan -- found active Volume group "vgDATI" 
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created 
vgscan -- WARNING: This program does not do a VGDA backup of your Volume group 

il comando vgscan controlla la presenza dei PV e crea un file /etc/lvmtab senza del quale la procedura di creazione degli LVM non può essere iniziate.

Possiamo invece visualizzare lo stato del VG con il comando:

root@box:/# vgdisplay /dev/vgDATI  
--- Volume group ---  
VG Name               vgDATI 
VG Access             read/write 
VG Status             available/resizable 
VG #                  0 
MAX LV                256 
Cur LV                2 
Open LV               1 
MAX LV Size           255.99 GB 
Max PV                256 
Cur PV                1 
Act PV                1 
VG Size               9.54 GB 
PE Size               4 MB 
Total PE              2441 
Alloc PE / Size       1375 / 5.37 GB 
Free  PE / Size       1066 / 4.16 GB 
VG UUID               8jG3ug-inbp-mk5X-7xaB-9VlH-Xqe1-QFE67z 

[modifica] Creazione di un Logical Volume (LV)

La procedura riguarda un singolo Volume (lvhome) ma può essere estesa a tutti gli LV del nostro VG (spazio totale permettendo).

root@box:~# lvcreate -L 1000M -n lvhome /dev/vgDATI  
lvcreate -- doing automatic backup of "vgDATI" 
lvcreate -- logical Volume "/dev/vgDATI/lvhome" successfully created 

A questo punto possiamo procedere alla creazione di due LV nel VG precedentemente creato, utilizzando l’apposito comando lvcreate.

In questo caso verranno creato un LV denominato lvhome di 1000M.

[modifica] Formattazione e montaggio delle partizioni

root@box:~# mke2fs /dev/vgDATI/lvhome      
mke2fs 1.27 (8-Mar-2002) 
Filesystem label= 
OS type: Linux 
Block size=4096 (log=2) 
Fragment size=4096 (log=2) 
128000 inodes, 256000 blocks 
12800 blocks (5.00%) reserved for the super user 
First data block=0 
8 block groups 
32768 blocks per group, 32768 fragments per group 
16000 inodes per group 
Superblock backups stored on blocks:  
32768, 98304, 163840, 229376 
 
Writing inode tables: done                             
Writing superblocks and filesystem accounting information: done 

Una volta creata la partizione è bene conoscerne la dimensione in blocchi per essere in grado di effettuare con maggior sicurezza le operazioni di estensione o riduzione di una partizione.

Questa è la parte più semplice viene effettuata con comando mke2fs su device che saranno del tipo:

/dev/nomeVG/nomeLV 

nel nostro caso

/dev/vgDATI/lvhome  

A questo punto monteremo /home al posto della directory home del filesystem principale.

root@box:~# mount /dev/vgDATI/lvhome /home 
 
root@box:~# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome    984M   20k  934M   1% /home 

A questo punto è possibile spostare i contenuti originali nelle nuove directory create con LV.

Il file /etc/lvmtab e /etc/lvmtab.d conterranno i dati circa il VG.

Il controllo dello stato delle partizioni (LV) può essere effettuato con il comando lvdisplay:

root@box:/home# lvdisplay /dev/vgDATI/lvhome -v|more 
--- Logical Volume --- 
LV Name                /dev/vgDATI/lvhome 
VG Name                vgDATI 
LV Write Access        read/write 
LV Status              available 
LV #                   1 
# open                 1 
LV Size                1000 MB 
Current LE             250 
Allocated LE           250 

Allocation             next free 
Read ahead sectors     1024 
Block device           58:0 
 
--- Distribution of logical Volume on 1 physical Volume  --- 
PV Name                  PE on PV     reads      writes 
/dev/hdc                 250          56864      121104    
 
--- logical Volume i/o statistic --- 
56864 reads  121104 writes 

--- Logical extents --- 
LE    PV                        PE     reads      writes 
00000 /dev/hdc                  00000  527        2610      
00001 /dev/hdc                  00001  1020       1024      
00002 /dev/hdc                  00002  1021       1024      
00003 /dev/hdc                  00003  1023       1024      
00004 /dev/hdc                  00004  1021       1024      
00005 /dev/hdc                  00005  1010       1024      
00006 /dev/hdc                  00006  1019       1024      
00007 /dev/hdc                  00007  1021       1024      
00008 /dev/hdc                  00008  1022       1024      
00009 /dev/hdc                  00009  1022       1024

[modifica] Ridimensionamento delle partizioni

[modifica] Estensione di una partizione

Il meccanismo LVM si adotta proprio perché le partizioni create possono essere maneggiate a piacimento.

Immaginiamo di aver finito lo spazio di una partizione o comunque di volerlo ampliare:

root@box:/home# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome    984M  446M  489M  48% /home 

utilizzeremo:

root@box:/# lvextend -L 2000M /dev/vgDATI/lvhome 
lvextend -- extending logical Volume "/dev/vgDATI/lvhome" to 1.95 GB 
lvextend -- doing automatic backup of Volume group "vgDATI" 
lvextend -- logical Volume "/dev/vgDATI/lvhome" successfully extended 

E’ possibile specificare il nuovo Volume complessivo -L 2000M oppure il Volume da aggiungere –L+1000M (1000 originali + 1000 aggiunti = 2000M)

A questo punto occorre seguire la procedura che consente l’adattamento della nuova partizione, che comprende l’umount della partizione e l’esecuzione del comando resize2fs che consente di aggiungere i byte che estendono effettivamente la partizione. Solo completando questa procedura avremo la reale estensione dei Volumi.

Smontaggio della partizione:

root@box:/# umount /dev/vgDATI/lvhome   

Esecuzione di e2fsck

root@box:/# e2fsck -f  /dev/vgDATI/lvhome    
e2fsck 1.27 (8-Mar-2002) 

Pass 1: Checking inodes, blocks, and sizes 
Pass 2: Checking directory structure 
Pass 3: Checking directory connectivity 
Pass 4: Checking reference counts 
Pass 5: Checking group summary information 
/dev/vgDATI/lvhome: 189/128000 files (2.1% non-contiguous), 117955/256000 blocks 

Ridimensionamento della partizione:

root@box:/# resize2fs /dev/vgDATI/lvhome   
resize2fs 1.27 (8-Mar-2002) 
The filesystem on /dev/vgDATI/lvhome is now 512000 blocks long. 

Montaggio della partizione per verifica:

mount /dev/vgDATI/lvhome /home 

In effetti guardando il nuovo stato della partizione, possiamo osservare che lo spazio occupato passa da 48% a 24% proprio perché la capacità è raddoppiata.

root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome    1.9G  446M  1.3G  24% /home

[modifica] Riduzione di una partizione

La procedura è molto delicata perché potrebbe intaccare i nostri dati, per cui avere un backup dei dati non è mai una cosa superflua, può essere effettuata in due modalità:

La prima coinvolge direttamente e2fsadm un tool per il ridimensionamento del filesystem:

root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome     984M   20k  934M   1% /home 

La partizione da ridimensionare è lvhome che è di 1000 M e gliene vogliamo togliere 500.

Smontaggio della partizione:

root@box:/# umount /home 

Ridimensioniamo sottraendo 500M:

root@box:/# e2fsadm -L-500M /dev/vgDATI/lvhome 
e2fsck 1.27 (8-Mar-2002) 
Pass 1: Checking inodes, blocks, and sizes 
Pass 2: Checking directory structure 
Pass 3: Checking directory connectivity 
Pass 4: Checking reference counts 
Pass 5: Checking group summary information 
/dev/vgDATI/lvhome: 11/128000 files (0.0% non-contiguous), 4031/256000 blocks 
resize2fs 1.27 (8-Mar-2002) 
Begin pass 3 (max = 8) 
Scanning inode table          XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 

The filesystem on /dev/vgDATI/lvhome is now 128000 blocks long. 
 
lvreduce -- WARNING: reducing active logical Volume to 500 MB 
lvreduce -- THIS MAY DESTROY YOUR DATA (filesystem etc.) 
lvreduce -- doing automatic backup of Volume group "vgDATI" 
lvreduce -- logical Volume "/dev/vgDATI/lvhome" successfully reduced 
 
e2fsadm -- ext2fs in logical Volume /dev/vgDATI/lvhome successfully reduced to 500 MB 

Il messaggio ci dice successfully reduced to 500 MB ma per esserne sicuri la montiamo e guardiamo lo spazio ora a disposizione.

Montiamo la partizione per verifica:

root@box:/# mount /dev/vgDATI/lvhome /home 
 
root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome     492M   20k  467M   1% /home 

La seconda richiede qualche passaggio in più ma è analoga.

La partizione originale è da 1 giga:

root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome    984M   20k  934M   1% /home 

Smontaggio della partizione:

root@box:/# umount /home 

Esecuzione (richiesta) di e2fsck:

root@box:/# e2fsck -f /dev/vgDATI/lvdati 
e2fsck 1.27 (8-Mar-2002) 
Pass 1: Checking inodes, blocks, and sizes 
Pass 2: Checking directory structure 
Pass 3: Checking directory connectivity 
Pass 4: Checking reference counts 
Pass 5: Checking group summary information 
/dev/vgDATI/lvdati: 11/128000 files (0.0% non-contiguous), 4031/256000 blocks 

Questi sono i blocchi disponibili sui quali effettuare la riduzione.

Specifichiamo la dimensione in blocchi, riducendola della metà:

root@box:/# resize2fs /dev/vgDATI/lvdati 128000 
resize2fs 1.27 (8-Mar-2002) 
The filesystem on /dev/vgDATI/lvdati is now 128000 blocks long. 

Montiamo la prtizione:

root@box:/# mount /dev/vgDATI/lvhome /home 
root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvdati    492M   20k  467M   1% /home

[modifica] Ridimensionamento dei Volume Group (VG)

[modifica] Rimozione di un Volume Group (VG)

Per poter rimuovere un Volume Group occorre per prima cosa aver eliminato i Volume logici singolarmente, aver disattivato il VG e poi diventa possibile eliminarlo del tutto. La procedura completa potrebbe essere questa:

Smontare le partizioni:

root@box:/# umount /dev/vgDATI/lvhome 

Eliminazione del LV:

root@box:/# lvremove /dev/vgDATI/lvhome 
lvremove -- do you really want to remove "/dev/vgDATI/lvhome"? [y/n]: y 
lvremove -- doing automatic backup of Volume group "vgDATI" 
lvremove -- logical Volume "/dev/vgDATI/lvhome" successfully removed 

Disattivazione del VG:

root@box:/# vgchange -a n /dev/vgDATI    
vgchange -- Volume group "vgDATI" successfully deactivated 

Rimozione del VG:

root@box:/# vgremove -v /dev/vgDATI 
vgremove -- locking logical Volume manager 
vgremove -- checking Volume group name "/dev/vgDATI" 
vgremove -- checking Volume group "vgDATI" activity 
vgremove -- checking Volume group "vgDATI" existence 
vgremove -- reading data of Volume group "vgDATI" from "/etc/lvmtab" 
vgremove -- checking for logical Volumes in Volume group "vgDATI" 
vgremove -- initializing all physical Volumes of Volume group "vgDATI" 

vgremove -- initializing physical Volume "/dev/hdc" 
vgremove -- storing all initialized physical Volumes of Volume group "vgDATI" on disk(s) 
vgremove -- removing special files of Volume group "vgDATI" 
vgremove -- removing "/etc/lvmtab" entry of Volume group "vgDATI" 
vgremove -- Volume group "vgDATI" successfully removed 
vgremove -- unlocking logical Volume manager 

La procedura è completa.

[modifica] Estensione di un Volume Group (VG) aggiungendo un device

Se volessimo aggiungere un nuovo device (hdd) al nostro gruppo di Volume dovremmo creare un nuovo PV.

root@box ~/ # pvcreate /dev/hdd  
root@box ~/ # vgextend vgDATI /dev/hdd 

In questo modo il device hdd può essere utilizzato “in continuità” per aumentare le dimensione della partizioni che verrebbero a distendersi su due dischi diversi, ma dello stesso Volume logico.

Questo ci fa capire le grandi potenzialità di LVM, come sia possibile aggiungere interi dischi a partizioni esistenti e dilatarne le capacità fino a 255 GB limite imposto per un singolo Volume logico.

Nel nostro caso abbiamo preso due dischi uno da 10 GB e l’atro da 20GB e li abbiamo sommati in un’unica grande partizione (LV) di 30 GB, lo schema dovrebbe rendere più chiara l’operazione:

PV    Phisical Volume  Phisical Volume 
      (hdc - 10 GB)      (hdd - 20 GB)
           |                  |
            \                /
VG           Volume Group DATI 
                   |
LV           Logical Volume 
           hdc+hdd=10 GB+20GB 
              /home ~30GB 

Dopo aver esteso il VG Dati al device hdd dobbiamo effettuare le operazioni necessarie all’allargamento della nostra partizione:

Smontaggio della partizione:

root@box:~# umount /home 

Estensione a 29GB:

root@box:~# lvextend -L 29200M /dev/vgDATI/lvhome 
lvextend -- extending logical Volume "/dev/vgDATI/lvhome" to 28.52 GB 
lvextend -- doing automatic backup of Volume group "vgDATI" 
lvextend -- logical Volume "/dev/vgDATI/lvhome" successfully extended 

Controllo dell'integrità:

root@box:~# e2fsck -f  /dev/vgDATI/lvhome         
e2fsck 1.27 (8-Mar-2002) 
Pass 1: Checking inodes, blocks, and sizes 
Pass 2: Checking directory structure 
Pass 3: Checking directory connectivity 
Pass 4: Checking reference counts 
Pass 5: Checking group summary information 

/dev/vgDATI/lvhome: 11/2567264 files (0.0% non-contiguous), 80579/5120000 blocks 

Ridimensionamento della partizione:

root@box:~# resize2fs /dev/vgDATI/lvhome       
resize2fs 1.27 (8-Mar-2002) 
The filesystem on /dev/vgDATI/lvhome is now 7475200 blocks long. 

Montaggio per verifica:

root@box:~# mount /dev/vgDATI/lvhome /home 
root@box:~# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/vgDATI/lvhome     28G   20k   26G   1% /home 

Lavorando con i blocchi al posto dei MB si possono ottenere dimensionamenti più precisi. Quello che comunque interessava nel nostro caso era estendere la partizione /home su più dischi (un po’ come per lo striping) per poterne aumentare le capacità.

Nel caso in cui si volesse rimuovere il PV dal VG:

root@box ~/ # vgreduce vgDATI /dev/hdd 

Per poter rendere disponibile la partizione subito all’avvio del sistema modifica /etc/fstab in questo modo:

/dev/hda3        swap             swap        defaults         0   0 
/dev/hda2        /                ext3        defaults         1   1 
/dev/hda1        /boot            ext3        defaults         1   2 
/dev/vgDATI/lvhome  /home   ext2   defaults   0  2                     

Il filesystem utilizzato è stato ext2 per comodità funziona comunque anche con ext3 e Reiserfs, anche se per quest’ultimo occorre usare i tools specifici per il ridimensionamento delle partizioni.

[modifica] Estensione di un Volume Group (VG) aggiungendo una partizione

Un caso abbastanza frequente può richiedere di creare un LV da un disco precedentemente partizionato, che non può essere messo totalmente a disposizione del Volume LV.

E’ anche possibile creare un Volume esteso tra un disco ed una singola partizione di un altro disco, che può contenere altre partizioni con normali filesystem. In questo modo non si è costretti a destinare interi dischi ai Volume logici ma si può tranquillamente riutilizzare dischi parzialmente impegnati.

Nel nostro caso:

  • hdc è tutto in LVM;
  • hdd1 è montata su /disco1 in ext3;
  • hdd2 è in LVM.

Configuriamo un disco metà in partizione type linux standard è meta in type LVM (8e).

Per poter fare questo occorre utilizzare fdisk è specificare il tipo di partizione che entrerà nel LV come partizione Linux LVM con type 8e.

Command (m for help): p 

Disk /dev/hdd: 16 heads, 63 sectors, 39535 cylinders 
Units = cylinders of 1008 * 512 bytes 

Device Boot       Start       End    Blocks   Id  System 
/dev/hdd1             1     20000  10079968+  83  Linux 
/dev/hdd2         20001     39535   9845640   83  Linux 

Command (m for help): t 
Partition number (1-4): 2 
Hex code (type L to list codes): 8e 
Changed system type of partition 2 to 8e (Linux LVM) 

Command (m for help): p 

Disk /dev/hdd: 16 heads, 63 sectors, 39535 cylinders  
Units = cylinders of 1008 * 512 bytes 

Device Boot       Start       End    Blocks   Id  System 
/dev/hdd1             1     20000  10079968+  83  Linux 
/dev/hdd2         20001     39535   9845640   8e  Linux LVM 

La partizione hdd1 sarà montata sotto la directory /disco1 è non rientrerà nel LV.

root@box:/# mount 
/dev/hda2 on / type ext3 (rw) 
none on /proc type proc (rw) 
/dev/hda1 on /boot type ext3 (rw) 
none on /dev/pts type devpts (rw,gid=5,mode=620) 
/dev/hdd1 on /disco1 type ext2 (rw) 
 
root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/hdd1             9.5G   20k  8.9G   1% /disco1 

  • hdc è tutto in LVM;
  • hdd è pate in /disco1 (hdd1) e parte in LVM.

Procediamo alla crezione delle partizioni in LV secondo la procedura classica:

Creazione dei PV:

root@box:/# pvcreate /dev/hdc 
pvcreate -- physical Volume "/dev/hdc" successfully created 
 
root@box:/# pvcreate /dev/hdd2 
pvcreate -- physical Volume "/dev/hdd2" successfully created 

Questo ci risponde che la partizione non ha il type giusto.

root@box:/# pvcreate /dev/hdd1 
pvcreate -- invalid partition type 0x83 for "/dev/hdd1" (must be 0x8e) 

Creazione del VG:

root@box:/# vgcreate vgDATI /dev/hdc /dev/hdd2 
vgcreate -- INFO: using default physical extent size 4 MB 

vgcreate -- INFO: maximum logical Volume size is 255.99 Gigabyte 
vgcreate -- doing automatic backup of Volume group "vgDATI" 
vgcreate -- Volume group "vgDATI" successfully created and activated 

oppure se avevate già creato il Volume lo si può aggiungere anche in un secondo momento vgextend vgDATI /dev/hdd2

Creazione LV (esteso tra hdc e hdd2):

root@box:/# lvcreate -L 19000M -n lvhome /dev/vgDATI  
lvcreate -- doing automatic backup of "vgDATI" 
lvcreate -- logical Volume "/dev/vgDATI/lvhome" successfully created 
 
root@box:/# df -h 
Filesystem            Size  Used Avail Use% Mounted on 
/dev/hda2              14G  3.2G   10G  24% / 
/dev/hda1              15M  7.1M  7.3M  49% /boot 
/dev/hdd1             9.5G   20k  8.9G   1% /disco1 
/dev/vgDATI/lvhome     18G   20k   17G   1% /home 
 
root@box:/# mount 
/dev/hda2 on / type ext3 (rw) 
none on /proc type proc (rw) 
/dev/hda1 on /boot type ext3 (rw) 
none on /dev/pts type devpts (rw,gid=5,mode=620) 
/dev/hdd1 on /disco1 type ext2 (rw) 
/dev/vgDATI/lvhome on /home type ext2 (rw) 

Il volume /dev/vgDATI/lvhome si estende tra il disco hdc (interamente) e parte del disco hdd (partizione hdd2).

E’ proprio in queste funzionalità che possiamo osservare la potenzialità e la scalabilità di questo metodo di gestione dello storage.

[modifica] Note

Bisogna ricordarsi che questo non è un sistema che consente di ridondare i dati quindi anche aggiungendo nuovi device (PV Phisical Volumees) non avremo alcuna protezione per i dati per cui è bene fare sempre backup periodici dei dati.

C’è da dire che nonostante una certa semplicità di gestione, il filesystem con LVM è più elaborato rispetto a quello con le tradizionali partizioni, per questo è bene utilizzarlo solo in caso di reale necessità, almeno questo è il mio consiglio.

In ogni caso non fermatevi alle indicazioni offerte in questo documento, ma approfondite soprattutto con l’HOWTO originale.

HOWTO Ufficiale

Questo spiega come creare un LVM con Redhat all’atto dell’installazione del sistema

Autore: Paolo Pavan

Strumenti personali
Namespace

Varianti