# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Gestión de LVM en Linux (Logical Volume Manager)


Hace ya casi un par de años vimos en una entrada cómo crear un Linux Logical Volume Manager (LVM) usando fdisk. En ese post cubrimos la primera parte necesaria para gestionar volúmenes lógicos en GNU/Linux además de hacer una introducción a LVM.

Vamos a continuar donde lo dejamos, omitimos el paso de fdisk porque está explicado en ese artículo. Partimos de la base entonces de que tenemos ya creada una partición Linux LVM, en nuestro caso /dev/sda3:

# fdisk -l | grep sda3
/dev/sda3               1        3232    25961008+  8e  Linux LVM
logical volume manager

Imágen: madrigaladmin.blogspot.com

Crear los volúmenes físicos (PV – pvcreate)

Lo primero que debemos hacer cuando trabajamos con LVM es crear los volúmenes físicos (PV) de las particiones con las que queramos crear volúmenes lógicos. Esto lo hacemos con el comando pvcreate. Esto hay que hacerlo en todas las particiones que queramos usar con LVM. En nuestro caso de momento únicamente /dev/sda3:

# pvcreate /dev/sda3
  Physical volume "/dev/sda3" successfully created

Si quisieramos añadir más particiones, simplemente sería ejecutar ese comando con cada una de ellas.

Nota: Hay que tener el paquete lvm2 instalado para poder usar LVM. En Debian:

# apt-get install lvm2

Crear el grupo de volúmen (VG – vgcreate)

Ahora que ya tenemos configuradas las particiones que queremos usar como LVM, podemos añadir el primer grupo de volumen, que contendrá ya nuestros volúmenes lógicos finales. Lo haremos con el comando vgcreate. En nuestro caso sólo tenemos una partición, pero si quisiéramos añadir varias al grupo lo haríamos así:

vgcreate volgroup_01 /dev/sda3 /dev/sda4 /dev/sda5

Bien, voy a añadirlo entonces con mi partición /dev/sda3 que es con la que estamos trabajando de momento:

# vgcreate volgroup_01 /dev/sda3
  Volume group "volgroup_01" successfully created

Con el comando vgscan podemos consultar los grupos creados, con el comando pvscan los volúmenes físicos:

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "volgroup_01" using metadata type lvm2
# pvscan
  PV /dev/sda3   VG volgroup_01   lvm2 [24,76 GB / 24,76 GB free]
  Total: 1 [24,76 GB] / in use: 1 [24,76 GB] / in no VG: 0 [0   ]

Crear los volúmenes lógicos (LV – lvcreate)

Llegados a este punto, únicamente nos falta crear el volúmen lógico, sobre el que ya añadiremos el sistema de ficheros deseado. Vamos a crear un volúmen lógico de 2G de espacio sobre el grupo creado anteriormente (volgroup_01):

# lvcreate -L2G -n volumen_01 volgroup_01
  Logical volume "volumen_01" created

Y con el comando lvscan vemos el estado de los volúmenes:

# lvscan
  ACTIVE            '/dev/volgroup_01/volumen_01' [2,00 GB] inherit

Ahora ya sólo faltaría darle formato y montarlo como una partición normal:

# mkfs.ext4 /dev/volgroup_01/volumen_01
mke2fs 1.41.4 (27-Jan-2009)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
131072 nodos-i, 524288 bloques...
...
...
...

# mount /dev/volgroup_01/volumen_01 /temporal/
# df -h | grep temporal
                      2,0G   67M  1,9G   4% /temporal

Añadir nuevas particiones a un grupo volumen (vgextend)

La gracia de LVM es que si disponemos de nuevos discos o particiones podemos añadirlas al grupo de volúmen de forma sencilla. Primero tenemos que crear los volúmenes físicos de esas nuevas particiones (recordad, con pvcreate) y luego asignarlas al grupo de volúmen deseado. Vamos a añadir /dev/sda5 a nuestro grupo volgroup_01:

# pvcreate /dev/sda5
# vgextend volgroup_01 /dev/sda5

Aumentar o reducir el tamaño de nuestro volúmen lógico y sistema de ficheros (lvextend – resize2fs)

Ahora podríamos ampliar si quisiéramos el tamaño de nuestro volumen lógico creado anteriormente porque disponemos de más espacio gracias a las nuevas particiones añadidas al grupo de volúmen. VAmos a añadirle 2G más con el comando lvextend:

# lvextend -L +2G /dev/volgroup_01/volumen_01
  Extending logical volume volumen_01 to 4,00 GB
  Logical volume volumen_01 successfully resized

Finalmente tendríamos que ampliar la última capa, el sistema de ficheros, en nuestro caso es ext4 así que usamos resize2fs. Tened cuidado con este último paso ya que tiene su riesgo y si se hace mal se pueden perder datos:

# resize2fs /dev/volgroup_01/volumen_01 4G
resize2fs 1.41.4 (27-Jan-2009)
Filesystem at /dev/volgroup_01/volumen_01 is mounted on /temporal; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/volgroup_01/volumen_01 to 1048576 (4k) blocks.
El sistema de ficheros en /dev/volgroup_01/volumen_01 tiene ahora 1048576 bloques.

Y el nuevo tamaño ya queda reflejado:

# df -h | grep temporal
                      4,0G   68M  3,7G   2% /temporal

Espero que os haya sido de utilidad esta introducción a LVM (logical volume manager) en GNU/Linux.

Convertir a ext4 en un sistema de ficheros ext3


Vamos a ver cómo convertir una partición con el sistema de ficheros ext3 a ext4. Partimos de la base de que tenemos una partición formateada con ext3, en este caso /dev/sda3. La partición se encuentra montada:

# mount | grep ^/dev/sda3
/dev/sda3 on /temporal type ext3 (rw)

Ejecutamos el comando tune2fs para activar las características de ext4 sobre el sistema de ficheros:

# tune2fs -O extents,uninit_bg,dir_index /dev/sda3
tune2fs 1.41.4 (27-Jan-2009)

Por favor ejecute e2fsck sobre el sistema de ficheros.

Tal y como nos indica el comando, ahora tenemos que ejecutar e2fsck para verificar la consistencia del sistema de ficheros y arreglar los cambios de estructura. Para ello antes debemos desmontar la partición:

# umount /dev/sda3

Nota: Si lo estáis haciendo sobre la partición / tendréis que arrancar en modo de emergencia/mantenimiento o con un Live CD para poder hacerlo.

Hacemos el e2fsck:

# e2fsck -fDC0 /dev/sda3 -y

Finalmente ya podemos volver a montar el sistema de ficheros. Ojo, a partir de ahora no hay que montarlo como ext3 sino como ext4. Si lo añadís vía fstab acordaros de cambiar ese parámetro…

# mount /dev/sda3 /temporal/
# mount | grep ^/dev/sda3
/dev/sda3 on /temporal type ext4 (rw)

En fstab:

/dev/sda3                                  /temporal    ext4         defaults           0  0

Crear y eliminar particiones con fdisk en Linux


disco duro

Crear particiones con fdisk

Para crear particiones usando la herramienta fdisk, primero debemos comprobar los discos del sistema disponibles y las particiones que ya haya creadas, para ello utilizamos el parámetro -l:

$ sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c3c51

Dispositivo Inicio    Comienzo   Fin     Bloques  Id  Sistema
/dev/sda2            3233        9855    53199247+  83  Linux
/dev/sda4            9856       19457    77128065   83  Linux

En la salida de fdisk hemos verificado que tenemos un único disco /dev/sda de 160 GB, sobre el cual ya hay dos particiones creadas con sistemas Linux, /dev/sda2 y /dev/sda4. Si nos fijamos bien, vemos que el disco tiene 19457 cilindros y que las particiones comienzan en el 3233, por lo que tenemos espacio libre para crear más si lo deseamos.

Vamos a crear entonces una partición de prueba que utilice el resto de espacio disponible en el disco, comenzamos ejecutando fdisk sobre el disco a utilizar:

$ sudo fdisk /dev/sda

Si pulsamos la m una vez dentro podremos visualizar las distintas opciones con su respectiva letra de ejecución:

Orden  Acción
   a   Conmuta el indicador de iniciable
   b   Modifica la etiqueta de disco bsd
   c   Conmuta el indicador de compatibilidad con DOS
   d   Suprime una partición
   l   Lista los tipos de particiones conocidos
   m   Imprime este menú
   n   Añade una nueva partición
   o   Crea una nueva tabla de particiones DOS vacía
   p   Imprime la tabla de particiones
   q   Sale sin guardar los cambios
   s   Crea una nueva etiqueta de disco Sun
   t   Cambia el identificador de sistema de una partición
   u   Cambia las unidades de visualización/entrada
   v   Verifica la tabla de particiones
   w   Escribe la tabla en el disco y sale
   x   Funciones adicionales (sólo para usuarios avanzados)

Vamos a crear una nueva partición, así que pulsamos “n”:

Orden (m para obtener ayuda): n
Acción de la orden
   e   Partición extendida
   p   Partición primaria (1-4)

Seleccionamos si queremos una partición extendida o primaria, en este caso podemos crearla como primaria, pulsamos “p” y dejamos que automáticamente se configure el número de la partición (se puede especificar, del 1 al 4). Después podemos seleccionar el primer y último cilindro a utilizar para la partición. Como yo voy a usar el resto de espacio disponible será del 1 al 19457 tal y como hemos visto antes, también podríamos indicar el tamaño de la partición en K, M o G. Lo dejamos por defecto en este caso:

p
Número de partición (1-4): 3
Primer cilindro (1-19457, valor predeterminado 1):
Último cilindro, +cilindros o +tamaño{K,M,G} (1-3232, valor predeterminado 3232):
Se está utilizando el valor predeterminado 3232

Ahora escribimos los cambios y salimos de fdisk:

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

El núcleo todavía usa la tabla antigua.
La nueva tabla se usará en el próximo reinicio.
Se están sincronizando los discos.

Finalmente debemos ejecutar el comando partprobe para indicar al kernel que vuelva a leer la tabla de particiones:

$ sudo partprobe

Y ya tenemos nuestra nueva partición creada, ahora únicamente faltaría asignar el sistema de ficheros deseado (ext3, ext4, ntfs, etc):

$ sudo fdisk -l

Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 cabezas, 63 sectores/pista, 19457 cilindros
Unidades = cilindros de 16065 * 512 = 8225280 bytes
Identificador de disco: 0x000c3c51

Dispositivo Inicio    Comienzo      Fin      Bloques  Id  Sistema
/dev/sda2            3233        9855    53199247+  83  Linux
/dev/sda3               1        3232    25961008+  83  Linux
/dev/sda4            9856       19457    77128065   83  Linux

Formateamos la partición como ext4:

$ mkfs.ext4  /dev/sda3
mke2fs 1.41.4 (27-Jan-2009)
mkfs.ext4: Permiso denegado mientras se intentaba determinar el tamaño del sistema de ficheros
alex@sistemas:~$ sudo mkfs.ext4  /dev/sda3
mke2fs 1.41.4 (27-Jan-2009)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=4096 (bitácora=2)
Tamaño del fragmento=4096 (bitácora=2)
1623840 nodos-i, 6490252 bloques
324512 bloques (5.00%) reservados para el superusuario
Primer bloque de datos=0
Número máximo de bloques del sistema de ficheros=0
199 bloque de grupos
32768 bloques por grupo, 32768 fragmentos por grupo
8160 nodos-i por grupo
Respaldo del superbloque guardado en los bloques:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000

Escribiendo las tablas de nodos-i: hecho
Creating journal (32768 blocks): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 27 montajes o
180 días, lo que suceda primero.  Utilice tune2fs -c o -i para cambiarlo.

Ahora podemos montar la partición y comenzar a usarla:

$ sudo mount //dev/sda3

Vemos que está disponible con el comando df:

$ df -h | grep /dev/sda3
/dev/sda3              25G  172M   23G   1% /test

Eliminar particiones con fdisk

Eliminar una partición usando fdisk es más sencillo que crearla, lo primero que haremos será desmontarla del sistema con el comando umount:

$ sudo umount /dev/sda3

Accedemos de nuevo a la gestión del disco con fdisk:

$ sudo fdisk /dev/sda

Una vez dentro, eliminamos la partición con la letra “d” y seguido el número de la partición, escribimos después los cambios con “w”:

Orden (m para obtener ayuda): d
Número de partición (1-4): 3

Orden (m para obtener ayuda): w
¡Se ha modificado la tabla de particiones!

Llamando a ioctl() para volver a leer la tabla de particiones.

Ejecutamos de nuevo partproble para hacer efectivos los cambios sin reiniciar:

$ sudo partprobe

Y la partición ha sido eliminada, un fdisk -l no devolverá la partición:

$ sudo fdisk -l | grep sda3

Cómo crear un Linux Logical Volume Manager (LVM) usando fdisk


LVM es el administrador de volúmenes lógicos para el kernel Linux. LVM gestiona los discos duros y sistemas similares, como dispositivos de almacenamiento masivo. Entre las características principales del Linux Logical Volume Manager encontramos el redimensionado de grupos lógicos, redimensionado de volúmenes lógicos, capacidad de realización de snapshots en modo lectura, adición de nuevos discos a los volúmenes, etc. Se podría decir que LVM es un mecanismo para “virtualizar” discos.

LVM logical volume manager Linux
Esquema básico de LVM (Wikipedia)

Antes de poder comenzar a trabajar con los discos en LVM (creando grupos, volumenes, particionando, etc) hemos de “prepararlos” para poder utilizar este sistema. Para ello utilizaremos fdisk, especificando a cada uno de los discos que queremos utilizar con LVM que utilicen el tipo de partición 8e “Linux LVM”.

Supongamos que tenemos un disco duro nuevo, /dev/sda, vamos a prepararlo para utilizar LVM, ejecutamos fdisk sobre el disco para ello:

fdisk /dev/hdb

Una vez dentro, presionamos “n” para crear una nueva particion:

   n   Añade una nueva partición

Presionamos “p” para crear una nueva partición primaria

   p   Partición primaria (1-4)

Presionamos 1 para crearla como la primera partición del disco, posteriormente presionamos ENTER hasta aceptar todos los valores por defecto de primer y último cilindro.

Una vez finalizado y de nuevo en el menú de fdisk, presionamos “t” para cambiar el identificador de sistema de una partición:

   t   Cambia el identificador de sistema de una partición

La cambiaremos al tipo “LVM partition type (0×8e)”, para ello introducimos 8e. Podemos en este punto presionar “p” para imprimir la tabla de particiones y ver que todo es correcto:

   p   Imprime la tabla de particiones

Finalmente guardamos los cambios con “w”

Al hacer un fdisk -l del nuevo disco, veremos que efectivamente ya utiliza LVM, ejemplo (ficticio):

# fdisk -l /dev/sda

Disk /dev/sda: 200.0 GB, 201000193024 bytes
200 heads, 63 sectors/track, 30515 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device            Start   End      Blocks      Id  System
/dev/sda1         1       30515    205111706   8e  Linux LVM

Próximamente haré otro artículo de LVM en el cual ya comenzaremos a trabajar propiamente con Linux Logical Volume Manager, creando grupos, volumenes, etc.

Actualización:

Continuación aquí:

Gestión de LVM en Linux (Logical Volume Manager)