|
|
(28 versioni intermedie di 3 utenti non mostrate) |
Riga 1: |
Riga 1: |
| {{Versioni compatibili}} | | {{File_System |
| | |precedente=Udev |
| | |successivo=RAID:_Redundant_Array_of_Indipendent_Disks |
| | }}{{Versioni compatibili|Wheezy|Jessie|Testing_2016|Unstable_2016}}{{Template:LVM}} |
|
| |
|
| == Introduzione ==
| | {{ Warningbox | È buona cosa di norma avere un backup dei propri dati, questo monito vale specialmente per quando si lavora con i filesystem e le partizioni. A buon intenditore poche parole. }} |
| Il Logical Volume Manager è un software a livello kernel Linux che permette una gestione ed allocazione della memoria sui supporti di memoria in modo flessibile e dinamico, ma soprattutto non limitata allo schema rigido delle partizioni.
| |
|
| |
|
| La brillante idea da cui derivano tutte le potenzialità di questo strumento è quella di non utilizzare più le partizioni in maniera classica come definite nell'MBR ma di adoperare al posto di queste dei volumi logici virtuali creati e gestiti dall'''LVM'' sui dispositivi assegnategli. In questa maniera, non essendo più vincolati alle partizioni, ne consegue una gestione molto più fluida dei dispositivi di memorizzazione il cui unico limite è l'immaginazione.
| | Quindi, fate attenzione! |
| | |
| {{ Warningbox | È buona cosa di norma avere un backup dei propri dati, questo monito vale specialmente per quando si lavora con i filesystem e le partizioni. A buon intenditore poche parole. }}
| |
| | |
| ===Vantaggi===
| |
| Tra i principali vantaggi troviamo:
| |
| * Libertà di ampliare/ridurre "le partizioni" (il termina corrretto è ''Logical Volume'');
| |
| * Possibilità di eseguire snapshot ''a caldo'' (senza dover spegnere il computer);
| |
| * Possibilità di estendere una partizione su altri supporti di memoria (modalità ''striped'');
| |
| * Possibilità di implementare una ridondanza delle partizioni (modalità ''mirrored'');
| |
| * Possibilità di trasferire ''a caldo'' "le partizioni" (il termina corrretto è ''Logical Volume'') da un supporto fisico ad un altro.
| |
| | |
| ===Svantaggi===
| |
| Si ravvisa un possibilerallentamento della velocità I/O dei supporti di archiviazione seppure molto trascurabile, una maggiore difficoltà in caso di dover recuperare dati dal disco, possibili [[#Boot Loader e LVM|problemi in fase di boot]] con alcuni boot loader.
| |
| | |
| ===LVM-1 o LVM-2?===
| |
| Da Lenny in avanti è disponibile la versione ''LVM2'' facilmente installabile con l'omonimo pacchetto. La compatibilità tra la versione 1 e 2 è stata mantenuta ed infatti non dovrebbero esservici problemi per una eventuale migrazione.<br />
| |
| In questa guida si è fatto esplicito riferimento a ''LVM2'' ma quasi tutto è replicabile in ''LVM1''.
| |
| | |
| Ad esempio, una delle possibili differenze tra le due versioni, è il fatto che l'''LVM1'' permetta ''snapshot'' solo in lettura, invece nella 2 sono utilizzabili sia in lettura che scrittura.
| |
| | |
| == Cenni teorici ==
| |
| In questa sezione sono introdotti i principi elementi che compongo l'''LVM'' ed è introdotto il funzionamento dello stesso.
| |
| | |
| ===La struttura base dell'''LVM''===
| |
| Il LVM basa il proprio funzionamento sulla seguente struttura:
| |
| ; ''Volume Group'' ('''VG'''): trattasi del più alto livello di astrazione che raggruppa in sé una collezione di Logical Volume e di Physical Device.
| |
| ; ''Physical Device'' ('''PD'''): sono i nostri supporti di memorizzazione e possono essere di qualsiasi tipo, sia Hard Disk, sia nastri, sia memorie solide ma anche ambienti RAID, etc.
| |
| ; ''Logical Volume'' ('''LV'''): l'equivalente nel nostro ''LVM'' in tutto e per tutto di quella che è una partizione su un Hard Disk. L'unica piccola differenza subito evidente è l'etichetta/label (ad es. /dev/nome-''VG''/nome-''LV'' invece del canonico /dev/sda1). Come ogni normale partizione il ''LV'' può contenere un file system a nostro piacimento.
| |
| ; ''Logical Extend'' ('''LE'''): seppure difficilmente avremo a che farci direttamente, i ''LE'' sono i pezzetti in cui viene suddiviso il ''LV'' in modo di poterlo allocare tra i vari ''PE'' disponibili al ''VG''.
| |
| ; ''Physycal Extent'' ('''PE'''): ad esempio, quando vogliamo aggiungere un ''PD'' al nostro ''VG'', dobbiamo per prima cosa iniziarlo con il comando <tt>pvcreate</tt>. Questo comando altro non fa che dividere il supporto in tanti spazi in modo da poter poi creare una corrispondenza tra i ''LE'' ed i ''PE'' e così allocare lo spazio necessario per i ''LV''.
| |
| | |
| In modo un po' stilizzato, possiamo descrivere il passaggio dal concetto di partizioni a quello di ''LV'' nel seguente modo:
| |
| <pre>
| |
| hd1 sda2 (Physical Device - partizioni)
| |
| \ /
| |
| \ /
| |
| server1 (Volume Group)
| |
| / | \
| |
| / | \
| |
| / | \
| |
| Home Root Dati (Logical Volume)
| |
| </pre>
| |
| | |
| La spiegazione di come si comporta e funziona l'''LVM'' è già stata tratta nell'<u>e-zine numero 5</u> di ''debianizzati.org'' nello sviluppo dell'articolo [http://e-zine.debianizzati.org/web-zine/numero_5/?page=46|'''LVM mirror''']. Ecco a seguire [http://e-zine.debianizzati.org/web-zine/numero_5/?page=48| il riporto dell''''Introduzione teorica all'LVM''']:
| |
| | |
| {| style="-moz-border-radius: 0.5em; width:90%; margin-top:+.7em; background-color:#f0f8ff; border:1px solid #87ceeb; color:#000" align="center"
| |
| |-
| |
| |''LVM'' è l'acronimo di '''Logical Volume Manager''', ovvero di Gestore dei Volumi Logici di Linux. Ma quindi cosa sono questi ''volumi logici''?<br />
| |
| L'idea di fondo è di sostituire al concetto di partizione un diverso contenitore (il '''Logical Volume''') il quale non dipende più dalle limitate informazioni contenibili nell'[http://guide.debianizzati.org/index.php/MBR MBR] ma, tramite le gestione del kernel Linux, si può liberamente spostare/raggruppare/estendere da un settore all'altro di ogni disco, quasi come se fosse un file o una cartella all'interno del ''file system''.<br />
| |
| <br />
| |
| All'atto pratico <u>la modalità di funzionamento dell'''LVM''</u> può essere riassunta nel seguente modo. L'unità principale sulla quale si basa il sistema è il '''Volume Group'''. Detto ''VG'' verrà da noi dotato di una certa capacità di memoria pari alla capacità di tutti i supporti di massa che gli assegnaremo.<br />
| |
| Tali supporti possono essere dischi SATA, PATA, USB, configurazioni RAID, SSD o quant'altro e mi riferirò ad essi come '''Physical Device'''. I ''PD'' possono anche non avere alcuna partizione, seppure si consiglia di dotarli almeno di una partizione primaria siccome altri sistemi operativi, qualora non riscontrino alcuna partizione, potrebbero inavvertitamente sovrascriverli.<br />
| |
| I ''PD'', quando sono assegnati ad un ''VG'', sono gestiti dall'''LVM'' suddividendo lo spazio disponibile su ognuno di essi tramite una suddivisione in unità fisiche ridotte (di default di qualche Mb) dette '''Physical Extent'''. Per questo motivo, prima di aggiungere un ''PD'' ad un ''VG'' sarà necessario inizializzarlo proprio per creare su di esso i vari ''PE''.<br />
| |
| Quando creeremo un '''Logical Volume''' (ovvero lo spazio che useremo come "partizione") l'''LVM'' gestirà lo spazio virtuale (logico) da noi richiesto suddividendolo in tanti '''Logical Extent''' tali da permettere di distribuire ogni ''LE'', che altro non è che un pezzo del nostro ''LV'', tra i ''PD''. Questa allocazione avviene facendo corrispondere ad ogni ''LE'' un determinato ''PE'' secondo necessità.<br />
| |
| <br />
| |
| Da tale modo di spezzettare i ''LV'' ed i ''PD'' nasce tutta la potenzialità dell'''LVM''. Infatti, quando all'interno del nostro ''VG'' creeremo un ''LV'' l'''LVM'' non sarà obbligato a distribuire lo spazio da noi richiesto tra i ''PD'' ma tra le ''PE''. Pertanto sarà possibile spostare/allargare/ridurre il ''LV'' semplicemente agendo sulla distribuzione delle ''LE'' tra i ''PE'' disponibili.<br />
| |
| Ad esempio, quando in questo articolo creeremo il nostro ''LV'' in modalità mirrored, l'''LVM'' si limiterà semplicemente a sincronizzare alcune ''PE'' di un ''PD'' con le ''PE'' del nostro secondo ''PD''. Pertanto ad ogni coppia di ''PE'' sincronizzata corrisponderà il medesimo ''LE'' (e quindi il medesimo ''LV'').<br />
| |
| <br />
| |
| Per chi, perso tra queste sigle, volesse maggiormente approfondire segnalo alcuni utili HOWTO [http://en.wikipedia.org/wiki/Logical_volume_management [2]] [http://tldp.org/HOWTO/LVM-HOWTO/index.html [3]].<br />
| |
| <br />
| |
| Chi è riuscito a seguire fin qui il discorso, ecco un grafico esemplificativo del funzionamento. In questo caso i ''LE'' sono omessi in quanto corrispondono 1:1 ai ''PE'', ovviamente se vi ci fosse un ''mirror'' la corrispondenza tra ''LE'' e ''PE'' sarebbe 1:2 (un ''LV'' fa riferimento a due diversi spazi sui ''PD''). Infine si osservi il ''LV'' /home, quest'ultimo è in modalità ''striped'' ovvero è in parte sul primo ''PD'' ed in parte sul secondo ''PD''.<br />
| |
| [[immagine:500px-LVM1.svg.png]]
| |
| |}
| |
| | |
| ==Gestire i Volume Group==
| |
| ===Creare===
| |
| * <pre>pvcreate /dev/nome_device-nome_partizione</pre>
| |
| :Inizializza il disco/partizione per essere utilizzato come Volume Group (crea una specie di tabella di partizioni). Se si utilizza il device anche con altri OS si sconsiglia l'uso dell'intero supporto consigliando di utilizzare una partizione, ampia anche come tutto il supporto stesso. Altrimenti altri OS potrebbero non riconoscere il LVM e sovrascriverlo. Tradotto questo significa non usare un comando del tipo ''pvcreate /dev/sdX'', ma piuttosto ''pvcreate /dev/sdX1'', dove ''sdX1'' è l'unica partizione (cui viene riservato l'intero spazio disponibile) presente sul disco ''sdX''.
| |
| *<pre>vgcreate nome_Volume_Group /dev/supporto1 /dev/supporto2 ...</pre>
| |
| :Crea un Volume Group con un dato nome utilizzando la lista di supporti fisici. Questi devono essere stati prima opportunamente inizializzati con <code>pvcreate</code>.
| |
| | |
| ===Rimuovere===
| |
| *<pre>vgremove nome_Volume_Group</pre>
| |
| :Rimuovi il Volume Group indicato.
| |
| | |
| ===Modificare===
| |
| *<pre>vgchange -a y nome_Volume_Group</pre>
| |
| :Attiva il Volume Group indicato permettendone l'accesso. Per disattivare il VG usare l'opzione -a n (Avaible No).Con questo comando è possibile anche modificare altre opzioni più specifiche.
| |
| *<pre>vgextend nome_Volume_Group percorso_Physical_Device</pre>
| |
| :Aggiunge al VG il desiderato PD. Ricordarsi di inizializzare prima il PD con <code>pvcreate</code>. Si consiglia <code>pvdisplay percorso_Physical_Device</code> per verificare prima che la partizione/PD sia libera.
| |
| *<pre>vgreduce nome_Volume_Group percorso_Physical_Device</pre>
| |
| :Toglie il PD dal VG.
| |
| | |
| ==Gestire i Logical Volume==
| |
| | |
| ===Creare===
| |
| <pre>lvcreate -L 1500 -n dati server1</pre>
| |
| Lvcreate permette di creare i LV. Le opzioni disponibili sono numerose, nell'esempio posto è stato creato un LV di 1.500 Mb, di nome dati ed all'interno del VG server1.
| |
| | |
| Inoltre è possibile specificare anche su quale PD creare il LV. Basta aggiungere il PATH corrispondente alla fine del comando. Questo può risultare utile in una logica di riduzione dei rischi di perdita di dati.
| |
| | |
| Creato il LV sarà necessario formattarlo in modo opportuno affinché diventi fruibile.
| |
| | |
| ===Rimuovere===
| |
| <pre>umount LogicalVolume_da_rimuovere
| |
| lvremove LogicalVolume_da_rimuovere</pre>
| |
| Si noti che, prima di poterlo eliminare, sia necessario smontarlo.
| |
| | |
| ===Modificare===
| |
| <pre>lvextend -L +1G LogicalVolumePath</pre>
| |
| '''Aumenta''' di un Giga il LV. In alternativa è possibile indicare con <code>-L 10G</code> per ampliare fino a 10G totali.<br/>Per terminare la procedura si consiglia se si adotta l'ext2 di smontare prima le partizioni, con l'ext3 non dovrebbero esserci problemi per l'aumento online ma pare che i rischi siano elevati. Premesso ciò, dopo aver ampliato il LV, si può procedere ad adattare anche il filesystem tramite <pre>resize2fs LogicalVolumePath </pre>Ovviamente quest'ultimo comando dipende dal filesystem, ad esempio con xfs si dovrà utilizzare <code>xfs_growfs</code>
| |
| | |
| <pre>lvreduce -L -1G LogicalVolumePath</pre>
| |
| '''Riduce''' di un Giga il LV. Ovviamente, se non si vogliono perdere dati, sarà necessario <u>prima di dare il comando</u> per ridurre il LV:
| |
| <pre>umount LogicalVolumePath
| |
| e2fsck LogicalVolumePath (valido solo per i filesystem ext2/ext3/ext4)
| |
| reduce2fs LogicalVolumePath -1G (valido solo per i filesystem ext2/ext3/ext4)</pre>
| |
| | |
| ===Spostare i LV da un PD ad un altro===
| |
| Per spostare i dati usate il comando:
| |
| <pre>pvmove [--alloc AllocationPolicy] [-i|--interval Seconds] [-v|--verbose]
| |
| [-n|--name LogicalVolume] [SourcePhysicalVolume[:PE[-PE]...] [DestinationPhysicalVolume[:PE[-PE]...]...]]</pre>
| |
| Il comando è abbastanza lento nell'esecuzione, a seconda inoltre delle velocità dei device.
| |
| | |
| Se volete annullare il comando:
| |
| <pre>pvmove --abort</pre>
| |
| Se c'è un errore e volete portare a termine l'operazione (proprio senza opzioni):
| |
| <pre>pvmove</pre>
| |
| | |
| ''note'': pvmove funziona passando in consegna i LV da spostere al ''device'' pvmove fino a compimento del lavoro. Potete verificare ciò con il comando pvs oppure ''lvs -o +deviecs''.
| |
| | |
| == Casi speciali ==
| |
| ===Boot Loader e LVM===
| |
| Al momento Lilo e Grub hanno difficoltà ad accedere al LVM per effettuare il boot. Con Grub2 è possibile risolvere la situazione ed eseguire il boot da LVM. Però considerata l'esiguità della dimensione della cartella /boot consiglio, sia per semplificarsi la vita, sia per una maggiore sicurezza, di posizionare la cartella /boot su una partizione al di fuori del LVM. Questa procedura permette anche di semplificare notevolmente le eventuali operazioni di recupero in caso di MBR danneggiato.
| |
|
| |
|
| | Per il resto buona lettura. |
|
| |
|
| {{Autori | | {{Autori |
| |Autore = [[Utente:Risca86|Risca86]] 21:04, 29 mar 2010 (CEST) | | |Autore = [[Utente:Risca86|Risca86]] |
| | |Estesa_da = |
| |Verificata_da = | | |Verificata_da = |
| : [[Utente:Wtf|Wtf]] | | : [[Utente:Wtf|Wtf]] (eccetto parte II) |
| |Numero_revisori = 1 | | : [[Utente:HAL 9000|HAL 9000]] 20:55, 10 apr 2016 (CEST) |
| | | Numero_revisori = 2 |
| }} | | }} |
|
| |
|
| | | [[Categoria:Filesystem]][[Categoria:Hard Disk]] |
| [[Categoria:Filesystem]] | |
| [[Categoria:Hard Disk]] | |