22 gen 2013

LVM: backup con snapshot su "volume group" pieno.

LVM ha una feature veramente interessante che permette di creare una fotografica, uno snapshot, di un volume logico;

questa fotografia è una copia di tutto il volume logico in uno specifico momento.
In questo modo si può sfruttare lo snapshot per fare un backup dato che garantisce la consistenza dei dati. Nessun dato verrà modificato sullo snapshot, anche se il volume group originale viene movimentato (modifica, aggiunta, cancellazione file).

Ingenuamente però quando ho creato la partizione /home ho dedicato un intero volume group.
Andando a creare lo snapshot con il seguente comando

# lvcreate --size 1G --snapshot --name snap /dev/h0me/lvol0
  Volume group "h0me" has insufficient free space (0 extents): 25 required.


si ottiene un errore, che indica che non c'e' più spazio sul volume group per creare lo snapshot.
La creazione dello snapshot di 1 solo gigabyte non è un errore: questo infatti dovrà solo contenere le informazioni che varieranno da quando viene creato lo snapshot fino al termine del backup e relativa cancellazione dello snapshot.
Infatti lo snapshot conterrà solo i link alla partizione vera /home; nel caso di modifica di file la nuova versione sarà memorizzata nella reale /home, mentre la copia "vecchia" verrà spostata sul volume di snapshot creato.

Per visualizzare quanto spazio ho effettivamente libero sul volume group /home, nel mio caso si chiama "h0me", ho eseguito il comando:

# vgdisplay h0me
  --- Volume group ---
  VG Name               h0me
  Free  PE / Size       0 / 0


Chiaramente 0 non è sufficiente per creare uno snapshot :(

Allora si deve procedere ad allargare il volume group aggiungendo un physical volume "vergine". Scrivo vergine in quanto se verrà aggiunto i dati in esso contenuti verranno distrutti. Quindi vergine o con dati, ma si sappia che il risultato sarà la distruzione dei dati precedentemente presenti.

Io per comodità ho aggiunto un supporto esterno riconosciuto come /dev/sdb.

Ora prima si deve creare il physical volume

# pvcreate /dev/sdb1
  Writing physical volume data to disk "/dev/sdb1"
  Physical volume "/dev/sdb1" successfully created


E questo si va ad aggiungerlo al vg h0me

# vgextend h0me /dev/sdb1
  Volume group "h0me" successfully extended


Ora il vg che contiene i dati di /home ha ben 30 GB liberi e si può procedere alla creazione dello snapshot

# vgdisplay h0me
  --- Volume group ---
  VG Name               h0me
  Free  PE / Size       7717 / 30.14 GiB


# lvcreate --size 1G --snapshot --name snap /dev/h0me/lvol0


Viene chiesta conferma e con il comando lvdisplay posso vedere come è stato creato lo snapshot

# lvdisplay
  --- Logical volume ---
  LV Path                /dev/h0me/lvol0
  LV Name                lvol0
  VG Name                h0me
  LV snapshot status     source of
                         snap [active]

  --- Logical volume ---
  LV Path                /dev/h0me/snap
  LV Name                snap
  VG Name                h0me
  LV snapshot status     active destination for lvol0



Per poterlo utilizzare si deve montare su una cartella

# mount /dev/mapper/h0me-snap /mnt/usb/

Ecco snap è una copia identica della /home

# df -h
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/h0me-lvol0    187G  104G   74G  59% /home
/dev/mapper/h0me-snap     187G  104G   74G  59% /mnt/usb


ora è possibile effettuare il backup della partizione
il metodo di backup non è ora in ambito, comunque si sappia che effettuo backup sia con tar.gz che con rdiff.

Una volta terminato si dovrà smontare lo snapshot e rimuoverlo.

# umount /mnt/usb/

/# lvremove /dev/h0me/snap
Do you really want to remove active logical volume snap? [y/n]: y
  /sbin/dmeventd: stat failed: No such file or directory
  Logical volume "snap" successfully removed


Ed infine ridurre la /home togliendo il pv aggiunto in precedenza.

# vgreduce h0me /dev/sdb1
  Removed "/dev/sdb1" from volume group "h0me"


Nessun commento: