Recuperar Volúmenes físicos (PV) / lógicos (LV) después de eliminarlos / modificarlos

Volúmenes físicos (PV): Son los discos / particiones con sistema de archivos LVM.

Volúmenes lógicos (LV): Equivalente a una partición en un sistema tradicional. El LV es visible como un dispositivo estándar de bloques, por lo que puede contener un sistema de archivos (por ejemplo /home)

/etc/lvm/archive: En este directorio se guardan archivos con toda la información sobre los cambios realizados en los volúmenes LVM. En el podremos encontrar ficheros .vg con los que retornar a una configuración anterior nuestros volúmenes LV.

Para el ejemplo se ha borrado un LV y el PV donde se encontraba

grep -i description /etc/lvm/archive/*
/etc/lvm/archive/VolGroup_00004-1520131122.vg:description = "Created *before* executing 'lvcreate -L20M -s -n congelado /dev/VolGroup/lv_root'"

La descripción de cada fichero .sv es fundamental a la hora de poder elegir la configuración anterior a la que retornar nuestros volúmenes. En el caso del ejemplo anterior, la descripción nos dice que ese fichero hace referencia a la configuración que se tenía antes de crear la instantánea congelado.

Se deben tener localizados el / los UUID de el/los LV / PV que queremos recuperar, en el caso de nuestro ejemplo será un PV entero. Veremos con un ejemplo el proceso de recuperación.

Supuesto

Con un liveCD hemos eliminado erróneamente el PV /dev/sdb del VG Volgroup, el cual ahora queremos restablecer.

Ejecutamos el comando lvdisplay para hacernos una idea de lo que está pasando.

pvdisplay

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               19.76 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              5059
  Free PE               563
  Allocated PE          4496
  PV UUID               1UTwr2-YXv3-gl3f-l6Qk-o5R7-drqX-B6VB2Z

  "/dev/sdb" is a new physical volume of "1.80 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name
  PV Size               1.80 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H

Parece que /dev/sdb no está asociado a ningún grupo de volúmenes (VG Name). Miramos en el directorio /etv/lvm/archive los ficheros que tuvieran el PV (/dev/sdb) asociado al VG (VolGroup). Lógicamente la más cercana al día del borrado accidental sería lo recomendable, para este ejemplo nos confundiremos de nuevo y escogeremos un vg que tal vez no fuera el más idóneo. Buscamos en el fichero el UUID del PV que queremos recuperar (2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H) y ejecutamos el siguiente comando.

pvcreate --restorefile /etc/lvm/archive/VolGroup_00009-1341453580.vg --uuid 2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H /dev/sdb
  Physical volume "/dev/sdb" successfully created
pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               19.76 GiB / not usable 2.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              5059
  Free PE               563
  Allocated PE          4496
  PV UUID               1UTwr2-YXv3-gl3f-l6Qk-o5R7-drqX-B6VB2Z

  "/dev/sdb" is a new physical volume of "1.80 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name                           <---------- Vemos que todavía no sale, eso es normal, debemos restablecer los metadatos. 
  PV Size               1.80 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H

Como se puede apreciar no hay PE libres, veamos qué ha pasado.

/etc/lvm/archive/VolGroup_00001-218522400.vg:description = "Created *before* executing 'vgdisplay'"
/etc/lvm/archive/VolGroup_00002-537715456.vg:description = "Created *before* executing 'vgdisplay'"
/etc/lvm/archive/VolGroup_00003-701796946.vg:description = "Created *before* executing 'vgextend VolGroup /dev/sdb'"
/etc/lvm/archive/VolGroup_00004-1520131122.vg:description = "Created *before* executing 'lvcreate -L20M -s -n congelado /dev/VolGroup/lv_root'"
/etc/lvm/archive/VolGroup_00005-1366585398.vg:description = "Created *before* executing '/sbin/vgs --noheadings -o name --config 'log{command_names=0 prefix=\"  \"}''"
/etc/lvm/archive/VolGroup_00006-1572349713.vg:description = "Created *before* executing '/sbin/vgs --noheadings -o name --config 'log{command_names=0 prefix=\"  \"}''"
/etc/lvm/archive/VolGroup_00007-193670915.vg:description = "Created *before* executing '/sbin/vgchange --monitor y --poll y --config 'log{command_names=0 prefix=\"  \"}' VolGroup'"
/etc/lvm/archive/VolGroup_00008-704815065.vg:description = "Created *before* executing 'lvextend -L 90000 /dev/VolGroup/lv_root'"
/etc/lvm/archive/VolGroup_00009-1341453580.vg:description = "Created *before* executing 'lvextend -l +100%FREE /dev/VolGroup/lv_root'"
/etc/lvm/archive/VolGroup_00010-1067505011.vg:description = "Created *before* executing '/sbin/vgs --noheadings -o name --config 'log{command_names=0 prefix=\"  \"}''"
/etc/lvm/archive/VolGroup_00011-123031988.vg:description = "Created *before* executing '/sbin/vgs --noheadings -o name --config 'log{command_names=0 prefix=\"  \"}''"

Como se puede ver en la descripción de los ficheros, hemos recuperado el volumen al estado justamente anterior al comando lvextend que ampliaba LV_root al PV. Eso explica el por qué tenemos el 100% (461 PE) del espacio libre. Vamos entonces a seleccionar el fichero correcto para nuestra restauración.

ls -lt /etc/lvm/archive/*
-rw-------. 1 root root 2220 Dec 23 15:23 /etc/lvm/archive/VolGroup_00010-1067505011.vg
-rw-------. 1 root root 1806 Dec 23 15:23 /etc/lvm/archive/VolGroup_00011-123031988.vg 
-rw-------. 1 root root 2012 Dec 13 16:57 /etc/lvm/archive/VolGroup_00009-1341453580.vg
-rw-------. 1 root root 2008 Dec 13 16:55 /etc/lvm/archive/VolGroup_00008-704815065.vg
-rw-------. 1 root root 2874 Dec 13 16:29 /etc/lvm/archive/VolGroup_00007-193670915.vg
-rw-------. 1 root root 2455 Dec 13 16:29 /etc/lvm/archive/VolGroup_00005-1366585398.vg
-rw-------. 1 root root 2860 Dec 13 16:29 /etc/lvm/archive/VolGroup_00006-1572349713.vg
-rw-------. 1 root root 2020 Dec 13 16:27 /etc/lvm/archive/VolGroup_00004-1520131122.vg
-rw-------. 1 root root 1755 Dec 13 16:17 /etc/lvm/archive/VolGroup_00003-701796946.vg
-rw-------. 1 root root 1738 Dec 13 16:10 /etc/lvm/archive/VolGroup_00001-218522400.vg
-rw-------. 1 root root 1738 Dec 13 16:10 /etc/lvm/archive/VolGroup_00002-537715456.vg

Vamos a coger ahora el fichero VolGroup_00010-1067505011.vg, para seleccionar el fichero correcto es fundamental fijarse en la descripción del mismo, en las fechas de creación de los ficheros vg y en el historial de comandos.

pvcreate --restorefile /etc/lvm/archive/VolGroup_00010-1067505011.vg --uuid 2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H /dev/sdb
  Can't initialize physical volume "/dev/sdb" of volume group "VolGroup" without -ff
 
pvcreate -ff --restorefile /etc/lvm/archive/VolGroup_00010-1067505011.vg --uuid 2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H /dev/sdb
Really INITIALIZE physical volume "/dev/sdb" of volume group "VolGroup" [y/n]? y
  WARNING: Forcing physical volume creation on /dev/sdb of volume group "VolGroup"
  Physical volume "/dev/sdb" successfully created
 
vgcfgrestore -f /etc/lvm/archive/VolGroup_00010-1067505011.vg -v VolGroup
  Restored volume group VolGroup
pvdisplay

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               19.76 GiB / not usable 2.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              5059
  Free PE               0
  Allocated PE          5059
  PV UUID               1UTwr2-YXv3-gl3f-l6Qk-o5R7-drqX-B6VB2Z

  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               VolGroup
  PV Size               1.80 GiB / not usable 1.79 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              461
  Free PE               0             <-------------- Ya lo tenemos como queremos. :D
  Allocated PE          461
  PV UUID               2glsmX-7knj-rP7h-2rS6-MCM1-IFUt-FOfa9H