miércoles, 12 de junio de 2013

Reducir un LVOL de forma segura en Red Hat

Reducir un lvol es una de las tareas LVM que más dudas genera por la posible pérdida potencial de datos. Sin embargo, siguiendo los pasos adecudados, se puede reducir un volumen lógico con seguridad de que los datos estarán intactos. En frio, eso sí. No se puede tener todo.




Vamos a suponer que tenemos un volumen lógico de 40 GB y lo queremos reducir a 10GB. El uso actual del LVOL es de algo más de 5GB.

Aquí viene la parte más importante, nunca, nunca, nunca tratéis de reducir un LVOL a un tamaño menor que el filesystem sobre el que se está montando. Porque en ese caso, la pérdida de datos dejará de ser potencial.

Por lo tanto, lo primero que tenemos que hacer es reducir el filesystem a un tamaño menor que los 10GB a los que pretendemos reducir el LVOL. Como el espacio usado por el filesystem es de 5GB, lo vamos a reducir a 8GB.

En caso de no tener espacio suficiente, tocaría liberar de alguna forma.

Para reducir el filesystem usaremos el comando resize2fs.

Si lo intentáis directamente, os encontraréis con esto

[root@redhat1/]# resize2fs /dev/vg01/lvol01 8G
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/ /dev/vg01/lvol01 is mounted on /datos; on-line resizing required
On-line shrinking from 10485760 to 2097152 not supported.

De ahí que haya que hacerlo en frío

[root@redhat1 /]# umount /datos

Desmontamos y lo volvemos a montar. Pero todavía no podremos.

[root@redhat1 /]# resize2fs /dev/vg01/lvol01 8G
resize2fs 1.39 (29-May-2006)
Please run 'e2fsck -f /dev/vg01/lvol01' first.

Como tenemos el filesystem desmontado, podemos lanzar el e2fsck con tranquilidad.

[root@redhat1/]# e2fsck -f /dev/vg01/lvol01
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg01/lvol01: 41125/5242880 files (0.4% non-contiguous), 1525214/10485760 blocks

Montamos y verficamos que el filesystem tiene el tamaño correcto

[root@redhat1 /]# mount /datos

[root@redhat1/]# df -h /datos
Filesystem            Size  Used Avail Use% Mounted on
                /dev/vg01/lvol01
                      7.9G  5.2G  2.3G  70% /datos

Comprobamos que el LVOL sigue teniendo su tamaño original de 40GB

[root@redhat /]# lvs |grep -i lvol01
  lvol01  vg01 -wi-ao 40.00G

Ahora ya podemos reducir el LVOL de forma segura. Usaremos el comando lvreduce

[root@redhat01 /]# lvreduce -r -L 10G  /dev/vg01/lvol01
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/mapper/vg01-lv01 is mounted on /datos; on-line resizing required
Performing an on-line resize of /dev/mapper/vg01-lv01 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/vg01-lv01 is now 2621440 blocks long.

  Reducing logical volume lvol01 to 10.00 GB
  Logical volume binZeustVolume successfully resized

Volvemos a verificar

[root@redhat01 /]#  lvs |grep -i lvol01
   lvol01 vg01 -wi-ao 10.00G

Ahora deberíamos volver a hacer un resize2fs para que el filesystem que habíamos reducido a 8GB coja todo el tamaño del LVOL, sin embargo Red Hat me ha sorprendido.

[root@redhat01 /]# resize2fs  /dev/vg01/lvol01
resize2fs 1.39 (29-May-2006)
The filesystem is already 2621440 blocks long.  Nothing to do!

[root@redhat01/]# df -h /datos
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg01-lv01
                      9.9G  5.2G  4.2G  56% /datos

Efectivamente, el filesystem ya se ha pillado todo el tamaño disponible del LVOL el solito.

No hay comentarios: