Sommario
Rischi derivanti dall'uso di LVM:
- Vulnerabile a scrivere problemi di cache con SSD o hypervisor VM
- Difficile recuperare i dati a causa di strutture su disco più complesse
- Difficile ridimensionare correttamente i filesystem
- Le istantanee sono difficili da usare, lente e buggy
- Richiede alcune abilità per configurare correttamente dati questi problemi
I primi due problemi di LVM si combinano: se la memorizzazione nella cache della scrittura non funziona correttamente e si verifica una perdita di energia (ad es. PSU o UPS), potrebbe essere necessario ripristinare il backup, il che significa tempi di inattività significativi. Un motivo chiave per l'utilizzo di LVM è il tempo di attività più elevato (quando si aggiungono dischi, ridimensionano i filesystem, ecc.), Ma è importante ottenere la corretta configurazione della cache di scrittura per evitare che LVM riduca effettivamente i tempi di attività.
- Aggiornato dicembre 2018: materiale istantaneo aggiornato, inclusa la stabilità di ZFS e btrfs come alternative alle istantanee LVM
Mitigare i rischi
LVM può ancora funzionare bene se:
- Configura la tua cache di scrittura direttamente in hypervisor, kernel e SSD
- Evita le istantanee LVM
- Usa le versioni LVM recenti per ridimensionare i filesystem
- Avere buoni backup
Dettagli
L'ho studiato un po 'in passato dopo aver sperimentato una perdita di dati associata a LVM. I principali rischi e problemi di LVM di cui sono a conoscenza sono:
Vulnerabile alla memorizzazione nella cache del disco rigido a causa di hypervisor VM, cache del disco o vecchi kernel Linux , e rende più difficile il recupero dei dati a causa di strutture su disco più complesse - vedi sotto per i dettagli. Ho visto configurazioni complete di LVM su diversi dischi corrotte senza alcuna possibilità di recupero e LVM più la memorizzazione nella cache del disco fisso sono una combinazione pericolosa.
- Scrivere la cache e scrivere il riordino dal disco rigido è importante per buone prestazioni, ma può non riuscire a svuotare correttamente i blocchi su disco a causa di hypervisor VM, cache di scrittura del disco rigido, vecchi kernel Linux, ecc.
- Le barriere di scrittura indicano che il kernel garantisce che completerà determinate scritture del disco prima della scrittura del disco "barriera", per garantire che filesystem e RAID possano recuperare in caso di improvvisa perdita di potenza o crash. Tali barriere possono utilizzare un'operazione FUA (Force Unit Access) per scrivere immediatamente determinati blocchi sul disco, che è più efficiente di un flush completo della cache. Le barriere possono essere combinate con un efficiente accodamento dei comandi con tag / nativo (invio di più richieste di I / O su disco contemporaneamente) per consentire al disco rigido di eseguire un riordino in scrittura intelligente senza aumentare il rischio di perdita di dati.
- Gli hypervisor VM possono avere problemi simili: l'esecuzione di LVM in un guest Linux su un hypervisor VM come VMware, Xen , KVM, Hyper-V o VirtualBox può creare problemi simili a un kernel senza barriere di scrittura, a causa della scrittura nella cache e della scrittura -ordering. Controlla attentamente la documentazione del tuo hypervisor per l'opzione "flush to disk" o cache di scrittura (presente in KVM , VMware , Xen , VirtualBox e altri) e testala con la tua configurazione. Alcuni hypervisor come VirtualBox hanno un'impostazione predefinita che ignora qualsiasi svuotamento del disco dal guest.
- I server aziendali con LVM devono sempre utilizzare un controller RAID con batteria e disabilitare la memorizzazione nella cache di scrittura sul disco rigido (il controller ha una cache di scrittura con batteria supportata che è veloce e sicura). Vedere questo commento dell'autore di questa voce FAQ XFS . Potrebbe anche essere sicuro disattivare le barriere di scrittura nel kernel, ma si consiglia di testare.
- Se non si dispone di un controller RAID alimentato a batteria, la disabilitazione della memorizzazione nella cache di scrittura sul disco rigido rallenterà significativamente le scritture ma renderà LVM sicuro. Dovresti anche usare l'equivalente
data=ordered
dell'opzione ext3 (o data=journal
per maggiore sicurezza), in più barrier=1
per assicurarti che la cache del kernel non influisca sull'integrità. (Oppure usa ext4 che abilita le barriere di default .) Questa è l'opzione più semplice e fornisce una buona integrità dei dati a costo delle prestazioni. (Linux ha cambiato l'opzione ext3 predefinita in quella più pericolosa data=writeback
qualche tempo fa, quindi non fare affidamento sulle impostazioni predefinite per FS.)
- Per disabilitare la memorizzazione nella cache del disco rigido : aggiungi
hdparm -q -W0 /dev/sdX
per tutte le unità in /etc/rc.local
(per SATA) o usa sdparm per SCSI / SAS. Tuttavia, in base a questa voce nelle FAQ XFS (che è molto utile su questo argomento), un'unità SATA potrebbe dimenticare questa impostazione dopo un ripristino dell'errore dell'unità, quindi è necessario utilizzare SCSI / SAS o, se è necessario utilizzare SATA, inserire il comando hdparm in un processo cron in esecuzione ogni minuto circa.
- Per mantenere abilitata la cache di scrittura SSD / disco rigido per prestazioni migliori: si tratta di un'area complessa - vedere la sezione seguente.
- Se si utilizzano unità di formattazione avanzata, ovvero settori fisici da 4 KB, vedere di seguito: la disabilitazione della memorizzazione nella cache di scrittura potrebbe avere altri problemi.
- L'UPS è fondamentale sia per le aziende che per i SOHO, ma non abbastanza per rendere LVM sicuro: qualsiasi cosa che causi un incidente o una perdita di corrente (ad es. Guasti dell'UPS, guasti dell'alimentatore o esaurimento della batteria del laptop) potrebbe perdere i dati nelle cache del disco rigido.
- Kernel Linux molto vecchi (2.6.x del 2009) : esiste un supporto incompleto alla barriera di scrittura nelle versioni del kernel molto vecchie, 2.6.32 e precedenti ( 2.6.31 ha un po 'di supporto , mentre 2.6.33 funziona per tutti i tipi di target del dispositivo) - RHEL 6 utilizza 2.6.32 con molte patch. Se questi vecchi kernel 2.6 non sono corretti per questi problemi, una grande quantità di metadati FS (inclusi i journal) potrebbe andare persa a causa di un arresto anomalo che lascia i dati nei buffer di scrittura dei dischi rigidi (diciamo 32 MB per unità per unità SATA comuni). Perdere 32 MB dei metadati e dei dati del journal FS scritti più di recente, che il kernel ritiene sia già su disco, di solito significa molta corruzione di FS e quindi perdita di dati.
- Riepilogo: è necessario prestare attenzione al filesystem, al RAID, all'hypervisor VM e all'installazione del disco rigido / SSD utilizzati con LVM. È necessario disporre di backup molto validi se si utilizza LVM e assicurarsi di eseguire il backup specifico dei metadati LVM, dell'installazione della partizione fisica, dell'MBR e dei settori di avvio del volume. È anche consigliabile utilizzare le unità SCSI / SAS in quanto è meno probabile che mentano sul modo in cui scrivono la cache: è necessaria maggiore attenzione per utilizzare le unità SATA.
Mantenere la cache in scrittura abilitata per le prestazioni (e far fronte alle unità mentite)
Un'opzione più complessa ma performante è mantenere abilitata la cache di scrittura SSD / disco rigido e fare affidamento sulle barriere di scrittura del kernel che funzionano con LVM sul kernel 2.6.33+ (ricontrollare cercando i messaggi "barriera" nei log).
Dovresti anche assicurarti che la configurazione RAID, la configurazione dell'hypervisor VM e il filesystem utilizzino le barriere di scrittura (cioè che l'unità debba svuotare le scritture in sospeso prima e dopo le scritture di metadati / journal chiave). XFS usa le barriere di default, ma ext3 no , quindi con ext3 dovresti usare barrier=1
le opzioni di mount, e comunque usare data=ordered
o data=journal
come sopra.
Gli SSD sono problematici perché l'uso della cache di scrittura è fondamentale per la durata dell'SSD. È meglio usare un SSD che ha un supercondensatore (per abilitare lo svuotamento della cache in caso di interruzione dell'alimentazione e quindi abilitare la cache per essere riscrivibile e non riscrivibile).
Configurazione dell'unità di formattazione avanzata : scrittura nella cache, allineamento, RAID, GPT
- Con le unità di formato avanzato più recenti che utilizzano 4 settori fisici KiB, potrebbe essere importante mantenere abilitata la memorizzazione nella cache di scrittura delle unità, poiché la maggior parte di tali unità attualmente emula settori logici a 512 byte ( "512 emulazione" ) e alcuni addirittura affermano di avere un fisico a 512 byte settori mentre in realtà utilizza 4 KiB.
- La disattivazione della cache di scrittura di un'unità Advanced Format può causare un impatto molto elevato sulle prestazioni se l'applicazione / kernel esegue scritture a 512 byte, poiché tali unità si basano sulla cache per accumulare scritture da 8 x 512 byte prima di eseguire un singolo 4 KiB fisico Scrivi. Si consiglia di testare per confermare qualsiasi impatto se si disabilita la cache.
- L'allineamento dei LV su un limite di 4 KiB è importante per le prestazioni, ma dovrebbe avvenire automaticamente fintanto che le partizioni sottostanti per i PV sono allineate, poiché le estensioni fisiche LVM (PE) sono 4 MiB per impostazione predefinita. RAID deve essere considerato qui: questa pagina di configurazione RAID LVM e software suggerisce di posizionare il superblocco RAID alla fine del volume e (se necessario) di utilizzare un'opzione
pvcreate
per allineare i PV. Questo thread dell'elenco e-mail LVM indica il lavoro svolto nei kernel durante il 2011 e il problema delle scritture di blocchi parziali quando si mescolano dischi con settori a 512 byte e 4 KiB in un singolo LV.
- Il partizionamento GPT con Advanced Format richiede attenzione, specialmente per i dischi boot + root, per garantire che la prima partizione LVM (PV) inizi su un limite di 4 KiB.
Difficile recuperare i dati a causa di strutture su disco più complesse :
- Qualsiasi ripristino dei dati LVM richiesto dopo un arresto anomalo o una perdita di corrente (a causa di una cache di scrittura errata) è nella migliore delle ipotesi un processo manuale, perché apparentemente non esistono strumenti adeguati. LVM è bravo a fare il backup dei suoi metadati
/etc/lvm
, il che può aiutare a ripristinare la struttura di base di LV, VG e PV, ma non aiuterà a perdere i metadati del filesystem.
- Pertanto è probabile che sia richiesto un ripristino completo dal backup. Ciò comporta tempi di inattività molto più lunghi di un veloce fsck basato su journal quando non si utilizza LVM e i dati scritti dall'ultimo backup andranno persi.
- TestDisk , ext3grep , ext3undel e altri strumenti possono recuperare partizioni e file da dischi non LVM ma non supportano direttamente il recupero dei dati LVM. TestDisk può scoprire che una partizione fisica persa contiene un PV LVM, ma nessuno di questi strumenti comprende i volumi logici LVM. Strumenti di intaglio di file come PhotoRec e molti altri funzionerebbero mentre aggirano il filesystem per riassemblare i file dai blocchi di dati, ma questo è un approccio di ultima generazione a basso livello per dati preziosi e funziona meno bene con i file frammentati.
- Il recupero manuale LVM è possibile in alcuni casi, ma è complesso e richiede tempo: vedere questo esempio e questo , questo e questo per come recuperare.
Difficile ridimensionare correttamente i filesystem - il ridimensionamento semplice dei filesystem è spesso un vantaggio di LVM, ma è necessario eseguire una mezza dozzina di comandi shell per ridimensionare un FS basato su LVM - questo può essere fatto con l'intero server ancora attivo, e in alcuni casi con FS montato, ma non rischierei mai quest'ultimo senza backup aggiornati e utilizzando comandi pre-testati su un server equivalente (ad esempio clone di disaster recovery del server di produzione).
- Aggiornamento: versioni più recenti di
lvextend
supportano l' opzione -r
( --resizefs
) - se disponibile, è un modo più sicuro e veloce per ridimensionare il LV e il filesystem, in particolare se stai riducendo l'FS e puoi saltare questa sezione.
- La maggior parte delle guide al ridimensionamento degli FS basati su LVM non tengono conto del fatto che l'FS deve essere leggermente più piccolo della dimensione dell'LV: spiegazione dettagliata qui . Quando si restringe un filesystem, sarà necessario specificare la nuova dimensione nello strumento di ridimensionamento di FS, ad es.
resize2fs
Per ext3, e su lvextend
o lvreduce
. Senza grande cura, le dimensioni possono essere leggermente diverse a causa della differenza tra 1 GB (10 ^ 9) e 1 GiB (2 ^ 30) o il modo in cui i vari strumenti arrotondano le dimensioni verso l'alto o verso il basso.
- Se non esegui i calcoli esattamente nel modo giusto (o usi alcuni passaggi extra oltre a quelli più ovvi), potresti finire con un FS troppo grande per il LV. Tutto sembrerà perfetto per mesi o anni, fino a quando non riempirai completamente il FS, a quel punto otterrai una grave corruzione - e se non sei a conoscenza di questo problema, è difficile scoprire perché, dato che potresti avere anche errori del disco reali da allora che offusca la situazione. (È possibile che questo problema riguardi solo la riduzione delle dimensioni dei filesystem - tuttavia, è chiaro che il ridimensionamento dei filesystem in entrambe le direzioni aumenta il rischio di perdita di dati, probabilmente a causa di un errore dell'utente.)
Sembra che la dimensione LV dovrebbe essere maggiore della dimensione FS di 2 volte la dimensione dell'estensione fisica LVM (PE) - ma controlla il link sopra per i dettagli poiché la fonte per questo non è autorevole. Spesso è sufficiente consentire 8 MiB, ma potrebbe essere meglio consentirne di più, ad esempio 100 MiB o 1 GiB, solo per essere sicuri. Per verificare la dimensione PE e il volume logico + dimensioni FS, utilizzando 4 blocchi KiB = 4096 byte:
Mostra la dimensione PE in KiB:
vgdisplay --units k myVGname | grep "PE Size"
Dimensione di tutti i LV:
lvs --units 4096b
Dimensione di (ext3) FS, presuppone 4 blocchi KiB FS:
tune2fs -l /dev/myVGname/myLVname | grep 'Block count'
Al contrario, una configurazione non LVM rende il ridimensionamento di FS molto affidabile e facile da eseguire Gparted e ridimensiona gli FS richiesti, quindi farà tutto per te. Sui server, è possibile utilizzare parted
dalla shell.
- Spesso è meglio usare il Gparted Live CD o Parted Magic , poiché questi hanno un Gparted e un kernel recenti e spesso più privi di bug rispetto alla versione della distro: una volta ho perso un intero FS a causa del Gparted della distro che non aggiornava correttamente le partizioni in esecuzione kernel. Se si utilizza Gparted della distro, assicurarsi di riavviare subito dopo aver modificato le partizioni in modo che la vista del kernel sia corretta.
Le istantanee sono difficili da usare, lente e buggy - se l'istantanea esaurisce lo spazio pre-allocato, viene automaticamente rilasciata . Ogni istantanea di un dato LV è un delta rispetto a quel LV (non rispetto alle istantanee precedenti) che può richiedere molto spazio quando si eseguono snapshot di filesystem con attività di scrittura significative (ogni istantanea è più grande della precedente). È sicuro creare un LV snapshot delle stesse dimensioni del LV originale, poiché lo snapshot non esaurirà mai lo spazio libero.
Gli snapshot possono anche essere molto lenti (ovvero da 3 a 6 volte più lenti rispetto a quelli senza LVM per questi test MySQL ) - vedi questa risposta che copre vari problemi di snapshot . La lentezza è in parte dovuta al fatto che le istantanee richiedono molte scritture sincrone .
Le istantanee hanno avuto alcuni bug significativi, ad esempio in alcuni casi possono rallentare l'avvio o causare il fallimento completo dell'avvio (perché il kernel può scadere in attesa del root FS quando si tratta di un'istantanea LVM [risolto initramfs-tools
nell'aggiornamento Debian , marzo 2015] ).
- Tuttavia, molti di condizione bug razziali snapshot erano apparentemente fissati entro il 2015.
- LVM senza snapshot in genere sembra abbastanza ben eseguito il debug, forse perché le snapshot non vengono utilizzate tanto quanto le funzionalità principali.
Alternative agli snapshot : filesystem e hypervisor VM
Snapshot VM / cloud:
- Se si utilizza un hypervisor VM o un provider cloud IaaS (ad esempio VMware, VirtualBox o Amazon EC2 / EBS), le loro istantanee sono spesso un'alternativa molto migliore alle istantanee LVM. Puoi facilmente scattare un'istantanea per scopi di backup (ma considera di congelare FS prima di farlo).
Istantanee del filesystem:
Istantanee per backup online e fsck
Gli snapshot possono essere utilizzati per fornire una costante fonte per i backup, fino a quando si sta attenti con spazio assegnato (idealmente l'istantanea è la stessa dimensione del LV viene eseguito il backup). L'eccellente rsnapshot (dall'1.3.1) gestisce anche la creazione / eliminazione dell'istantanea LVM per te - vedi questo HOWTO su rsnapshot usando LVM . Tuttavia, notare i problemi generali con le istantanee e che un'istantanea non deve essere considerata un backup in sé.
Puoi anche usare le istantanee LVM per fare un fsck online: istantanea LV e fsck istantanea, mentre usi ancora il principale FS non-istantanea - descritto qui - tuttavia, non è del tutto semplice, quindi è meglio usare e2croncheck come descritto da Ted Ts 'o , manutentore di ext3.
Dovresti "bloccare" temporaneamente il filesystem mentre esegui l'istantanea: alcuni filesystem come ext3 e XFS lo faranno automaticamente quando LVM crea l'istantanea.
conclusioni
Nonostante tutto, utilizzo ancora LVM su alcuni sistemi, ma per una configurazione desktop preferisco le partizioni non elaborate. Il vantaggio principale che posso vedere da LVM è la flessibilità di spostare e ridimensionare gli FS quando è necessario avere un elevato tempo di attività su un server - se non ne hai bisogno, gparted è più facile e ha meno rischi di perdita di dati.
LVM richiede molta attenzione alla configurazione della cache di scrittura a causa di hypervisor VM, cache di scrittura su disco rigido / SSD e così via, ma lo stesso vale per l'utilizzo di Linux come server DB. La mancanza di supporto da parte della maggior parte degli strumenti ( gparted
inclusi i calcoli delle dimensioni critiche, testdisk
ecc.) Rende più difficile l'utilizzo di quanto dovrebbe essere.
Se si utilizza LVM, prestare molta attenzione agli snapshot: utilizzare gli snapshot VM / cloud, se possibile, o indagare su ZFS / btrfs per evitare completamente LVM - è possibile che ZFS o btrs siano sufficientemente maturi rispetto a LVM con snapshot.
In conclusione: se non si conoscono i problemi sopra elencati e come risolverli, è meglio non utilizzare LVM.