Questa è una guida completa per principianti a LVM (Logical Volume Management) in Linux.
In questo tutorial imparerai il concetto di LVM, i suoi componenti e perché dovresti usarlo.
Non mi limiterò alla sola spiegazione teorica. Mostrerò anche esempi pratici per la creazione e la gestione di LVM in Linux.
In breve, ti fornirò tutte le informazioni necessarie per iniziare a lavorare con LVM nel mondo reale.
Cos'è LVM in Linux?
LVM sta per Logical Volume Management. Si tratta di un metodo alternativo di gestione dei sistemi di storage rispetto a quello tradizionale basato su partizioni. In LVM, invece di creare partizioni, crei volumi logici e quindi puoi montare facilmente quei volumi nel tuo filesystem come faresti con una partizione del disco.
Un'eccezione all'istruzione precedente è che non è possibile utilizzare i volumi logici per/boot . Questo perché GRUB (il bootloader più comune per Linux) non può leggere dai volumi logici. La nota alternativa a GRUB, systemd-boot, d'altra parte, legge solo i filesystem vfat, quindi non funzionerà nemmeno. Componenti di LVM
Ci sono tre componenti principali di LVM:
- Volumi fisici
- Gruppi di volumi
- Volumi logici
Sebbene l'elenco sia composto da tre componenti, solo due di essi sono controparti dirette del sistema di partizionamento. La tabella seguente lo registra.
| Sistema di partizionamento del disco | LVM |
|---|---|
| Partizioni | Volumi logici |
| Dischi | Gruppi di volumi |
I volumi fisici non hanno una controparte diretta, ma ne parlerò presto.
Perché usare LVM?
Il vantaggio principale di LVM è quanto sia facile ridimensionare un volume o un gruppo di volumi. Astrae tutte le parti brutte (partizioni, dischi grezzi) e ci lascia con un pool di archiviazione centrale con cui lavorare.
Se hai mai provato l'orrore del ridimensionamento delle partizioni, vorresti usare LVM.
Preparazione del laboratorio per l'hands-on
Questo articolo non è solo teoria. Mostrerò esempi di comandi effettivi lungo il percorso e il modo migliore per imparare qualcosa è lavorarci sopra, in modo pratico. Per questo, ti consiglio di utilizzare una macchina virtuale.
Per aiutarti ho già preparato un semplice Vagrantfile che puoi usare per far girare una macchina virtuale molto leggera con VirtualBox. Questa macchina virtuale ha tre dischi aggiuntivi che tu e io possiamo usare per gli esempi di comandi seguenti.
Crea una directory da qualche parte nel tuo filesystem e salva quanto segue in un file, chiamato Vagrantfile .
Vagrant.configure "2" do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "lvm"
3.times {|i| config.vm.disk :disk, size: "5GB", name: "drive-#{i}"}
config.vm.provider :virtualbox do |machine|
machine.memory = 1024
machine.cpus = 1
machine.customize ["modifyvm", :id, "--cpuexecutioncap", "50"]
end
end
# vi: set ft=ruby
Oppure, se lo desideri, puoi utilizzare wget o curl per scaricare il file dal mio gist.
wget https://gist.githubusercontent.com/debdutdeb/98ed1b6aef36885d07ce8247188dfd5e/raw/524259da5dfa2d8750883d01c8159829729e224d/Vagrantfile Assicurati di aver installato Vagrant e VirtualBox.
Una volta che il Vagrantfile è a posto, imposta la variabile d'ambiente VAGRANT_EXPERIMENTAL su disks .
export VAGRANT_EXPERIMENTAL=disks Infine, avvia la macchina virtuale usando il seguente comando (assicurati di trovarti nella stessa directory di Vagrantfile):
vagrant up
Una volta che la macchina è in esecuzione, puoi usare vagrant ssh in SSH ed esegui i comandi di esempio da questo articolo.
Ricordati di eseguire vagrant destroy dalla stessa directory del file Vagrant dopo che hai finito.
Installazione di LVM
Prima di poter utilizzare uno qualsiasi dei comandi, devi installare lvm2 pacchetto. Questo dovrebbe essere preinstallato nella maggior parte delle moderne distribuzioni, in particolare quelle basate su Ubuntu. Ma ancora, dovevo menzionarlo prima di andare avanti. Per installare lvm2 , consulta la documentazione della tua distribuzione.
Manuale con LVM
Per questa procedura dettagliata, ho costruito una macchina virtuale con 40G di archiviazione principale (non importante) e tre dischi esterni di dimensioni 5G. Le dimensioni di questi dischi sono arbitrarie.
example@unixlinux.online:~$ lsblk -o name,size,fstype
NAME SIZE FSTYPE
loop0 55.5M squashfs
loop1 32.3M squashfs
loop2 70.4M squashfs
sda 40G
└─sda1 40G ext4
sdb 10M iso9660
sdc 5G
sdd 5G
sde 5G
Come puoi vedere i dispositivi che userò sono sdc , sdd e sde .
Ricordi che ti ho detto che ci sono tre componenti principali di LVM?
- Volumi fisici
- Gruppi di volumi
- Volumi logici
È ora di vederli uno per uno.
1. Volumi fisici
La prima cosa che devi sapere su LVM sono i volumi fisici. I volumi fisici sono le materie prime o gli elementi costitutivi utilizzati per ottenere l'astrazione che sono i volumi logici. In parole più semplici, i volumi fisici sono l'unità logica di un sistema LVM.
Un volume fisico può essere qualsiasi cosa, un disco grezzo o una partizione del disco. La creazione e l'inizializzazione di un volume fisico sono la stessa cosa. Entrambi significano che stai solo preparando gli elementi costitutivi (ad esempio partizioni, dischi) per ulteriori operazioni. Questo diventerà più chiaro in un attimo.
Utilità: Tutte le utilità che gestiscono i volumi fisici iniziano con le lettere pv per P hysical V olume. Per esempio. pvcreate , pvchange , pvs , pvdisplay ecc.
Creazione di volumi fisici
Puoi creare un volume fisico utilizzando un disco grezzo non partizionato o le partizioni stesse.
Come accennato in precedenza, ho tre unità esterne collegate alla mia macchina virtuale, iniziamo con /dev/sdc .
Usiamo il pvcreate comando per creare un volume fisico. Basta passare il nome del dispositivo e nient'altro.
sudo pvcreate /dev/sdc Dovresti vedere qualcosa del genere:-
example@unixlinux.online:~$ sudo pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created.
Successivamente partizionerò /dev/sdd in parti uguali. Usa qualsiasi strumento, cfdisk , parted , fdisk ecc, ci sono molti strumenti per ottenere questo lavoro.
example@unixlinux.online:~$ lsblk -o name,size,fstype | grep sdd
sdd 5G
├─sdd1 2.5G
└─sdd2 2.5G
Ora puoi creare rapidamente altri due volumi fisici da queste due partizioni in un unico passaggio, passare entrambi questi dispositivi a pvcreate subito.
sudo pvcreate /dev/sdd1 /dev/sdd2 Dai un'occhiata:-
example@unixlinux.online:~$ sudo pvcreate /dev/sdd1 /dev/sdd2
Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created. Elencare i volumi fisici disponibili
Ci sono tre comandi che puoi usare per ottenere l'elenco dei volumi fisici disponibili, pvscan , pvs e pvdisplay . In genere non è necessario passare nulla a questi comandi.
pvscan :-
example@unixlinux.online:~$ sudo pvscan
PV /dev/sdc lvm2 [5.00 GiB]
PV /dev/sdd1 lvm2 [2.50 GiB]
PV /dev/sdd2 lvm2 [<2.50 GiB]
Total: 3 [<10.00 GiB] / in use: 0 [0 ] / in no VG: 3 [<10.00 GiB]
pvs :-
example@unixlinux.online:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 lvm2 --- <2.50g <2.50g
pvdisplay :-
example@unixlinux.online:~$ sudo pvdisplay
"/dev/sdc" is a new physical volume of "5.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 5.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID SzSkdD-xKYa-4y7P-teyU-481p-uiQ8-qieMJJ
"/dev/sdd1" is a new physical volume of "2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd1
VG Name
PV Size 2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 553Iy4-JJ21-LfIw-udtO-j9Cd-7gFS-iXXFVS
"/dev/sdd2" is a new physical volume of "<2.50 GiB"
--- NEW Physical volume ---
PV Name /dev/sdd2
VG Name
PV Size <2.50 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID bf7ghn-QkPm-EUdp-GdyW-shMG-5sMn-VhNtYB Come puoi vedere, oltre a elencare solo i volumi fisici, questi comandi ti danno anche un sacco di altre informazioni su questi volumi.
Rimozione di un volume fisico
Puoi rimuovere un volume fisico con pvremove comando. Proprio come pvcreate , passa semplicemente i dispositivi (che sono inizializzati come volumi fisici) a pvremove comando.
A scopo dimostrativo, rimuoverò /dev/sdd2 dall'elenco.
sudo pvremove /dev/sdd2 L'output dovrebbe essere identico a questo:-
example@unixlinux.online:~$ sudo pvremove /dev/sdd2
Labels on physical volume "/dev/sdd2" successfully wiped.
Ora elenca i volumi fisici con sudo pvs
example@unixlinux.online:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sdc lvm2 --- 5.00g 5.00g
/dev/sdd1 lvm2 --- 2.50g 2.50g
/dev/sdd2 non c'è più.
2. Gruppi di volumi
I gruppi di volumi sono raccolte di volumi fisici. È il livello di astrazione successivo in LVM. I gruppi di volumi sono il pool di archiviazione che combina la capacità di archiviazione di più dispositivi di archiviazione non elaborati.
Utilità: Tutti i nomi di utilità dei gruppi di volumi iniziano con vg , sta per V olume G gruppo, ad es. vgcreate , vgs , vgrename ecc.
Creazione di gruppi di volumi
I gruppi di volumi vengono creati utilizzando vgcreate comando. Il primo argomento per vgcreate è il nome che vuoi assegnare a questo gruppo di volumi e il resto è l'elenco dei volumi fisici che eseguiranno il backup del pool di archiviazione.
sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1 Esempio:-
example@unixlinux.online:~$ sudo vgcreate lvm_tutorial /dev/sdc /dev/sdd1
Volume group "lvm_tutorial" successfully created Elencare i gruppi di volumi
Elencare i gruppi di volumi è simile all'elencare i volumi fisici, puoi usare diversi comandi con diversi livelli di verbosità, vgdisplay , vgscan e vgs .
Personalmente preferisco vgs comando, sudo vgs
example@unixlinux.online:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
lvm_tutorial 2 0 0 wz--n- 7.49g 7.49g
vgscan :-
example@unixlinux.online:~$ sudo vgscan
Found volume group "lvm_tutorial" using metadata type lvm2
vgdisplay :-
example@unixlinux.online:~$ sudo vgdisplay
--- Volume group ---
VG Name lvm_tutorial
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 7.49 GiB
PE Size 4.00 MiB
Total PE 1918
Alloc PE / Size 0 / 0
Free PE / Size 1918 / 7.49 GiB
VG UUID LYVE9P-vY0G-OAW6-an8q-yfBx-rrB1-YU61m1 Elencare i volumi fisici allegati a un gruppo di volumi
È possibile elencare tutti i volumi fisici connessi a un gruppo di volumi specifico utilizzando il comando seguente:-
sudo pvdisplay -S vgname=<volume_group_name> -C -o pv_name Esempio:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1 Puoi anche ottenere il conteggio dei volumi fisici.
sudo vgdisplay -S vgname=<volume_group_name> -C -o pv_count Esempio:-
example@unixlinux.online:~$ sudo vgdisplay -S vgname=lvm_tutorial -C -o pv_count
#PV
3 Estensione di un gruppo di volumi
Estendere un gruppo di volumi significa aggiungere ulteriori volumi fisici a un gruppo di volumi. Per farlo il vgextend viene utilizzato il comando. La sintassi è semplice:-
vgextend <volume_group> <physical_volume1> <physical_volume2> ....
Estendiamo il nostro lvm_tutorial volume di /dev/sdd2 .
sudo vgextend lvm_tutorial /dev/sdd2 Concentrati sull'output:-
example@unixlinux.online:~$ sudo vgextend lvm_tutorial /dev/sdd2
Physical volume "/dev/sdd2" successfully created.
Volume group "lvm_tutorial" successfully extended
Nella sezione del volume fisico abbiamo finito con la rimozione di /dev/sdd2 come volume fisico, ma una partizione o un disco grezzo deve essere inizializzato come volume fisico, altrimenti LVM non sarà in grado di gestirlo come parte di un gruppo di volumi. Quindi vgextend prepara /dev/sdd2 prima di aggiungerlo al gruppo di volumi.
Ora elenca i volumi fisici allegati a questo gruppo di volumi, per sicurezza.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name Uscita:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdc
/dev/sdd1
/dev/sdd2
/dev/sdd2 è ora nell'elenco come previsto.
Riduzione di un gruppo di volumi
Proprio come estendere un gruppo di volumi significa aggiungere un altro volume fisico, ridurlo significa rimuovere uno o più volumi fisici.
Usiamo il vgreduce comando per farlo. La sintassi generale è la seguente:-
vgreduce <vgname> <physical_volume1> <physical_volume2> ....
Rimuoviamo i volumi fisici /dev/sdc e /dev/sdd1 .
sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1 Esempio:-
example@unixlinux.online:~$ sudo vgreduce lvm_tutorial /dev/sdc /dev/sdd1
Removed "/dev/sdc" from volume group "lvm_tutorial"
Removed "/dev/sdd1" from volume group "lvm_tutorial" Se un gruppo di volumi ha volumi logici attivi, non sarai in grado di ridurlo in questo modo. Elenca di nuovo i volumi fisici.
sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name Uscita:-
example@unixlinux.online:~$ sudo pvdisplay -S vgname=lvm_tutorial -C -o pv_name
PV
/dev/sdd2 Quei due volumi fisici sono spariti.
Ora, per il resto di questo articolo, aggiungi di nuovo quei due volumi fisici.
sudo vgextend lvm_tutorial /dev/sdc /dev/sdd1 Rimozione di un gruppo di volumi
Puoi rimuovere un volume logico con vgremove comando.
sudo vgremove lvm_tutorial Non eseguire questo comando in questo momento, altrimenti dovresti ricreare il gruppo di volumi. Se vuoi provarlo, eseguilo alla fine di questo articolo.
3. Volumi logici
Questo è ciò con cui lavorerai principalmente. Un volume logico è come una partizione, ma invece di stare sopra un disco grezzo, si trova sopra un gruppo di volumi. Puoi,
- Formatta un volume logico con qualsiasi filesystem desideri.
- Montalo ovunque nel filesystem che desideri.
In questa sezione imparerai,
- Come creare volumi logici.
- Operazioni comuni su un volume logico.
- Ridimensionamento di un volume logico.
- Rimozione di un volume logico.
Utilità: Tutti i nomi di utilità dei gruppi di volumi iniziano con lv , sta per L logico V olume. per esempio. lvcreate , lvs , lvreduce ecc.vgcreate , vgs , vgrename ecc.
Creazione di volumi logici
I volumi logici vengono creati utilizzando lvcreate comando. La sintassi comunemente usata è la seguente,
sudo lvcreate -L <size> -n <lvname> <vgname> Lascia che lo spieghi per te:-
- Il
-Ll'opzione è per la dimensione del nuovo volume logico, puoi usare qualsiasi numero intero con "GB", "MB" o "KB" alla fine. Per esempio. "1GB". - Il
-nl'opzione serve per nominare questo volume logico. - Infine devi passargli il nome del gruppo di volumi di cui farà parte questo volume logico. Quindi, mentre fornisci una dimensione al volume logico, assicurati che il gruppo di volumi abbia lo spazio disponibile.
Esegui il seguente comando sulla macchina virtuale:-
sudo lvcreate -L 5GB -n lv1 lvm_tutorial Esempio di output:-
example@unixlinux.online:~$ sudo lvcreate -L 5GB -n lv1 lvm_tutorial
Logical volume "lv1" created. Operazioni comuni su un volume logico
Come ho detto in precedenza, puoi inserire un filesystem su un volume logico e montarlo ovunque sul filesystem.
Una volta creato puoi trovare il volume logico in /dev/<vgname>/<lvname> il percorso. Ad esempio nel nostro caso il volume sarà in /dev/lvm_tutorial/lv1 .
example@unixlinux.online:~$ ls -l /dev/lvm_tutorial/lv1
lrwxrwxrwx 1 root root 7 May 17 02:09 /dev/lvm_tutorial/lv1 -> ../dm-0 Ora puoi usarlo come qualsiasi partizione. Formattalo con ext4,
sudo mkfs.ext4 /dev/lvm_tutorial/lv1
Montalo in un punto della tua attuale struttura di directory come /mnt ,
sudo mount -t ext4 /dev/lvm_tutorial/lv1 /mnt Ridimensionamento di un volume logico
Puoi estendere un volume logico usando lvextend comando e ridurne le dimensioni usando lvreduce comando. Oppure puoi usare il comando singolo lvresize per svolgere entrambi i compiti.
Per prima cosa vediamo se nel gruppo di volumi è rimasto dello spazio o meno.
sudo vgs -S vgname=lvm_tutorial -o vg_free Uscita:-
example@unixlinux.online:~$ sudo vgs -S vgname=lvm_tutorial -o vg_free
VFree
<4.99g In base all'output, mi è rimasto un po' di spazio, quindi aumentiamo la dimensione del volume di 2 GB.
Ricorda che il volume logico è ancora montato su /mnt .
example@unixlinux.online:~$ mount | grep '/mnt'
/dev/mapper/lvm_tutorial-lv1 on /mnt type ext4 (rw,relatime) Utilizzare il seguente comando per ridimensionare il volume:-
sudo lvresize -L +2GB lvm_tutorial/lv1 La sintassi generale è qualcosa del genere:-
lvresize -L [+|-][Size] <vgname>/<lvname>
Il simbolo + o - dopo -L dipende se stai cercando di aumentare o diminuire la dimensione del volume rispettivamente.
Dopo che la dimensione del volume è aumentata, anche il filesystem deve essere ridimensionato. Per ext4, il comando da usare è resize2fs .
sudo resize2fs /dev/lvm_tutorial/lv1 Uscita:-
example@unixlinux.online:~$ sudo resize2fs /dev/lvm_tutorial/lv1
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/lvm_tutorial/lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/lvm_tutorial/lv1 is now 1835008 (4k) blocks long. Non tutti i filesystem supportano il ridimensionamento a caldo, Ext4 e XFS sono uno di quelli supportati. Ti consiglio di attenerti a questi. La riduzione di un volume logico è un'operazione leggermente più complicata e non ne parlerò qui in questo articolo. Ridurrò le dimensioni di questo volume di 1 GB.
Rimozione di un volume logico
Rimuovi un volume logico con lvremove comando. La sintassi del comando è la seguente:-
lvremove <vgname>/<lvname> Esegui questo comando sulla macchina virtuale:-
sudo lvremove lvm_tutorial/lv1 Uscita:-
example@unixlinux.online:~$ sudo lvremove lvm_tutorial/lv1
Do you really want to remove and DISCARD active logical volume lvm_tutorial/lv1? [y/n]: y
Logical volume "lv1" successfully removed
Esistono molte altre operazioni eseguibili su volumi logici, volumi fisici e gruppi di volumi, ma non è possibile scrivere tutto questo in un unico articolo.
Ti ho lasciato con un altro disco /dev/sde nella macchina virtuale. Usalo, esercitati con alcuni dei comandi di questo articolo, crea un nuovo gruppo di volumi, estendine uno esistente, esercitati.
Spero che questo articolo ti sia stato utile, se desideri saperne di più in futuro, fammi sapere nella sezione commenti in basso.