LVM: comandi base

14 luglio 2018

Gestire i dischi tramite il Logical Volume Manager (LVM) garantisce maggiore elasticità rispetto alla classico approccio basato esclusivamente sulle partizioni. Una spiegazione introduttiva di LVM è stata data due capitoli fa al capoverso Logical Volume, non la ripeteremo, qualora la riteniate utile prima di partire vi invitiamo a visionarla.

Sarà bene comprendere che per utilizzare un disco LVM innanzi tutto lo battezza. In pratica inserisce una label che identifica lo spazio come gestito da LVM. I primi quattro settori di un disco sono controllati da LVM al boot. Per garantire compatibilità con lo MBR di norma la label è inserita nel secondo settore. LVM gestisce gli spazi in extents. Gli extents sono le frazioni minime, non ulteriormente frazionabili, in cui uno spazio LVM è automaticamente suddiviso. Un Physical Volume può essere indifferentemente un disco o una partizione, ciò consentirà di adottare anche strategie ibride. Ovviamente quando l’intero disco sarà utilizzato con LVM non è necessario installare alcuna tabella delle partizioni. Qualora sia presente è buona norma distruggerla. Forniremo un utile comando da CLI per ottenere questo effetto. Quello che segue non è però un comando da usare alla leggera poiché risulta devastante per i dati contenuti nel disco pertanto siate matematicamente certi di lanciarlo solo sul disco giusto effettuando tutti i controlli del caso.


fprincipe@html3:~$ sudo dd if=/dev/zero of=/dev/sdd bs=1k count=1
1+0 records in
1+0 records out
1024 bytes (1.0 kB, 1.0 KiB) copied, 0.0151983 s, 67.4 kB/s
fprincipe@html3:~$ sudo blockdev --rereadpt /dev/sdd

Dovrete sostiture a /dev/sdd (utilizzato in fase di test) il percorso del disco che intendete “nuclearizzare”.
Altra cosa da tenere presente è che per ragioni di affidabilità viene di norma sconsigliata la collocazione della partizione /boot all’interno di un volume LVM poiché la stessa deve risultare raggiungibile anche in situazioni di accesso minimale.

Inizializazzione e creazione

Prenderemo subito l’avvio con esempi pratici di utilizzo, come di consueto commentati e debitamente illustrati.
Il primo comando che utilizzeremo è pvcreate che per l’appunto inizializza uno spazio di storage. Con pvcreate /dev/sdb1 /dev/sdc1 inizializziamo quindi le due “prime” partizioni sui dischi sdb e sdc creando i Physical Volume (PV). A questo punto incorporeremo i PV di nostra scelta in insiemi chiamati Volume Group (VG). Il comando da adoperare è vgcreate a cui daremo come argomento il nome del raggruppamento seguito dai device da inserire nel gruppo. Ora non dobbiamo far altro che creare i Logical Volume che desideriamo utilizzare tramite il comando lvcreate con argomento -n per il nome e -L seguito da un valore espresso in forma umanamente intelligibile per dichiarare la capienza (nell’esempio “G” è usato per intendere gigabyte).


fprincipe@html3:~$ sudo pvcreate /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.
fprincipe@html3:~$ sudo vgcreate test /dev/sdb1 /dev/sdc1
  Volume group "test" successfully created
fprincipe@html3:~$ sudo lvcreate -n lv01 -L 20g notest
  Volume group "notest" not found
  Cannot process volume group notest
fprincipe@html3:~$ sudo lvcreate -n lv01 -L 20g test
  Logical volume "lv01" created.
fprincipe@html3:~$ sudo lvcreate -n lv02 -L 10g test
  Logical volume "lv02" created.
fprincipe@html3:~$ sudo lvdisplay
  --- Logical volume ---
  LV Path                /dev/test/lv01
  LV Name                lv01
  VG Name                test
  LV UUID                QkenZG-cdVf-Qbtx-HHbr-0x9F-2Kcn-M8J1nP
  LV Write Access        read/write
  LV Creation host, time html3, 2018-07-10 18:29:18 +0000
  LV Status              available
  # open                 0
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/test/lv02
  LV Name                lv02
[...]
fprincipe@html3:~$ sudo pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               test
  PV Size               <500.00 GiB / not usable 3.00 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              127999
  Free PE               120319
  Allocated PE          7680
  PV UUID               HRsjv2-T7wW-fVSI-kYSi-oNBq-KEax-98UFB8
   
  --- Physical volume ---
  PV Name               /dev/sdc1
[...]

Qualora dovessimo richiedere di generare un Logical Volume attingendo a un Volume Group che non può esaudire la richiesta otterremo in risposta un errore. Subito sopra possiamo vedere un esempio di richiesta indirizzata a un volume group inesistente. In ogni momento potremo ottenere una panoramica generale con i due comandi pvdisplay e lvidsplay che ci daranno in output, rispettivamente, la situazione dei volumi fisici e di quelli logici.
Passiamo oltre. Ora abbiamo dei contenitori (i volumi logici) in cui è possibile inserire un filesystem. Ecco un esempio di utilizzo che verrà commentato immediatamente a seguire.


fprincipe@html3:~$ sudo mkfs.ext4 /dev/test/lv01
mke2fs 1.44.1 (24-Mar-2018)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: ec077e8a-8efa-4548-b337-0b286eb2ac49
[...]
Writing superblocks and filesystem accounting information: done   

fprincipe@html3:~$ mkdir lv01
fprincipe@html3:~$ sudo mount -t ext4 /dev/test/lv01 lv01

fprincipe@html3:~$ df -h
Filesystem             Size  Used Avail Use% Mounted on
udev                   464M     0  464M   0% /dev
[...]
tmpfs                   99M     0   99M   0% /run/user/1000
/dev/mapper/test-lv01   20G   45M   19G   1% /home/fprincipe/lv01

fprincipe@html3:~$ sudo lvextend -L +10g test/lv01
  Size of logical volume test/lv01 changed from 20.00 GiB (5120 extents) to
30.00 GiB (7680 extents).
  Logical volume test/lv01 successfully resized.

fprincipe@html3:~$ df -h
Filesystem             Size  Used Avail Use% Mounted on
udev                   464M     0  464M   0% /dev
[...]
/dev/mapper/test-lv01   20G   45M   19G   1% /home/fprincipe/lv01

fprincipe@html3:~$ sudo resize2fs /dev/mapper/test-lv01
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/mapper/test-lv01 is mounted on /home/fprincipe/lv01; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/mapper/test-lv01 is now 7864320 (4k) blocks long.

fprincipe@html3:~$ df -h
Filesystem             Size  Used Avail Use% Mounted on
udev                   464M     0  464M   0% /dev
[...]
tmpfs                   99M     0   99M   0% /run/user/1000
/dev/mapper/test-lv01   30G   44M   28G   1% /home/fprincipe/lv01

fprincipe@html3:~$ sudo lvextend -l +100%FREE test/lv01
  Size of logical volume test/lv01 changed from <30.00 GiB (7680 extents) to
<1.46 TiB (381438 extents).
  Logical volume test/lv01 successfully resized.

La LV Path è per noi l’equivalente dell’indirizzo di un nuovo storage. Potremo quindi creare su di esso un filesystem, nel caso d’esempio ext4. Creiamo un mountpoint. Il comando mount non fa altro che montare il fileystem al mountpoint in questione. Come possiamo vedere, se interrogato con df, il nuovo filesystem ci offre una disponibilità secondo le attese, poco al di sotto dei 20Gb (i filesystem ext4, come gli ext3, spendono un po’ del proprio spazio per implementare alcune funzioni di controllo).

Allargare e rimpicciolire

Siamo ora in grado di osservare una delle potenzialità di LVM. Con lvextend -L possiamo specificare la quantità di spazio da aggiungere a un Logical Volume espresso in Gb. E’ altresì possibile dilatare un Logical Volume anche utilizzando l’opzione -l a cui di norma si dovrebbe passare una quantità di extent ma che accetta anche definizioni parametriche espresse quale percentuale. Detta percentuale può essere calcolata sullo spazio libero del volume group con %FREE, sul volume fisico con %PVS o sull’intera capienza nominale del volume group con %VG. Ovviamente, dopo aver allargato il contenitore, dovremo anche allargare il filesystem contenuto. Il comando che abbiamo adoperato è resize2fs che può essere adoperato per gonfiare un filesystem ext2/ext3/ext4 fino alla massima dimensione possibile. Lo stesso comando può essere anche utilizzato con l’opzione -M per rimpicciolire il filesystem in modo da fargli occupare la minima quantità di spazio in funzione del suo contenuto.

LVM offre molte altre funzionalità, nel prossimo capitolo ne sarà presentata la gestione avanzata.

Tutte le lezioni

1 ... 21 22 23

Se vuoi aggiornamenti su LVM: comandi base inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su LVM: comandi base

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing