Slackware LVM HOWTO: differenze tra le versioni
(→Formattazione e montaggio delle partizioni) |
(→Estensione di una partizione) |
(Nessuna differenza)
|
Versione delle 22:25, 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 create gli 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 Volumei:
root@box:/# umount /dev/vgDATI/lvhome 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 root@box:/# resize2fs /dev/vgDATI/lvhome resize2fs 1.27 (8-Mar-2002) The filesystem on /dev/vgDATI/lvhome is now 512000 blocks long.
Mount 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
Ridimansionamento dei Volume Group (VG
Rimozione di un Volume Group (VG)
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.
Questo spiega come creare un LVM con Redhat all’atto dell’installazione del sistema
Autore: Paolo Pavan