Disclaimer :
La versione originale di questo articolo è stata pubblicata da IBM
developerWorks ed è di proprietà di Westtech Information Services. Questo
documento è una versione aggiornata dell'articolo originale, e contiene
numerosi miglioramenti apportati dal Gentoo Linux Documentation team.
Questo documento non è mantenuto attivamente.
|
Imparare Linux LVM, Parte 2
1.
L'aggiornamento di cvs.gentoo.org
Introduzione
Nel primo articolo su LVM, sono
stati spiegati i concetti che stanno dietro a LVM. Adesso è il momento di
mettere in azione quanto visto su LVM. In questo articolo, verrà messo a punto
LVM sul server cvs ufficiale di Gentoo Linux, cvs.gentoo.org. Anche se
cvs.gentoo.org ha un solo disco rigido, la flessibilità di LVM comporta
ugualmente un incredibile miglioramento rispetto alle tecniche classiche di
partizionamento statico. Verranno mostrati tutti i passi del processo di
conversione a LVM, così che gli interessati potranno effettuare una transizione
simile su una delle proprie macchine.
Avvertenza:
In quanto implementare LVM è un grosso cambiamento per il sistema (che coinvolge
la creazione di nuove partizioni e altre azioni potenzialmente pericolose) può
essere una buona idea effettuare un backup completo del sistema prima di
intraprendere il cammino. Nel caso non si intenda effettuare un backup, l'autore
si augura che la macchina usata sia destinata agli esperimenti e non contenga
dati importanti. È importante osservare che l'autore non ha mai incontrato alcun
problema nel passaggio a LVM, ma è sempre meglio essere preparati nel caso in
cui qualcosa vada storto.
|
Fatte le dovute premesse, si può procedere. Prima di iniziare il processo di
conversione, è stato fatto un aggiornamento di cvs.gentoo.org così che venissero
usati i pacchetti che seguono. Nel momento in cui è stato effettuata la
transizione a LVM, queste erano le ultime versioni disponibili (vedere Risorse più avanti in questo articolo):
- Linux kernel 2.4.1-ac19
- LVM 0.9.1_beta5
- reiserfs-utils 3.6.25
Per iniziare, il disco rigido. cvs.gentoo.org ha un buon disco rigido nuovo IBM
da 45 GB al suo interno; comunque, quando è stato installato Gentoo Linux su
cvs, sono stati partizionati solamente 10 gigabytes circa del disco, lasciando i
rimanenti 35 GB per partizioni future. Questi sono alcuni piccoli trucchi di cui
l'utente ha bisogno quando non usa LVM: lasciare parti del disco non
partizionate è un modo rozzo ma efficace per permettere future espansioni.
Comunque, con LVM esiste un approccio migliore.
Il problema dello spazio
Nelle poche settimane precedenti, era stato notato che la partizione ReiserFS di
root era diventata lenta riempiendosi, come si può notare dal seguente stampato
di df:
Codice 1.1: Spazio libero quasi esaurito |
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 9765200 6989312 2775888 72% /
tmpfs 269052 0 269052 0% /dev/shm
|
In realtà, una partizione di root piena al 72% non è esattamente una crisi, ma
neanche una splendida situazione. ReiserFS, come molti altri filesystem, degrada
nelle prestazioni via via che si riempie, ed era solo questione di tempo prima
che il suddetto filesystem di root fosse completamente pieno e le sue
performance subissero una tracollo.
È stato deciso quindi di porre rimedio al problema usando LVM per creare un
nuovo volume logico fuori sui 35 GB di spazio attualmente non partizionato alla
fine del disco rigido. Perciò è stato creato un filesystem su questo volume e
sono stati spostati una buona parte dei contenuti di /dev/hda3 su
di esso.
Se chi legge ha intenzione di fare una transizione simile su una delle proprie
macchine, la prima cosa di cui ha bisogno è trovare una parte del proprio
filesystem di root adatta da spostare su un volume logico. Per l'autore, la
scelta è stata facile: l'albero sotto /home occupava circa 5.7 GB.
Muovendo /home sul volume logico, il filesystem di root dovrebbe
scendere all'incirca al 20% della sua capacità. Dato che molti dei nuovi dati
verranno poi aggiunti su /home, il filesystem di root dovrebbe
probabilmente restare all'incirca intorno al 20% della propria capacità: una
situazione veramente promettente.
L'inizio di una soluzione
Per iniziare la conversione, è stato aggiunto prima di tutto alla partizione lo
spazio inutilizzato alla fine del disco rigido. Usando cfdisk, è stata
creata una partizione di 35 GB (/dev/hda5) e impostato il tipo di
tale partizione a 8E (il tipo ufficiale per le partizioni LVM). Dopo
questo cambiamento, la tabella delle partizioni risultava la seguente:
Codice 1.2: La nuova tabella delle partizioni |
# sfdisk -l
Disk /dev/hda: 89355 cylinders, 16 heads, 63 sectors/track
Units = cylinders of 516096 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/hda1 * 0+ 247 248- 124960+ 83 Linux
/dev/hda2 248 743 496 249984 82 Linux swap
/dev/hda3 744 20119 19376 9765504 83 Linux
/dev/hda4 20120 89354 69235 34894440 5 Extended
/dev/hda5 20120+ 89354 69235- 34894408+ 8e Linux LVM
|
Dal momento in cui era presente una partizione vuota di 35 GB, era possibile
procedere alla sua inizializzazione per l'uso con LVM. Di seguito la procedura:
primo, inizializzazione dei 35 gigabytes come volume fisico; quindi,
creazione di un gruppo di volume utilizzando il sopra citato volume
fisico, e infine, allocazione di alcune entità nel gruppo di volume, andando
così a creare un volume logico che dovrebbe contenere il nuovo filesystem
e ospitare tutti i file che si trovano al momento in /home.
Per iniziare il processo, è stato usato il comando pvcreate per
inizializzare /dev/hda5 come volume fisico:
Codice 1.3: Creazione del volume fisico |
# pvcreate /dev/hda5
pvcreate -- physical volume "/dev/hda5" successfully created
|
pvcreate allestisce in questo caso una speciale area di "gestione" su
/dev/hda5, chiamata VGDA (volume group descriptor area). LVM
utilizza quest'area per tenere traccia di come le entità fisiche sono allocate,
tra le altre cose.
Il passo successivo consiste nel creare il gruppo di volume e aggiungere
/dev/hda5 a questo gruppo. Il gruppo di volume dovrebbe funzionare
come una vasca di entità (pezzi di blocchi di memoria). Una volta creato il
gruppo di volume, possono venire creati tanti volumi logici quanti si desidera.
Nel caso specifico, è stato deciso che il gruppo di volume dovrebbe essere
chiamato "main":
Codice 1.4: Creazione del gruppo di volume |
# vgcreate main /dev/hda5
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 "main"
vgcreate -- volume group "main" successfully created and activated
|
Il comando vgcreate fa un paio di cose. Oltre a creare il gruppo di
volume "main", impone anche a /dev/hda5 di usare entità di 4 Mb, la
dimensione predefinità per le entità. Questo significa che ogni volume logico
che verrà creato dallo specifico gruppo di volume potrà essere espanso e ridotto
tramite incrementi di 4 Mb.
A causa delle limitazioni del kernel, la dimensione delle entità determina la
dimensione massima che un volume logico può assumere. Come è possibile notare
dal precedente esempio, una dimensione per entità pari a 4 MB impone una
limitazione alla dimensione del volume logico pari a 256 gigabyte, che è una
dimensione per volumi logici facilmente raggiungibile se vengono aggiunti
diversi componenti ad alta capacità al proprio gruppo di volume. Se esiste la
possibilità che i volumi finiscano col diventare più grandi di 256 GB a testa, è
raccomandabile di specificare una dimensione maggiore per le entità al momento
dell'uso di vgcreate. La dimensione dell'entità può variare liberamente
fra 8 KB e 512 MB, e deve essere sempre un multiplo di due. Aumentando la
dimensione delle entità al di sopra dei 4 MB, la dimensione massima per volumi
fisici sarà scalata di conseguenza, fino a un massimo di 1 petabyte (anche se la
dimensione limite attuale nel mondo reale è pari a 2 terabytes su sistemi x86).
Per esempio, volendo creare un gruppo di volume con entità di dimensione pari a
32 megabyte, dovrà essere digitato:
Codice 1.5: Impostare una dimensione maggiore per le entità |
# vgcreate -s 32M main /dev/hda5
|
32 MB è una buona dimensione per le entità, dato che una granularità di 32 MB è
ancora gestibile e porta la dimensione massima per volumi logici a 2 terabytes
all'avvio. Una volta che il gruppo di volume è stato creato, è possibile
visualizzarne le informazioni digitando vgdisplay:
Codice 1.6: Esaminare le informazioni di volume |
# vgdisplay
--- Volume group ---
VG Name main
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 0
Open LV 0
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 33.28 GB
PE Size 4 MB
Total PE 8519
Alloc PE / Size 0 / 0
Free PE / Size 8519 / 33.28 GB
VG UUID 2qC2H2-iA8s-qW6F-cwXx-JVIh-I6VC-VVCGmn
|
Adesso che il gruppo di volume è pronto, sarà possibile creare un volume logico.
Nel caso specifico è stato deciso di renderlo inizialmente di dimensione pari a
8 gigabytes e chiamarlo "lv_home":
Codice 1.7: Creazione del volume logico |
# lvcreate -L8G -nlv_home main
lvcreate -- doing automatic backup of "main"
lvcreate -- logical volume "/dev/main/lv_home" successfully created
|
Quindi, è stato creato un filesystem sul volume:
Codice 1.8: Creazione del filesystem |
# mkreiserfs /dev/main/lv_home
<----------- MKREISERFSv2 ----------->
Block size 4096 bytes
Block count 2097152
Used blocks 8275
Journal - 8192 blocks (18-8209), journal header is in block 8210
Bitmaps: 17, 32768, 65536, 98304, 131072, 163840,
196608, 229376, 262144, 294912, 327680, 360448,
393216, 425984, 458752, 491520, 524288, 557056,
589824, 622592, 655360, 688128, 720896, 753664,
786432, 819200, 851968, 884736, 917504, 950272,
983040, 1015808, 1048576, 1081344, 1114112,
1146880, 1179648, 1212416, 1245184, 1277952,
1310720, 1343488, 1376256, 1409024, 1441792,
1474560, 1507328, 1540096, 1572864, 1605632,
1638400, 1671168, 1703936, 1736704, 1769472,
1802240, 1835008, 1867776, 1900544, 1933312,
1966080, 1998848, 2031616, 2064384
Root block 8211
Hash function "r5"
ATTENTION: ALL DATA WILL BE LOST ON '/dev/main/lv_home'! (y/n)y
journal size 8192 (from 18)
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..done.
|
Una volta creato il filesystem, è possibile montarlo su
/mnt/newhome:
Codice 1.9: Montare il nuovo volume |
# mkdir /mnt/newhome
# mount /dev/main/lv_home /mnt/newhome
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 9765200 6989840 2775360 72% /
tmpfs 291388 0 291388 0% /dev/shm
/dev/main/lv_home 8388348 32840 8355508 1% /mnt/newhome
|
Come è stato possibile vedere prima, tutto è quasi pronto per copiare sopra
tutti i dati in /home. Prima di cominciare, è meglio passare al
runlevel 1 per assicurarsi che nessun utente o processo voglia accedere o
modificare file in /home mentre vengono copiati:
Codice 1.10: Passare al runlevel 1 |
# init 1
|
A questo punto, comincia la copia dei file:
Codice 1.11: Copiare i file nella nuova cartella |
# cp -avx /home/* /mnt/newhome
|
Nel caso in esempio, la copia è stata completate in circa dieci minuti. Quindi,
è stata fatta una copia di backup dell'originale cartella /home in
/home.old, nel caso in cui qualcosa sia andato storto durante la
copia. È stato poi creato un nuovo punto di montaggio, e rimontata la nuova home
su /home:
Codice 1.12: Il nuovo punto di montaggio |
# cd /
# mv home home.old
# mkdir home
# umount /mnt/newhome
# mount /dev/main/lv_home /home
|
Adesso, è arrivato il momento di mettere a punto il server così che la nuova
partizione /home possa risultare disponibile ogni volta che la
macchina viene avviata. Prima di tutto, deve essere modificato il file
/etc/fstab così da includere l'opzione /home:
Codice 1.13: Modificare fstab |
/dev/hda3 / reiserfs defaults 1 1
/dev/main/lv_home /home reiserfs defaults 2 2
/dev/hda2 none swap sw 0 0
/dev/hda1 /boot reiserfs noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0
none /dev/pts devpts mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
|
In seguito, vanno apportate modifiche minori agli script di inizializzazione.
Questo si ottiene modificando lo script d'avvio "checkroot" così che il seguente
comando possa essere eseguito immediatamente dopo che la partizione di root è
stata ri-montata in lettura/scrittura:
Codice 1.14: Modificare lo script d'avvio |
/sbin/vgscan
/sbin/vgchange -a y
|
Ancora, deve essere modificato lo script per smontare i filesystem che viene
chiamato allo spegnimento, così che il seguente comando possa essere eseguito
immediatamente dopo che tutti i filesystem sono stati smontati:
Codice 1.15: Modificare lo script di spegnimento |
/sbin/vgchange -a n
|
Una volta completati questi passi, basta riavviare la macchina, e notare con
piacere che tutto funziona perfettamente. Dopo un giorno o più senza alcun
problema, potrà essere cancellata /home.old per liberare un po' di
spazio sul filesystem di root. Il passaggio a LVM è avvenuto con successo.
La bellezza di LVM
Mentre la transizione a LVM non la si può definire banale, una volta che il
passaggio è completo, gestire i filesystem diventa tremendamente facile. Per
fare un esempio, l'autore ha deciso di ridimensionare il proprio volume logico
su /home, aggiungendo circa 2 gigabytes ulteriori di spazio alla
fine del filesystem. Per prima cosa, ha aggiunto capacità addizionale al proprio
volume logico "lv_home", e poi ha usato il programma resize_reiserfs per
espandere il filesystem così che potesse usare questa capacità addizionale. Di
seguito i due comandi che permettono tutto questo:
Codice 1.16: Usare spazio aggiuntivo |
# lvextend -L+2G /dev/main/lv_home
# resize_reiserfs -f /dev/main/lv_home
|
Nell'arco di circa un secondo, il filesystem su /home è stato
allargato di 2 GB; sorprendentemente, non c'è stato bisogno di riavviare,
passare al runlevel 1, o anche smontare /home per effettuare il
ridimensionamento. Tutto ha continuato a funzionare come aveva fatto prima. Non
è fantastico? Di seguito lo stato attuale del filesystem, dopo l'operazione:
Codice 1.17: Spazio sul filesystem |
# df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 9765200 1413340 8351860 15% /
/dev/main/lv_home 10485436 5609836 4875600 54% /home
|
È possibile scoprire come LVM può realmente rendere il lavoro di un
amministratore di gran lunga più facile. Nel futuro, c'è la speranza di poter
muovere parti addizionali del filesystem di root su LVM, ed eventualmente anche
convertire il filesystem di root all'interno di un volume logico su LVM. Le
risorse seguenti aiuteranno ad apprendere altro ancora riguardo a LVM.
Risorse
-
Per i concetti relativi a LVM e consigli su come recuperare le ultime patch
per il kernel e avere gli strumenti sul proprio sistema, si veda l'articolo
precedente, Imparare Linux LVM,
Parte 1.
-
Collegamento all'archivio
LVM su RedHat.
-
Gli impazienti vorranno dare un'occhiata all'LVM HOWTO di Heinz
Mauelshagen, che contiene diversi esempi su come impostare gruppi di
volume e volumi logici.
-
Esiste anche un interessante HOWTO che mostra all'utente
come impostare il proprio filesystem di root su un volume logico. Una
volta che LVM-0.9.1_final sarà rilasciato, l'autore potrebbe provare a
farlo.
-
Andreas Dilger è coinvolto con il progetto Linux LVM e possiede un ben fatto
ridimensionatore di filesystem ext2 online.
-
ReiserFS è un eccellente filesystem
(specialmente in combinazione con LVM). Se si sta usando ReiserFS, si vorrà
prelevare l'archivio reiserfs-utils, che contiene un programma chiamato
reiserfs_resize -- permette il ridimensionamento al volo del
filesystem ReiserFS.
-
Per maggiori informazioni su come impostare volumi per il RAID software in
Linux, vedere la Parte
1 e la Parte 2
della serie di Daniel sul RAID software.
-
Per un ripasso, vedere il tutorial su come
compilare il kernel Linux di Daniel.
|
|