Skip to content

Instantly share code, notes, and snippets.

@MatteoRagni
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MatteoRagni/9422265 to your computer and use it in GitHub Desktop.
Save MatteoRagni/9422265 to your computer and use it in GitHub Desktop.
Una piccola guida, per installare LVM su 2 hdd e mantenendo tutti i file. Backup a discrezione!

Uprage a LVM

Convenzioni

Di seguito le convenzioni utilizzato in questa piccola guida. Si considerano i seguenti device fisici:

  • /dev/sda: device che contiene la partizione del sistema operativo;
  • /dev/sdb: device che contiene una partizione NTFS, con dati che devono essere importati nell'LVM;
  • /dev/sdc: device senza partizioni, che verrà aggiunto all'LVM.

Ogni device /dev/sdX viene definito physical volume (volume fisico). L'insieme delle partizioni di volumi fisici che fanno parte di LVM sono detti volume group (gruppo di volumi). L'astrazione come singola entità per il sistema del gruppo di volumi viene detto logical volume (volume logico).

 PHYSICAL VOLUME                          ABSTRACTION LAYER
 ===============                          =================

 /dev/sdX                                   /dev/storage
 +-------------+                          +-------------+
 |+-----------+|                          |+-----------+|
 || /dev/sdX1 |--------------------------->| /dev/sdX1 ||
 |+-----------+|                          |+-----------+|
 |+-----------+|                          |+-----------+|
 || /dev/sdX2 ||<-- Volume Fisico      +-->| /dev/sdY1 ||
 |+-----------+|                       |  |+-----------+|<---+
 +-------------+                       |  +-------------+    |
                                       |         |           |
 /dev/sdY                              |         |       Volume group
 +-------------+                       |         |
 |+-----------+|                       |   +-----V----------------+
 || /dev/sdY1 |------------------------+   | /dev/storage/storage |
 |+-----------+|                           +----------------------+
 |+-----------+|                                ^
 || /dev/sdY2 |<-- Partizione di un             |
 |+-----------+|   Volume fisico          Logical volume
 +-------------+
                                          ======================
                                          USER ABSTRACTION LAYER

Per creare un nuovo array LVM è necessario effettuare queste operazioni:

  • Selezionare le partizioni che entreranno a far parte del volume group;
  • Creare un volume logico dal gruppo di volumi.

Alle operazioni qui descritte c'è da aggiungere il fatto che una delle partizioni che enetreranno a far parte dell'LVM contengono già dati che devono essere spostati all'interno dell'LVM.

Il volume LVM creato verrà chiamato storage.

Sia ben chiaro: eseguire una operazione di questo tipo è molto rischioso, potrebbe comportare la perdita di tutti i dati, soprattutto nel caso di spegnimento/blocco improvviso del sistema. Consiglio caldamente di eseguire tutto in una console nel quale non sia attivo il server grafico.

Creazione del primo LVM

Formattazione del primo device

Il primo passo è partizionare e formattare /dev/sdc. Per farlo utilizziamo il comando fdisk.

$ sudo fdisk /dev/sdc

Essendo un disco di tipo commerciale, quasi sicuramente presenta una formattazione NTFS che è necessario eliminare. fdisk ha una interfaccia molto semplice. Per avere una descrizione dei comandi disponibili utilizzare la lettera m. Per visualizzare le partizioni disponibili all'interno del disco utilizzare la lettera p.

  1. Eliminiamo tutte le partizioni presenti all'interno del disco utilizzando la lettera d. Se le partizioni presenti sul disco sono più di una allora si dovrà scegliere quale partizioni eliminare.
  2. Una volta eliminate, creiamo una nuova partizione con la lettera n, utilizzando le impostazioni di default sulla partizione. La partizione deve essere di tipo primario.
  3. Una volta creata la nuova partizione, rendiamola di tipo LVM, utilizzando il comando t e digitando il codice 8e.
  4. Per scrivere le operazioni su disco è necessario utilizzare il comando w. fdisk uscirà dopo aver effettuato la scrittura su disco.

Di seguito un estratto di una sessione di fdisk di esempio:

$ sudo fdisk /dev/sdc
[sudo] password for user:

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): d
Selected partition 1

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-312581807, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-312581807, default 312581807): 
Using default value 312581807

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Creazione dell'LVM

Installazione delle utility

Esistono una serie di comandi per la creazione e gestione degli LVM. Questi sono normalmente contenuti nel pacchetto lvm2, che deve essere installato:

$ sudo apt-get update && sudo apt-get install lvm2

per poi creare l'insieme di volumi che genereranno l'array LVM.

Identificazione dei volumi fisici

$ sudo pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created 

È possibile utilizzare altre utility per visualizzare lo stato attuale, come i comandi pvscan e pvdisplay, che devono essere utilizzati come super-utente.

Creazione del gruppo di volumi

Andiamo a creare adesso il gruppo di volumi:

$ sudo vgcreate storage /dev/sdc1

Volume  group "storage" successfully created 

In questo modo la dimensione di ogni simbolo pacchetto è di 4MB. È possibile cambiare la dimensione dello spazio di allocazione usando la flag -s sul comando precedente (ma si consiglia caldamente di lasciare come dimensione i canonici 4MB). Per poter visualizzare il risultato del comando precedente è possibile utilizzare il comando vgdisplay

Creazione del volume logico e formattazione

Ultimo step per la creazione di LVM, è la creazione del volume logico:

$ sudo lvcreate -l 100%VG -n storage storage

Logical volume "storage" created 

Mediante la flag -l si specifica che il logical volume deve utilizzare tutto il volume group disponibile. È possibile vedere il risultato della operazione mediante il comando lvdisplay. Per poter iniziare ad utilizzare il volume è necessario fare in modo che questo sia formattato e montato:

$ sudo mkfs.ext4 -c /dev/storage/storage

In seguito è possibile fare in modo che sia montato automaticamente utilizzando /etc/fstab. Utilizzando il device mapper, si può scegliere di montare la partizione nella directory (nell'esempi /mount/storage) ovvero inserendo la seguente riga nel file:

$ sudo mkdir /mount/storage
$ sudo nano /etc/fstab

[...]
/dev/mapper/storage-storage  /mount/storage  ext4  defaults  0  2

dopo aver salvato è possibile rimontare tutte le partizioni definite nel fstab mediante il comando:

$ sudo mount -a

Sincronizzazione dati

Il prossimo step è la sincronizzazione di tutti i dati contenuti nella vecchia partizione NTFS sul nuovo sistema. Un buon modo per fare questo è utilizzare l'applicazione rsync che si prende carico anche di tutti i check necessari per la copia. Considerando:

/media/storage -> /dev/mapper/storage-storage
/media/Volume -> /dev/sdb1

possiamo fare una copia di tutti i dati come segue (ci metterà un bel po'...)

$ rsync --progress -avzh /media/Volume /media/storage

Una volta completata la sincronizzazione dei dati siamo pronti per la rischiosissima estensione del LVM utilizzando il vecchio disco.

Aggiunta di un volume a LVM

Formattazione e preparazione del volume

A questo punto è necessario preparare il disco all'inserimento nell'array di volumi fisici. La preparazione prevede ancra una volta l'utilizzo di fdisk, come abbimao fatto in precedenza.

  • sudo fdisk /dev/sdb;
  • utilizzare l'opzione d per eliminare le partizioni presenti;
  • definire una nuova partizione primaria con le opzioni n e p (usare dimensioni predefinite);
  • definire la partizione di tipo LVM, usando l'opzione t e il valore 8e;
  • scrivere le modifiche su disco con l'opzione w.

In questo modo il volume è pronto per essere aggiunto all'array.

Aggiunta della partizione

Aggiungiamo la partizione ai physical volume:

$ sudo pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created

poi aggiungiamo il physical volume al volume group:

$ sudo vgextend storage /dev/sdb1

Volume group "Mega" successfully extended

infine è necessario espandere il logical volume alla massima dimensione possibile:

$ sudo lvextend /dev/storage/storage /dev/sdb1

Extending logical volume root to ??.?? GiB
Logical volume root successfully resized

Possiamo vedere tutte le modifiche effettuate sfruttando i comandi pvscan, vgdisplay e lvdisplay, come super-utente.

Ridimensionamento della partizione

Ultimo step necessario a completare l'operazione è il ridimensionamento a caldo della partizione (on-line resizing) /dev/mapper/storage-storage. Per fare questo è necessario astenersi dall'accesso alla partizione, sia in lettura che scrittura, e in generale lasciare operare il sistema senza interagire. L'operazione di resize è particolarmente onerosa dal punto di vista computazionale e può richiedere parecchio tempo.

Un blocco/spegnimento del sistema in questa fase potrebbe portare alla corruzione del filesystem e alla perdita di dati.

il comando per il resize del filesystem è il seguente:

$ sudo resize2fs /dev/storage/storage

resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/storage/storage is mounted on /mount/storage; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 3
Performing an on-line resize of /dev/storage/storage to ????????? (4k) blocks.
The filesystem on /dev/storage/storage is now ????????? blocks long.

E con questo abbiamo finito!

RECAP!

Ricapitolando, i comandi fondamentali, secondo le convenzioni adottate.

  • $ sudo apt-get update && sudo apt-get install lvm2: installare lvm2
  • $ sudo fdisk /dev/sdc: Eliminare tutte le partizioni, crearne una nuova primaria di tipo 8e
  • $ sudo pvcreate /dev/sdc1: creare il pv
  • $ sudo vgcreate storage /dev/sdc1: aggiungere pv al vg
  • $ sudo lvcreate -l 100%VG -n storage storage: creare il lv
  • $ sudo mkfs.ext4 -c /dev/storage/storage: formattare lv
  • $ sudo mkdir /mount/storage: creare la dir per il montaggio dei lv
  • $ sudo nano /etc/fstab: inserimento del montaggio nelle fstab
  • $sudo mount -a: montaggio di tutti i dev in fstab
  • $ rsync --progress -avzh /media/Volume /media/storage: copia dei file
  • $ sudo fdisk /dev/sdb: Eliminare tutte le partizioni, crearne una nuova primaria di tipo 8e
  • $ sudo pvcreate /dev/sdb1: creare il pv
  • $ sudo vgextend storage /dev/sdb1: estendere il vg
  • $ sudo lvextend /dev/storage/storage /dev/sdb1: estendere il lv
  • $ resize2fs /dev/storage/storage: estendere il fs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment