LVM/it

LVM (Logical Volume Manager) consente agli amministratori di creare meta dispositivi che forniscono un livello di astrazione tra un file di sistema e la memoria fisica che viene utilizzato al di sotto. I meta dispositivi (su cui sono posti i file system) sono "volumi logici", che utilizzano memoria dai lotti di memoria chiamati "volume groups". Un "volume groups" (gruppo di volumi) viene fornito con uno o più "physical volumes" (volumi fisici), che sono i veri dispositivi su cui sono memorizzati i dati.

I volumi fisici possono essere partizioni, interi hard disk SATA raggruppati come JBOD (Just a Bunch Of Disks), sistemi RAID, iSCSI, Fibre Channel, eSATA ecc...

Installazione
LVM è gestita da entrambi, drivers kernel-level e applicazioni su spazio utente (user-space), per gestire la configurazione di LVM.

Kernel
Attivare le seguenti opzioni del kernel:

Software
Installare il pacchetto :

Configurazione
La configurazione di LVM è eseguita su più livelli:
 * 1) Gestione di LV, PV e VG attraverso le utilità di gestione;
 * 2) Messa a punto del sottosistema LVM attraverso il file di configurazione;
 * 3) La gestione dei servizi a livello di distribuzione;
 * 4) Configurazione tramite una ram iniziale del file system (initramfs).

La gestione dei volumi logici e fisici nonché i gruppi di volumi viene gestita tramite il capitolo Utilizzo.

File di configurazione di LVM
LVM ha un vasto file di configurazione in. La maggior parte degli utenti non avranno bisogno di modificare le impostazioni in questo file per iniziare ad utilizzare LVM.

Gestione del servizio
Gentoo fornisce il servizio di LVM per rilevare e attivare i gruppi di volumi e i volumi logici automaticamente.

Il servizio può essere gestito attraverso il sistema di init.

openrc
Per avviare LVM manualmente:

Per avviare LVM in fase di avvio:

systemd
Per avviare LVM manualmente:

Per avviare LVM in fase di avvio:

Utilizzare LVM in un initramfs
La maggior parte dei bootloader non può essere avviata direttamente da LVM - né GRUB legacy né LILO possono farlo. Grub 2 PUO' avviare da un volume logico LVM lineare, volume logico con mirroring e forse alcuni tipi di volumi logici RAID. Attualmente nessun bootloader supporta volumi logici sottili.

Per questa ragione è raccomandabile utilizzare una partizione di avvio non-LVM e montare la root LVM da initramfs. Tale initramfs può essere generato automaticamente tramite genkernel, e dracut:


 * può avviare da tutti i tipi tranne dai volumi sottili (in quanto non costruisce la copia del pacchetto binario dall'host di compilazione) e forse anche RAID10 (il supporto RAID10 richiede LVM2 2.02.98, ma genkernel 2.02.89, tuttavia, se i binari statici sono disponibili, può copiare quelli);
 * può avviare da tutti i tipi di volumi, ma ha bisogno di un nuovo pacchetto o i binari sottili risultanti saranno rotti (See );
 * dovrebbe avviare tutti i tipi, ma include solo il supporto sottile initramfs se l'host viene eseguito su una root sottile.

Genkernel/Genkernel-next
Emergere o il pacchetto o ilpacchetto. La USE flag statica può anche essere abilitata per il pacchetto così che genkernel utilizzerà il sistema binario (altrimenti compilerà la propria copia privata). Il seguente esempio compilerà solo un initramfs (non un interno kernel) e abiliterà il supporto per LVM.

La pagina di manuale di genkernel delinea le altre opzioni a seconda delle esigenze del sistema.

L'initrd richiederà i parametri per stabilire come avviare LVM, ed essi sono forniti allo stesso modo di altri parametri del kernel. Per esempio:

Dracut
Il pacchetto è stato importato dal progetto Red Hat e offre uno strumento simile per generare un initramfs. Dal momento che è attualmente in ~arch per essere testato, gli utenti dovranno accept it (mediante ) per emergerlo. Prima di fare ciò, la variabile  dovrebbe essere aggiunta sul file. Altri moduli possono essere desiderati, fare riferimento al Dracut. In generale, il seguente comando genererà un predefinito initramfs funzionale.

L'initrd richiederà parametri per stabilire come avviare LVM, e questi sono in dotazione come gli altri parametri del kernel. Per esempio:

Per una lista globale delle opzioni di LVM all'interno di vedere la sezione nel Manuale di Dracut.

Utilizzo
LVM organizza la memoria in tre diversi livelli come segue:
 * dichi fissi, partizioni, sistemi RAID o altri mezzi di memorizzazione vengono inizializzati come Volumi Fisici (PVs)
 * Volumi fisici (PV) sono raggruppati in Gruppi di Volumi (VG)
 * Volumi logici (LV) sono gestiti in Gruppi di Volumi (VG)

PV (Volume Fisico)
I Volumi Fisici sono gli attuali hardware o sistemi di memoria di LVM.

Partizionamento
Il tipo di partizione per "LVM" è "8e" (LVM Linux).

Ad esempio, per impostare il tipo tramite per una partizione su :

In, creare partizioni utilizzando il tasto e variare il tipo di partizione con il tasto  a "8e".

Creare PV
I volumi fisici possono essere creati/inizializzati con il comando.

Ad esempio, il seguente comando crea un volume fisico nella prima partizione primaria di e :

Lista PV
Con il comando, si può avere una panoramica di tutti i volumi fisici attivi sul sistema.

Se devono essere visualizzati più volumi fisici, può rilevare i volumi fisici inattivi, quindi attivarli.

Rimuovere PV
LVM distribuisce automaticamente i dati su tutti i volumi fisici disponibili (a meno che non impostato diversamente), ma in un approccio lineare. Se un richiesto volume logico (all'interno di un gruppo di volumi) è più piccolo rispetto alla quantità di spazio libero di un solo volume fisico, tutto lo spazio per il volume logico viene rivendicato su quel (singolo) volume fisico in modo contiguo. Questo viene fatto per motivi di prestazioni.

Se un volume fisico deve essere rimosso da un gruppo di volumi, i dati devono prima essere rimossi dal volume fisico. Con il comando  tutti i dati su un volume fisico vengono spostati su un altro volume fisico all'interno dello stesso gruppo di volumi.

Tale operazione può richiedere tempo a seconda della quantità di dati che devono essere spostati. Una volta terminata, non ci dovrebbero essere dati rimasti sul dispositivo. Verificare con pvdisplay che il volume fisico non è più utilizzato da nessun volume logico.

Il prossimo passo è rimuovere il volume fisico dal gruppo di volumi utilizzando, dopodichè il dispositivo può essere "deselezionato" come volume fisico utilizzando pvremove:

VG (Gruppo di Volumi)
Un gruppo di volumi (VG) raggruppa un numero di volumi fisici e si presenta come nel file system del dispositivo. Il nome di un gruppo di volumi è scelto dall'amministratore.

Creare VG
Il seguente comando crea un gruppo di volumi chiamato "vg0" con due volumi fisici assegnati: e.

Elenco VG
Per elencare tutti i gruppi di volumi attivi, utilizzare il comando :

Se i gruppi di volume sono mancanti, utilizzare il comando per localizzarli:

Estendere VG
I gruppi di volume raggruppano i volumi fisici, permettendo agli amministratori di utilizzare un pool di risorse di memoria da destinare ai file systems. Quando un gruppo di volumi non ha sufficienti risorse di memoria, è necessario estendere il gruppo di volumi con volumi fisici aggiuntivi.

Il seguente esempio amplia il gruppo di volumi "vg0" di un volume fisico su :

Si ricorda che il volume fisico deve prima essere inizializzato come tale!

Ridurre VG
Se i volumi fisici devono essere rimossi dal gruppo di volumi, tutti i dati ancora in uso nel volume fisico devono essere spostati ad altri volumi fisici nel gruppo di volumi. Come visto prima, questo viene gestito tramite il comando, dopodichè il volume fisico può essere rimosso dal gruppo di volumi utilizzando vgreduce:

Rimuovere VG
Se un gruppo di volumi non è più necessario (o, in altre parole, il lotto di memoria che rappresenta non viene più utilizzato e i volumi fisici in esso contenuti necessitano di essere liberati per altri scopi), tale gruppo di volumi può essere rimosso con vgremove. Questo funziona solo se nessun volume logico è definito per il gruppo di volumi, e tutti, tranne un volume fisico, sono già stati rimossi dal lotto di memoria.

LV (Volume Logico)
I volumi logici sono i dispositivi meta finali che sono messi a disposizione dal sistema di solito per crearci sopra i file system. Essi vengono creati e gestiti in gruppi di volumi e si presentano come. Come per i gruppi di volumi, il nome usato per un volume logico è deciso dall'amministratore.

Creare LV
Per creare un volume logico si utilizza il comando. I parametri per il comando sono la dimensione richiesta per il volume logico (che non può essere più grande della quantità di spazio libero nel gruppo di volumi), il gruppo di volumi da cui lo spazio è rivendicato ed il nome del volume logico da creare.

Nell'esempio seguente, un volume logico di nome "lvol1" è stato creato dal gruppo di volumi chiamato "vg0" e con una dimensione di 150 MB:

E' possibile utilizzare per usare tutto lo spazio libero all'interno del gruppo di volumi. Ciò viene fatto con l'opzione  la quale seleziona la quantità di "estensioni" piuttosto che la dimensione (leggibile dall'uomo). I volumi logici sono divisi in "estensioni logiche" che sono blocchi di dati all'interno di un gruppo di volumi. Tutte le estensioni in un gruppo di volumi hanno la stessa dimensione. Con l'opzione   può essere utilizzato per allocare tutte le estensioni libere:

Dopo il "FREE", può essere utilizzata la chiave "VG" per indicare l'intera dimensione del gruppo di volume.

Elencare LV
Per elencare tutti i volumi logici, utilizzare il comando :

If logical volumes are missing, then the command can be used to scan for logical volumes on all available volume groups.

Estendere LV
Quando un volume logico ha bisogno di essere esteso, si può utilizzare il comando per aumentare lo spazio allocato per il volume logico.

Per esempio, per estendere il volume logico "lvol1" a un totale di 500 MB:

E' anche possibile utilizzare la dimensione da aggiungere piuttosto che la dimensione totale:

Un gruppo di volumi esteso non fornisce immediatamente la memoria addizionale agli utenti finali. Per questo, il file system in cima al gruppo di volumi deve essere incrementato in termini di dimensioni pure. Non tutti i file systems consentono il ridimensionamento, quindi, per ulteriori informazioni, controllare la documentazione per il file system in questione.

Per esempio, per ridimensionare un file system ext4 e farlo diventare con dimensione da 500 MB:

Diminuire LV
Se un volume logico ha bisogno di essere ridotto di dimensione, per prima cosa ridurre il file system stesso. Non tutti i file system supportano la riduzione.

Per esempio, ext4 non supporta la riduzione così il file system prima deve essere smontato. E' anche raccomandato fare un controllo al file system per assicurarsi che non vi siano incongruenze:

Con la riduzione del file system, è ora possibile diminuire pure la dimensione del volume logico:

Autorizzazioni LV
LVM supporta i permessi sui volui logici.

Per esempio, un volume logico può essere impostato a "leggi solo" utilizzando il comando :

Rimontarlo è necessario in quanto la modifica non viene applicata immediatamente.

Per contrassegnare il volume logico come scrivibile di nuovo, utilizzare il permesso "rw":

Rimuovere LV
Prima di rimuovere un volume logico, assicurarsi che non sia montato:

Disattivare il volume logico in modo che nessuna ulteriore attività di scrittura possa avvenire:

Con il volume smontato e disattivato, ora può essere rimosso, liberando le estensioni ad esso attribuite per l'uso da parte di altri volumi logici nel gruppo di volumi:

Caratteristiche
LVM fornisce un bel pò di caratteristiche interessanti per gli amministratori di memoria, tra cui (ma non solo)
 * sottile approvvigionamento (memoria over-committing)
 * supporto istantaneo
 * tipi di volume con metodi di allocazione di memoria diversi

Approvvigionamento sottile
La versione più recente di LVM2 (2.02.89) supporta i volumi sottili. I volumi sottili sono per dispositivi a blocchi come sparse files sono dei file systems. Quindi, un volume logico sottile all'interno di una vasca può essere "extra-impegnato": la sua dimensione può essere maggiore della dimensione allocata - può anche essere più grande della vasca stessa. Proprio come un sparse file, le estensioni vengono allocate come il dispositivo a blocchi viene popolato. Se il file system ha "scartato" le estensioni di supporto sono liberati ancora come i files sono rimossi, riducendo l'utilizzo degli spazi della vasca.

Dentro LVM, tale vasca sottile è un tipo speciale di volume logico, che a sua volta può ospitare volumi logici.

Creazione di una vasca sottile
Ogni vasca sottile ha metadati associati ad essa, i quali vengono aggiunti alla dimensione della vasca sottile. LVM calcolerà la dimensione dei metadati in base alla dimensione della vasca sottile come il minimo di "pool_chunks * 64 bytes" o 2MiB, se superiore. L'amministratore può selezionare un formato di metadati diverso.

Per creare una vasca sottile, aggiungere le opzioni  su :

L'esempio sopra crea una vasca sottile chiamata "thin_pool" con una dimensione totale di 150 MB. Questa è la dimensione reale allocata per la vasca sottile (e quindi la quantità totale di memoria effettiva che può essere utilizzata).

Per richiedere esplicitamente una certa dimensione dei metadati, utilizzare l'opzione :

Per via che il metadata viene aggiunto alla vasca sottile, la via migliore di utilizzare tutta la dimensione disponibile in un gruppo di volumi per un volume logico, non funziona (vedere LVM bug |812726):

Si noti che la vasca sottile non ha un nodo del dispositivo associato come altri LV.

Creazione di un volume logico sottile
Un "volume logico sottile" è un volume logico all'interno della vasca sottile (che è essa stessa un volume logico). Come i volumi logici sottili sono "scarsi", una dimensione virtuale invece di una dimensione fisica è specificata utilizzando l'opzione  :

In questo esempio, il volume logico (sottile) "lvol1" è esposto come dispositivo da 300MB di dimensione, anche se la vasca sottostante contiene solo 150MB di memoria reale allocata.

E' anche possibile creare sia la vasca sottile che il volume logico all'interno della vasca sottile con un unico comando:

Elencare vasche sottili e volumi logici sottili
Le vasche sottili e i volumi logici sottili sono tipologie speciali di volumi logici, e come tali sono visualizzati tramite il comando. Il comando individuerà anche questi volumi logici.

Estendere una vasca sottile
La vasca sottile è ampliata come un volume logico non sottile utilizzando. Per esempio:

Estendere un volume logico sottile
Un volume logico sottile è ampliato regolarmente proprio come un volume logico sottile:

Notare che il comando utilizza l'opzione   (o   se si utilizzano i conteggi estesi) e non un'opzione di "dimensione virtuale" come utilizzata durante la creazione.

Ridurre una vasca sottile
Attualmente, LVM non può ridurre la dimensione della vasca sottile. Vedere il bug LVM |812731.

Ridurre un volume logico sottile
I volumi logici sottili sono ridotti regolarmente proprio come i volumi logici.

Per esempio:

Notare che il comando utilizza l'opzione   (o   se si utilizzano i conteggi estesi) e non un opzione di "dimensione virtuale" come utilizzata durante la creazione.

Rimuovere vasche sottili
Le vasche sottili non possono essere rimosse fino a che tutti i volumi logici in esse contenuti non vengono rimossi.

Quando una vasca sottile non serve più a nessun volume logico, essa può essere rimossa attraverso il comando :

LVM2 istantanee e istantanee sottili
Un'istantanea è un volume logico che agiscecome copia di un altro volume logico. Essa visualizza lo stato del volume logico originale al tempo della creazione dell'istantanea.

Creazione di un'istantanea di un volume logico
Un'istantanea di un volume logico viene creata utilizzando l'opzione  di. L'istantanea di un volume logico è sempre memoria allocata come "registro" LVM, tutte le variazioni sono fatte dal volume logico originale e questi cambiamenti vengono memorizzati nella memoria allocata per l'istantanea. LVM inizierà dal volume logico originale dopodichè controllerà tutte le variazioni registrate, "annullando" le modifiche prima di mostrare il risultato per l'utente.

L'istantanea del volume logico, d'ora in poi, "cresce" al tasso che le modifiche vengono fatte sul volume logico originale. Quando la memoria allocata per l'istantanea è utilizzata completamente, l'istantanea sarà rimossa automaticamente dal sistema.

L'esempio di sopra crea un'istantanea di volume logico chiamata "20140412_lvol1", basata sul volume logico "lvol1" nel gruppo di volume "vg0". Essa utilizza il 10% dello spazio (estensioni reali) allocato dal gruppo di volume.

Accedere ad un'istantanea di volume logico
Le istantanee dei volumi logici possono essere montate come volumi logici normali. Esse non sono nemmeno limitate a operazioni di sola lettura - è possibile modificare le istantanee e quindi utilizzarle per testare cose, tipo provare variazioni prima di effettuarle realmente su un file system di "produzione".

Finché esistono istantanee di volumi logici, il volume logico normale/originale non può essere ridotto di dimensioni e non può essere rimosso.

Istantanee sottili LVM
Per creare una istantanea sottile, il comando viene utilizzato con l'opzione. Nessuna indicazione di dimensione deve essere trasmessa:

Le istantanee sottili del volume logico hanno la stessa dimensione del loro volume logico sottile originale, ed utilizzano un'allocazione fisica di 0 proprio come tutti gli altri volumi logici.

E' possibile anche ottenere istantanee di istantanee:

Le istantanee sottili hanno vari vantaggi rispetto alle istantanee regolari. Primo, le istantanee sottili sono indipendenti dal loro volume logico originale una volta create. Il volume logico originale può essere ridotto o cancellato senza influenzare l'istantanea. Secondo, l'istantanea sottile può essere efficacemente creata ricorsivamente (istantanea di un'istantanea) senza il "concatenamento" globale di regolari istantanee LVM ricorsive.

Riportare indietro allo stato di istantanea
Per riportare indietro il volume logico alla versione dell'istantanea, utilizzare il seguente comando:

Dovrebbe impiegarci una coppia di minuti, dipende dalla dimensione del volume. Prego notare che il riportare indietro si verificherà solo se il volume logico genitore sarà offline. Quindi un riavvio potrebbe essere necessario.

Riportare indietro le istantanee sottili
Per i volumi sottili, non funziona. Invece, bisogna cancellare il volume logico originale e rinominare l'istantanea:

Diversi metodi di allocazione della memoria
LVM supporta diversi metodi di allocazione di memoria:
 * Volumi lineari (che è di default);
 * Volumi mirroring (in una configurazione pressappoco attivo/standby);
 * Striping (RAID0);
 * Volumi mirroring (RAID1 - che è più una configurazione attivo/attivo);
 * Striping con parità (RAID4 e RAID5);
 * Striping con doppia parità (RAID6);
 * Striping e mirroring (RAID10).

Volumi lineari
I volumi lineari sono il tipo più comune di volumi LVM. LVM tenterà di allocare il volume logico per essere fisicamente il più contiguo possibile. Se questo è un volume fisico abbastanza grande da includere l'intero volume logico, LVM lo allocherà là, altrimenti lo frammenterà nel minor numero di pezzi possibile.

I comandi introdotti in precedenza per creare gruppi di volumi e volumi logici creano anche volumi lineari.

Visto che i volumi lineari non hanno richieste particolari, essi sono facili da manipolare e possono essere ridimensionati e riallocati a volontà. Se un volume logico è allocato attraverso multipli volumi fisici, e ogni volume fisico diventa non più disponibile, tale volume logico non può essere avviato più e sarà inutilizzabile.

Volumi Mirrored
LVM supporta i volumi "mirrored" (rispecchiati), i quali forniscono una tolleranza di errore in caso di guasto del disco. A differenza di RAID 1, non vi è alcun miglioramento delle prestazioni - tutte le letture e le scritture sono consegnate ad un solo lato del "mirror" (specchio).

Per tenere traccia dello stato del mirror, LVM richiede un "log". E' raccomandato (e spesso anche obbligatorio) posizionare questo log su un volume fisico che non contiene nessuno dei volumi logici in mirroring. Questi sono tre tipi di logs che possono essere utilizzati per i mirrors:


 * 1) Disk is the default log type. All changes made are logged into extra metadata extents, which LVM manages. If a device fails, then the changes are kept in the log until the mirror can be restored again.
 * 2) Mirror logs are disk logs that are themselves mirrored.
 * 3) Core mirror logs record the state of the mirror in memory only. LVM will have to rebuild the mirror every time it is activated. This type is useful for temporary mirrors.

To create a logical volume with a single mirror, pass the -m 1 argument (to select standard mirroring) with optionally  to select a particular log type:

The -m 1 tells LVM to create one (additional) mirror, so requiring 2 physical volumes. The  option is an optimization - without it LVM will try synchronize the mirror by copying empty sectors from one logical volume to another.

It is possible to create a mirror of an existing logical volume:

The  option does the conversion in the background as this can take quite a while.

To remove a mirror, set the number of mirrors (back) to 0:

If part of the mirror is unavailable (usually because the disk containing the physical volume has failed), the volume group will need to be brought up in degraded mode:

On the first write, LVM will notice the mirror is broken. The default policy ("remove") is to automatically reduce/break the mirror according to the number of pieces available. A 3-way mirror with a missing physical volume will be reduced to 2-way mirror; a 2-way mirror will be reduced to a regular linear volume. If the failure is only transient, and the missing physical volume returns after LVM has broken the mirror, the mirrored logical volume will need to be recreated on it.

To recover the mirror, the failed physical volume needs to be removed from the volume group, and a replacement physical volume needs to be added (or if the volume group has a free physical volume, it can be created on that one). Then the mirror can be recreated with at which point the old physical volume can be removed from the volume group:

It is possible to have LVM recreate the mirror with free extents on a different physical volume if one side fails. To accomplish that, set  to allocate in.

Thin mirrors
It is not (yet) possible to create a mirrored thin pool or thin volume. It is possible to create a mirrored thin pool by creating a normal mirrored logical volume and then converting the logical volume to a thin pool with. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Striping (RAID0)
Instead of a linear volume, where multiple contiguous physical volumes are appended, it possible to create a striped or RAID0 volume for better performance. This will alternate storage allocations across the available physical volumes.

To create a striped volume over three physical volumes:

The  option indicates over how many physical volumes the striping should be done.

It is possible to mirror a stripe set. The  and   options can be combined to create a striped mirror:

This creates a 2 physical volume stripe set and mirrors it on 2 different physical volumes, for a total of 4 physical volumes. An existing stripe set can be mirrored with.

A thin pool can be striped like any other logical volume. All the thin volumes created from the pool inherit that settings - do not specify it manually when creating a thin volume.

It is not possible to stripe an existing volume, nor reshape the stripes across more/less physical volumes, nor to convert to a different RAID level/linear volume. A stripe set can be mirrored. It is possible to extend a stripe set across additional physical volumes, but they must be added in multiples of the original stripe set (which will effectively linearly append a new stripe set).

Mirroring (RAID1)
Unlike RAID0, which is striping, RAID1 is mirroring, but implemented differently than the original LVM mirror. Under RAID1, reads are spread out across physical volumes, improving performance. RAID1 mirror failures do not cause I/O to block because LVM does not need to break it on write.

Any place where an LVM mirror could be used, a RAID1 mirror can be used in its place. It is possible to have LVM create RAID1 mirrors instead of regular mirrors implicitly by setting mirror_segtype_default to raid1 in.

To create a logical volume with a single mirror:

Note the difference for creating a mirror: There is no mirrorlog specified, because RAID1 logical volumes do not have an explicit mirror log - it built-in to the logical volume.

It is possible to convert an existing logical volume to RAID1:

To remove a RAID1 mirror, set the number of mirrors to 0:

If part of the RAID1 is unavailable (usually because the disk containing the physical volume has failed), the volume group will need to be brought up in degraded mode:

Unlike an LVM mirror, writing does NOT break the mirroring. If the failure is only transient, and the missing physical volume returns, LVM will resync the mirror by copying cover the out-of-date segments instead of the entire logical volume. If the failure is permanent, then the failed physical volume needs to be removed from the volume group, and a replacement physical volume needs to be added (or if the volume group has a free physical volume, it can be created on a different PV). The mirror can then be repaired with, and the old physical volume can be removed from the volume group:

Thin RAID1
It is not (yet) possible to create a RAID1 thin pool or thin volume. It is possible to create a RAID1 thin pool by creating a normal mirrored logical volume and then converting the logical volume to a thin pool with. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will then merge them into a single logical volume.

Striping with parity (RAID4 and RAID5)
RAID0 is not fault-tolerant - if any of the physical volumes fail then the logical volume is unusable. By adding a parity stripe to RAID0 the logical volume can still function if a physical volume is missing. A new physical volume can then be added to restore fault tolerance.

Stripsets with parity come in 2 flavors: RAID4 and RAID5. Under RAID4, all the parity stripes are stored on the same physical volume. This can become a bottleneck because all writes hit that physical volume, and it gets worse the more physical volumes are in the array. With RAID5, the parity data is distributed evenly across the physical volumes so none of them become a bottleneck. For that reason, RAID4 is rare and is considered obsolete/historical. In practice, all stripesets with parity are RAID5.

Only the data physical volumes are specified with -i, LVM adds one to it automatically for the parity. So for a 3 physical volume RAID5, -i 2 is passed on and not -i 3.

When a physical volume fails, then the volume group will need to be brought up in degraded mode:

The volume will work normally at this point, however this degrades the array to RAID0 until a replacement physical volume is added. Performance is unlikely to be affected while the array is degraded - although it does need to recompute its missing data via parity, it only requires simple XOR for the parity block with the remaining data. The overhead is negligible compared to the disk I/O.

To repair the RAID5:

It is possible to replace a still working physical volume in RAID5 as well:

The same restrictions of stripe sets apply to stripe sets with parity as well: it is not possible to enable striping with parity on an existing volume, nor reshape the stripes with parity across more/less physical volumes, nor to convert to a different RAID level/linear volume. A stripe set with parity can be mirrored. It is possible to extend a stripe set with parity across additional physical volumes, but they must be added in multiples of the original stripe set with parity (which will effectively linearly append a new stripe set with parity).

Thin RAID5 logical volumes
It is not (yet) possible to create stripe set with parity (RAID5) thin pools or thin logical volumes. It is possible to create a RAID5 thin pool by creating a normal RAID5 logical volume and then converting the logical volume into a thin pool with. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Striping with double parity (RAID6)
RAID6 is similar to RAID5, however RAID6 can survive up to two physical volume failures, thus offering more fault tolerance than RAID5 at the expense of extra physical volumes.

Like RAID5, the  option is used to specify the number of physical volumes to stripe, excluding the 2 physical volumes for parity. So for a 5 physical volume RAID6, pass on  and not.

Recovery for RAID6 is the same as RAID5.

Thin RAID6 logical volumes
It is not (yet) possible to create a RAID6 thin pool or thin volumes. It is possible to create a RAID6 thin pool by creating a normal RAID6 logical volume and then converting the logical volume into a thin pool with. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

LVM RAID10
RAID10 is a combination of RAID0 and RAID1. It is more powerful than RAID0+RAID1 as the mirroring is done at the stripe level instead of the logical volume level, and therefore the layout doesn't need to be symmetric. A RAID10 volume can tolerate at least a single missing physical volume, and possibly more.

Both the  and   options are specified:   is the number of stripes and   is the number of mirrors. Two stripes and 1 mirror requires 4 physical volumes.

Thin RAID10
It is not (yet) possible to create a RAID10 thin pool or thin volumes. It is possible to create a RAID10 thin pool by creating a normal RAID10 logical volume and then converting the logical volume into a thin pool with. 2 logical volumes are required: one for the thin pool and one for the thin metadata; the conversion process will merge them into a single logical volume.

Experimenting with LVM
It is possible to experiment with LVM without using real storage devices. To accomplish this, loopback devices are created.

First make sure to have the loopback module loaded.

Next configure LVM to not use udev to scan for devices:

Create some image files which will become the storage devices. The next example uses five files for a total of about ~10GB of real hard drive space:

Check which loopback devices are available:

Assuming all loopback devices are available, next create the devices:

The devices are now available to use as any other hard drive in the system (and thus be perfect for physical volumes).

Troubleshooting
LVM has a few features that already provide some level of redundancy. However, there are situations where it is possible to restore lost physical volumes or logical volumes.

vgcfgrestore utility
By default, on any change to a LVM physical volume, volume group, or logical volume, LVM2 create a backup file of the metadata in. These files can be used to recover from an accidental change (like deleting the wrong logical volume). LVM also keeps a backup copy of the most recent metadata in. These can be used to restore metadata to a replacement disk, or repair corrupted metadata.

To see what states of the volume group are available to be restored (partial output to improve readability):

Recovering an accidentally deleted logical volume
Assuming the logical volume lvm_raid1 was accidentally removed from volume group vg0, it is possible to recover it as follows:

Replacing a failed physical volume
It possible to do a true "replace" and recreate the metadata on the new physical volume to be the same as the old physical volume:

The important line here is the UUID "unknown device".

This recreates the physical volume metadata, but not the missing logical volume or volume group data on the physical volume.

This now reconstructs all the missing metadata on the physical volume, including the logical volume and volume group data. However it doesn't restore the data, so the mirror is out of sync.

This will resync the mirror. This works with RAID 4,5 and 6 as well.

Deactivating a logical volume
It is possible to deactivate a logical volume with the following command:

It is not possible to mount the logical volume anywhere before it gets reactivated:

External resources

 * LVM2 sourceware.org
 * LVM tldp.org
 * LVM2 Wiki redhat.com