LVM en Ubuntu

Herramienta gráfica para gestionar LVM

Actualización 16/02/10
Existe una herramienta gráfica pra gestionar los volúmenes LVM en vez de hacerlo por línea de comandos.

$ sudo apt-get install system-config-lvm

Debemos ejecutarla como root, y si vamos a trabajar con algún volumen de sistema, arrancarla dessde un LiveCD.

$ sudo system-config-lvm

O en Aplicaciones->Herramientas del Sistema->Administración de Volúmenes Lógicos

Crear Volúmenes Físicos (PV)

Para poder usar un dispositivo de almacenamiento con LVM debemos inicializarlo con el comando

pvcreate [DispositivosDeAlmacenamiento…]

$ pvcreate /dev/sda2

Physical volume "/dev/sda2" successfully created

Y observamos el resultado con pvdisplay

$ pvdisplay

Crear Grupos de Volúmenes (VG)

Una vez creados los volúmenes físicos debemos agregarlos todos a un grupo de volúmenes de tal forma que se sume su tamaño y se forme un área de almacenamiento general.
Si no existe el grupo de volúmenes, lo creamos el grupo de volúmenes con el comando:

vgcreate NombreGrupoVolumenes [VolumenesFisicos…]

$ vgcreate vg1 /dev/sda2

Si existe, lo ampliamos con el comando:

vgextend NombreGrupoVolumenes [VolumenesFisicos…]

$ vgextend vg1 /dev/sda2

Y los visualizamos con vgdisplay:

$ vgdisplay

Crear Volúmenes Lógicos (LV)

Ahora dividiremos el espacio del grupo de Volúmenes en volúmenes lógicos sobre los cuales se crearán los sistemas de archivos, podemos crear los volúmenes lógicos de un tamaño máximo al del grupo de volúmenes que pertenece, pero lo ideal es darle un tamaño aproximado y luego irlo redimensionando por demanda, ésa es la gran ventaja de LVM, podemos realizar éstas operaciones en caliente.
Para crear un volumen lógico utilizamos el comando:

lvcreate -L tamaño -n NombreVolumenLogico NombreGrupoVolumenes

$ lvcreate -L 20G -n lvhome vg1

Obtenemos el resultado con lvdisplay.

$ lvdisplay

Cuando creemos un Volumen Lógico, se creará un dispositivo dentro de /dev/mapper/, su nombre seguirá este formato: NombreGrupoVolúmenes-NombreVolúmenLógico, por ejemplo, vg1-lvhome. Lo verificamos:

$ ls /dev/mapper/

control vg1-lvhome vg1-lvusr vg1-lvvirtualbox

Crear Sistemas de Archivos en Volúmenes Lógicos

Una vez creados los volúmenes lógicos, éstos pueden contener sistemas de archivos para ser utilizamos como dispositivos de almacenamiento, por ejemplo podemos crear un sistema de archivos ext3, xfs, ext2, fat32, etc. dentro de un volumen lógico.
Para crear un sistema de archivos utilizamos el comando mkfs:

$ mkfs.ext3 /dev/mapper/vg1/lvhome

Migración en vivo

Supongamos que queremos migrar /home, el proceso sería el siguiente:

1. Primero debemos asegurarnos que nadie está acciendo a /home, sería suficiente si nos vamos al nivel de ejecución 1:

$ telinit 1

2. Montamos el volumen lógico en /mnt y copiamos los archivos de /home allí, para que sean idénticos:

$ mount /dev/vg1/lvhome /mnt
$ cp -a /home/* /mnt
$ umount /mnt

3. Movemos los archivos de /home a un directorio temporal y luego montamos en /home el volúmen lógico lvhome:

$ mkdir /homeold
$ mv /home/* /homeold/
$ mount /dev/vg1/lvhome /home

4. El paso final es actualizar el fichero /etc/fstab para que se monte automáticamente cada vez que iniciemos el sistema. Le agregamos la siguiente línea al final del archivo /etc/fstab:

$/dev/vg1/lvhome /home ext3 defaults 0 2

5. Ahora regresamos al nivel de ejecución 2:

$ telinit 2

Redimensionar Volúmenes Lógicos

Expandir Volúmenes Lógicos

Pasado el tiempo tendremos la necesidad de extender o reducir el tamaño de nuestros volúmenes lógicos.
Supongamos que nos quedamos sin espacio en /home y queremos extender su tamaño:

Lo primero es verificar si tenemos espacio disponible en el grupo de volúmenes:

$ vgdisplay vg1

Y observamos la línea:

Free PE / Size 5942 / 23,21 GB

Vemos que tenemos 23,21 Gb libres, por lo que expandemos el volumen lógico:

$ lvresize -L +5G /dev/vg1/lvhome

Estamos añadiendo 5GB al volumen lógico lvhome.

A continuación, tenemos que expandir el sistema de archivos para que coincida con el tamaño del volumen lógico. Para redimensionar el sistema de archivos es necesario que nadie esté accediendo a él, lo ideal es irse al nivel de ejecución 1 para poder desmontarlo:

$ telinit 1
$ umount /home
$ resize2fs /dev/vg1/lvhome
$ mount /home

El comando para redimensionar el volumen lógico es diferente para cada sistema de archivos, para ext2/ext3 usamos resize2fs, para reiserfs resize_reiserfs, para xfs xfs_growfs.

Finalizado ésto, observemos los cambios:

$ lvdisplay /dev/vg1/lvhome

Eliminar Volúmenes lógicos

Supongamos que queremos eliminar un volumen lógico creado previamente:

$ lvremove /dev/vg1/lvusr

Reducir Volúmenes Lógicos

Supongamos que queremos reducir en 1G /usr. Nos vamos al nivel de ejecución 1 para poder desmontar /usr:

$ telinit 1
$ umount /usr

Reducimos el sistema de archivos, que pasará de 5GB a 4 GB:

$ resize2fs /dev/vg1/lvusr 4G

Como /usr es de tipo ext3 usamos resize2fs, si quisiéramos reducir a un sistema de archivos reiserfs usamos resize_reiserfs, para xfs y jfs no es posible realizar ésta operación porque éstos sistemas de archivos no se pueden reducir.

Reducimos el volumen lógico:

$ lvreduce -L -1G /dev/vg1/lvusr

Y volvemos a montar /usr:

$ mount /usr

Finalmente observemos los cambios tanto en el volumen lógico como en el grupo de volúmenes.

$ lvdisplay /dev/vg1/lvusr
$ vgdisplay /dev/vg1
Escanear volúmenes lógicos en los discos

Si queremos escanear los volúmenes lógicos escribimos:

$ lvscan

Copias de seguridad (Backup) de un volumen Lógico

Supongamos que queremos hacer una copia de seguridad de un volumen lógico (por ejemplo /home) en un disco duro externo. Para no tener que desmontarlo, hacer la copia de seguridad y volver a montarlo o montarlo en modo lectura mientras se está haciendo la copia, deberemos hacer uso de las snapshots. Una snapshot es una instantánea, en un momento dado, de un volumen lógico, de un tamaño determinado que permitirá hacer las copias sin parar el volumen ya que irá almacenando los cambios que se produzcan mientras se hace el backup.
A modo de resumen los pasos serían:

  1. Crear un volumen lógico de tipo snapshot del volumen del cual queremos hacer backup
  2. Montar dicho nuevo volumen (sin tocar el original)
  3. Hacer el backup del nuevo volumen
  4. Desmontar el volumen logico snapshot
  5. Eliminar el volumen logico snapshot

De forma práctica, éste ha sido mi caso:

  • Tenemos un grupo de volúmenes llamado vg1, con espacio suficiente para crear una snapshot de 100MB.
  • Volumen lógico del que hacer el backup (el directorio home): /dev/vg1/lvhome
  • Se toma una snapshot de 100MB de nombre homebackup: /dev/vg1/homebackup
  • Se monta dicha snapshot en /mnt/homebackup
  • Se hace un rsync de /mnt/homebackup a un disco externo en /media/Externo
  • Se desmonta la snapshot de /mnt/homebackup
  • Se elimina el volumen lógico /dev/vg1/homebackup

Para ello, he creado el siguiente script:

#!/bin/bash 
set -x

# Comandos LVM
LVCREATE=`which lvcreate`
LVREMOVE=`which lvremove`
SNAPSHOT=homebackup
RUTAVOL=/dev/vg1
VOLLOGICO=$RUTAVOL/lvhome
SIZE=100M

# Comandos-parametros rsync
RSYNC=`which rsync`
RUTA_ORIG=/mnt/homebackup
RUTA_DEST=/media/Externo/Backup-home
PARM="-a --verbose --stats --recursive --times --perms --links --delete --delete-excluded"

# Creamos la snapshot de 100MB del /home
$LVCREATE -L$SIZE -s -n $SNAPSHOT $VOLLOGICO

mkdir -p $RUTA_ORIG
mount $RUTAVOL/$SNAPSHOT $RUTA_ORIG

# Excluimos el directorio con las maquinas virtuales
$RSYNC $PARM --exclude='.VirtualBox/' $RUTA_ORIG $RUTA_DEST

# Desmontamos la snapshot
umount $RUTA_ORIG
#Borramos la snapshot
$LVREMOVE $RUTAVOL/$SNAPSHOT
Excluimos el directorio con las maquinas virtuales para no hacer la copia tan pesada

Recuperación de particiones LVM

Si realizamos una instalación de una versión nueva de Ubuntu en un equipo donde ya tenemos particiones LVM2, aparecerán como formato "desconocido" en el gestor de particiones de Ubuntu. Estás particiones deben dejarse sin formatear durante la instalación para no perderlas.
En nuestro caso concreto, eran /dev/sda2 y /dev/sda5.

Una vez instalado el sistema operativo (en este caso Ubuntu Intrepid) y verificada la conexión a Internet, instalamos el paquete LVM2:

sudo apt-get install lvm2

Este paquete automáticamente buscará si existen volúmenes LVM y nos los mostrará como ACTIVE. Para verlas:

vgscan
lvscan

Una vez reconocidos los volúmenes, los añadimos al fichero /etc/fstab, para que se monten al inicio.
Para realizar este paso, visitar el apartado 4 de esta página:

LVM en Ubuntu

Referencias

http://tuxpuc.pucp.edu.pe/content/view/588/1/

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License