Repository 32bit  Forum
Repository 64bit  Wiki

Slackware LVM HOWTO: differenze tra le versioni

Da Slacky.eu.
(Ridimensionamento dei Volume Group (VG)
(Rimozione di un Volume Group (VG))
Riga 374: Riga 374:
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 384: Riga 386:
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 401: Riga 405:
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 ===

Versione delle 21:39, 13 set 2006


WORK IN PROGRESS

Indice

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.

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.

Legenda

Le sigle utilizzate nel documento:

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

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.

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.

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 

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.

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

Ridimensionamento delle partizioni

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

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

Ridimensionamento dei Volume Group (VG)

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.

Estensione di un Volume Group (VG) aggiungendo un device

Estensione di un Volume Group (VG) aggiungendo una partizione

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