Sou a: Inici / Usuaris / Victor Carceler / Artículos / Ejemplos de uso de LVM

Ejemplos de uso de LVM

LVM (Logical Volume Manager) es un avanzado sistema de gestión de volumenes, soportado por el núcleo Linux, que permite al administrador gestionar el espacio de almacenamiento con mucha más flexibilidad que cuando se utilizan métodos tradicionales.

LVM cuenta con muchas características y define sus propios conceptos. Es importante leer la documentación antes de intentar utilizarlo. En este dócumento sólo se mostrarán distintas funciones a modo de ejemplo.

Instalando LVM

El núcleo debe incluir soporte para LVM, además es necesario instalar las herramientas de usuario que permitan su administración. Existen dos versiones, LVM y LVM2, más o menos compatibles entre sí. A partir de la versión del núcleo Linux 2.6 se cuenta con soporte LVM2 que es más potente (permite instantáneas de lectura/escritura).

Normalmente el núcleo de las distribuciones genéricas ya está compilado con soporte LVM, de manera que sólo es necesario instalar las herramientas de usuario. En el caso de Mandriva 2006 están disponibles los paquetes lvm1 y lvm2 correspondientes a las dos versiones. Instalaremos lvm2.

Preparando diferentes discos duros virtuales

En un entorno de producción se utiliza LVM para gestionar particiones, discos duros o dispositivos RAID. Pero como puede utilizarse LVM sobre cualquier dispositivo de bloques, en este ejemplo crearemos diferentes ficheros que gracias a los dispositivos de bucle (loop device) trataremos como dispositivos físicos.

[root@localhost ~]# dd if=/dev/zero of=fichero0 bs=1M count=100
100+0 registros leídos
100+0 registros escritos
[root@localhost ~]# losetup /dev/loop0 fichero0
[root@localhost ~]# dd if=/dev/zero of=fichero1 bs=1M count=100
100+0 registros leídos
100+0 registros escritos
[root@localhost ~]# losetup /dev/loop1 fichero1

Inicializando los dispositivos

Antes de que se puedan utilizar los discos como un volúmen físico (PV) es necesario inicializarlo:

[root@localhost ~]# pvcreate /dev/loop0
Physical volume "/dev/loop0" successfully created
[root@localhost ~]#
[root@localhost ~]# pvcreate /dev/loop1
Physical volume "/dev/loop1" successfully created
[root@localhost ~]#

Creando un Volume Group

En LVM, el concepto de grupo de volumenes (VG) incluye a varios volumenes lógicos y/o físicos. Podemos crear un VG a partir de los dos dispositivos físicos creados anteriormente.

[root@localhost ~]# vgcreate mi_vg /dev/loop0 /dev/loop1
Volume group "mi_vg" successfully created
[root@localhost ~]#

Activando/Desactivando los VG

El comando vgchange puede cambiar varios atributos de los VG, su función principal es activarlos y desactivarlos (mediante el parámetro -a). Sólo cuando un VG está activo, se puede acceder a los volumenes lógicos que contiene.

Después de un reinicio, o si ha desactivado el VG, puede activarlo de la siguiente manera:

[root@localhost ~]# vgchange -a y mi_vg
0 logical volume(s) in volume group "mi_vg" now active
[root@localhost ~]#

Eliminando un VG

Es necesario asegurarse de que no hay volumenes lógicos (LV) en el VG antes de intentar eliminarlo.

  1. Desactive el VG:
    vgchange -a n mi_vg
  2. Elimine el VG:
    vgremove mi_vg

Añadiendo volúmenes físicos (PV) a un grupo de volúmenes (VG)

Se puede utilizar el comando vgextend para añadir un volumen físico inicializado a un grupo de volúmenes

vgextend mi_vg /dev/loop2

Eliminado volumenes físicos (PV) de un grupo de volumenes (VG)

  1. El comando pvdisplay nos permite asegurarnos de que el dispositivo físico no está siendo untilizado por ningún volumen lógico.
    [root@localhost ~]# pvdisplay /dev/loop2
    --- Physical volume ---
    PV Name /dev/loop2
    VG Name mi_vg
    PV Size 96,00 MB / not usable 0
    Allocatable yes
    PE Size (KByte) 4096
    Total PE 24
    Free PE 24
    Allocated PE 0
    PV UUID 3ZN5yB-v74R-o98H-jZIX-FpFj-69Ro-w3UaR5

    [root@localhost ~]#
  2. Si el volumen físico (PV) estuviese en uso, se utilizará el comando pvmove para migrar los datos a otro PV
  3. El comando vgreduce nos permite eliminar un PV
    [root@localhost ~]# vgreduce mi_vg /dev/loop2
    Removed "/dev/loop2" from volume group "mi_vg"
    [root@localhost ~]#

Creando un volumen lógico (LV)

Para crear un volumen lógico se utiliza el comando lvcreate.

ADVERTENCIA: Si se obtiene un error indicando:
  /proc/misc: No entry for device-mapper found
  Is device-mapper driver missing from kernel?
  Failure to communicate with kernel device-mapper driver.
  striped: Required device-mapper target(s) not detected in your kernel
Es necesario cargar el device mapper mediante la sentencia: modprobe dm-mod


Es posible:

  • Indicar el tamaño del volúmen en MBs (parámetro -L) o bien en número de extends (parámetro -l)
    [root@localhost ~]# lvcreate -L 10M -n primer_lv mi_vg
    Rounding up size to full physical extent 12,00 MB
    Logical volume "primer_lv" created
    [root@localhost ~]#lvcreate -l 3 -n segundo_lv mi_vg
    Logical volume "segundo_lv" created
    [root@localhost ~]#
  • Crear un volúmen lógico lineal (por defecto) o con bandas (parámetros -i y -I)
    [root@localhost ~]# lvcreate -L 10M -n tercer_lv -i 2 -I 4 mi_vg  # Dos bandas de 4KB
    Rounding up size to full physical extent 12,00 MB
    Rounding size (3 extents) up to stripe boundary size (4 extents)
    Logical volume "tercer_lv" created
    [root@localhost ~]#
  • Es posible indicar el volumen físico (o los volumenes físicos) a utilizar
    [root@localhost ~]# lvcreate -L 10M -n cuarto_lv mi_vg /dev/loop1
    Rounding up size to full physical extent 12,00 MB
    Logical volume "cuarto_lv" created
    [root@localhost ~]#

Antes de crear los volumenes logicos anteriores, si inspeccionamos el VG obtenemos:

[root@localhost ~]# vgdisplay mi_vg
--- Volume group ---
VG Name mi_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 192,00 MB
PE Size 4,00 MB
Total PE 48
Alloc PE / Size 0 / 0
Free PE / Size 48 / 192,00 MB
VG UUID 2rOvrQ-fLTI-g6fl-E1xz-DOi2-gVUR-3OR1tH

[root@localhost ~]#

Y después:

[root@localhost ~]# vgdisplay mi_vg
--- Volume group ---
VG Name mi_vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 7
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 4
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 192,00 MB
PE Size 4,00 MB
Total PE 48
Alloc PE / Size 13 / 52,00 MB
Free PE / Size 35 / 140,00 MB
VG UUID 2rOvrQ-fLTI-g6fl-E1xz-DOi2-gVUR-3OR1tH

[root@localhost ~]#

Borrando un volumen lógico (LV)

Para que se pueda borrar un volume lógico es necesario que no esté montado. Después basta con utilizar el comando lvremove.

Utilizando un volumen lógico (LV)

Un volumen lógico es el equivalente en LVM a un disco o partición tradicional. Puede crearse un sistema de archivos en su interior y se puede montar.

[root@localhost ~]# mkdir /mnt/primer_lv /mnt/segundo_lv /mnt/tercer_lv /mnt/cuarto_lv
[root@localhost ~]# mkfs.ext3 /dev/mi_vg/primer_lv
mke2fs 1.38 (30-Jun-2005)
Etiqueta del sistema de ficheros=
Tipo de SO: Linux
Tamaño del bloque=1024 (bitácora=0)
Tamaño del fragmento=1024 (bitácora=0)
3072 nodos i, 12288 bloques
614 bloques (5.00%) reservados para el súper usuario
Primer bloque de datos=1
2 bloque de grupos
8192 bloques por grupo, 8192 fragmentos por grupo
1536 nodos i por grupo
Respaldo del súper bloque guardado en los bloques:
8193

Mientras se escribían las tablas de nodos i: terminado
Creando el fichero de transacciones (1024 bloques): hecho
Escribiendo superbloques y la información contable del sistema de ficheros: hecho

Este sistema de ficheros se revisará automáticamente cada 23 meses o
180 dias, lo que suceda primero. Utilice tune2fs -c o -i para cambiarlo.
[root@localhost ~]# mkfs.reiserfs --journal-size 513 /dev/mi_vg/segundo_lv
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Edward Shushkin wrote the encryption and compression file plugins, and the V3
journal relocation code.

Continuing core development of ReiserFS is mostly paid for by Hans Reiser from
money made selling licenses in addition to the GPL to companies who don't want
it known that they use ReiserFS as a foundation for their proprietary product.
And my lawyer asked 'People pay you money for this?'. Yup. Life is good. If you
buy ReiserFS, you can focus on your value add rather than reinventing an entire
FS.


Guessing about desired format.. Kernel 2.6.12-12mdk is running.
Format 3.6 with non-standard journal
Count of blocks on the device: 3072
Number of blocks consumed by mkreiserfs formatting process: 532
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 513 blocks (first block 18)
Journal Max transaction length 256
inode generation number: 0
UUID: 119da1d8-54e4-4748-9210-dfd9e6c40b9f
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
ALL DATA WILL BE LOST ON '/dev/mi_vg/segundo_lv'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/mi_vg/segundo_lv.

[root@localhost ~]# mkfs.jfs /dev/mi_vg/tercer_lv
mkfs.jfs version 1.1.7, 22-Jul-2004
Warning! All data on device /dev/mi_vg/tercer_lv will be lost!

Continue? (Y/N) Y


Format completed successfully.

16384 kilobytes total disk space.


Extendiendo un volume lógico (LV)

http://www.tldp.org/HOWTO/LVM-HOWTO/extendlv.html


Copias de seguridad con instantánteas (Snapshots)

Es posible crear una instantánea de un volúmen lógico (LV), y montar la instantánea para hacer una copia de seguridad. Cuando se crea una instantánea se debe indicar el tamaño máximo que se utilizará para guardar los cambios sobre el volumen original. Si se agota el espacio, la instantántea deja de ser válida.

modprobe dm-snapshot # Necesitamos este módulo para poder crear snapshots,
# en caso contrario nos muestra el error:
# snapshot: Required device-mapper target(s) not detected in your kernel
lvcreate -L20M -s -n congelado /dev/mi_vg/segundo_lv

Montamos la instantánea:

mkdir /mnt/congelado
mount /dev/mi_vg/congelado /mnt/congelado/

A partir de este momento, en /mnt/congelado aparece lo mismo que en /mnt/segundo_lv pero a medida que se realizan cambios su contenido se vá distanciando, sin que los cambios en un volúmen lógico afecten al otro.

Más información