GNU/Linux >> Linux Esercitazione >  >> Linux

La guida completa per principianti a LVM in Linux

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:

  1. Volumi fisici
  2. Gruppi di volumi
  3. 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.

[email protected]:~$ 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?

  1. Volumi fisici
  2. Gruppi di volumi
  3. 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.

Tutto ciò che viene menzionato dopo questa casella è distruttivo, a meno che tu non stia utilizzando un ambiente virtuale o un server sul cloud in cui non sono archiviati dati importanti o possono essere raggiunti per caso, ti consiglio di interrompere subito.

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:-

[email protected]:~$ 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.

[email protected]:~$ 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:-

[email protected]:~$ 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 :-

[email protected]:~$ 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 :-

[email protected]:~$ 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 :-

[email protected]:~$ 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:-

[email protected]:~$ sudo pvremove /dev/sdd2
  Labels on physical volume "/dev/sdd2" successfully wiped.

Ora elenca i volumi fisici con sudo pvs

[email protected]:~$ 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:-

[email protected]:~$ 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

[email protected]:~$ sudo vgs
  VG           #PV #LV #SN Attr   VSize VFree
  lvm_tutorial   2   0   0 wz--n- 7.49g 7.49g

vgscan :-

[email protected]:~$ sudo vgscan
  Found volume group "lvm_tutorial" using metadata type lvm2

vgdisplay :-

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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 -L l'opzione è per la dimensione del nuovo volume logico, puoi usare qualsiasi numero intero con "GB", "MB" o "KB" alla fine. Per esempio. "1GB".
  • Il -n l'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:-

[email protected]:~$ 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 .

[email protected]:~$ 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:-

[email protected]:~$ 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 .

[email protected]:~$ 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:-

[email protected]:~$ 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:-

[email protected]:~$ 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.


Linux
  1. Una guida al terminale Linux per principianti

  2. Presentazione della guida alla comunicazione tra processi in Linux

  3. Una guida per principianti ai permessi di Linux

  4. Una guida per principianti al firewalld in Linux

  5. Installa Linux Mint 19 su VirtualBox:la guida completa

Guida completa per principianti alla distribuzione del cluster Kubernetes su CentOS (e altri Linux)

Guida per principianti ai Syslog in Linux

Una guida completa per installare Tomcat su Linux

La guida completa per installare MySQL su Ubuntu

Comandi della directory Linux:una guida completa

Cronjob - La guida completa ai Cronjobs