systemadmin.es > Storage > Guía de supervivencia con LVM

Guía de supervivencia con LVM

Mediante LVM podemos gestionar el espacio en disco de una forma mucho más comoda y sin downtime para muchas operaciones. Vamos a ver una guía básica de supervivencia con LVM:

Sobrevive con LVM como Bear Grylls

Sobrevive con LVM como Bear Grylls

Mediante LVM creamos una agrupación de los discos físicos. Para crear este grupo primero debemos inicializarlos con pvcreate. Una recomendación que aprendí en su día por las malas es siempre particionar los discos con una partición:

# fdisk -l /dev/sdc

Disk /dev/sda: 288.1 GB, 288161071104 bytes
255 heads, 63 sectors/track, 35033 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       35033   281402572   8e  Linux LVM

En caso que lo hayamos publicado a una VM con vmware y no lo vemos, deberemos rescanear el bus SCSI

De esta forma, en un entorno SAN, distinguimos claramente los discos nuevos de los actualmente en uso.

Con la partición creada podemos proceder a inicializarlos con pvcreate:

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

A continuación podemos crear una agrupación con vgcreate con este disco:

# vgcreate nombrevg /dev/sdb1
  Volume group "nombrevg" successfully created

En el caso que queramos añadir un disco nuevo a la agrupación se hace con vgextend:

# vgextend nombrevg /dev/sdc1
  Volume group "nombrevg" successfully extended

Para consultar el espacio en uso y disponible tenemos vgdisplay:

# vgdisplay
  --- Volume group ---
  VG Name               nombrevg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  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 MiB
  PE Size               4.00 MiB
  Total PE              48
  Alloc PE / Size       0 / 0   
  Free  PE / Size       48 / 192.00 MiB
  VG UUID               9sdaFp-22WU-a3wc-S18U-0z8n-qERe-wnkHpq
   

Para crear un nuevo disco del volume group tenemos lvcreate:

  • Nombre del disco: Lo indicamos con la opción -n
  • Tamaño del disco: Lo indicamos con la opción -L para un tamaño indicado con unidades o con la opción -l indicando los extends del volume group que queremos usar
  • Como último parámetro indicamos el nombre del volume group que queremos usar

El comando quedaría:

# lvcreate -L 1G -n lvdisc nombrevg
  Logical volume "lvdisc" created

A continuación ya podemos crear el sistema de ficheros con el nombre del volume group y el nombre del disco:

# mkfs.ext4 /dev/nombrevg/lvdisc 
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

En el caso que queramos extender el disco lo podemos hacer con lvextend. Si se trata de una ampliación lo podemos hacer en caliente, sino deberemos desmontar el sistema de ficheros.

  • Variación de tamaño: Podemos indicar de dos formas el nuevo tamaño tanto en unidades (M, G con -L) como en extends (-l):
    • Tamaño absoluto: Indicamos el tamaño final que queremos de disco
    • Tamaño relativo: Indicamos el incremento o decremento a respecto al tamaño actual con + o delante. Por ejemplo, para incrementar en 10G sería: -L+10G

    Disco a extender: Path del disco a extender

A continuación deberemos aplicar la ampliación al sistema de ficheros con resize2fs (para ext2 y ext3, en CentOS 6 también ext4) y resize4fs, en CentOS 5, para ext4:

# lvextend -L +100G /dev/nombrevg/nombrelv 
  Extending logical volume nombrelv to 1.42 TB
  Logical volume nombrelv successfully resized
# resize2fs /dev/nombrevg/nombrelv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/nombrevg/nombrelv is mounted on /var/log; on-line resizing required
old desc_blocks = 85, new_desc_blocks = 92
Performing an on-line resize of /dev/nombrevg/nombrelv to 381684736 (4k) blocks.

The filesystem on /dev/nombrevg/nombrelv is now 381684736 blocks long.

Finalmente, para crear un snapshot tenemos que usar lvcreate con la opción -s. Las opciones son:

  • Crear un snapshot: Con la opción -s
  • Tamaño del snapshot para guardar cambios: Con la opción -L o -l como en los casos anteriores
  • Nombre del snapshot: Se creará un nuevo disco que será el snapshot, indicamos el nombre con -n
  • Como último parámetro indicamos el disco origen del que queremos hacer el snapshot

El comando quedaría:

# lvcreate -s -L 10G -n snap /dev/nombrevg/lvdisc 
  Logical volume "snap" created

Mediante lvdisplay podemos ver los snapshots que tiene cada disco:

# lvdisplay
(...)
  --- Logical volume ---
  LV Name                /dev/local/mysql
  VG Name                data
  LV UUID                xU9bPe-zfiE-iYqE-10Mz-89gx-Ohc6-ySGeNB
  LV Write Access        read/write
  LV snapshot status     source of
                         /dev/data/snap.16 [active]
                         /dev/data/snap.00 [active]
                         /dev/data/snap.08 [active]
  LV Status              available
  # open                 1
  LV Size                430.00 GB
  Current LE             13760
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:3
(...)

Y el porcentaje de uso del snapshot:

# lvdisplay
(...)
  --- Logical volume ---
  LV Name                /dev/data/snap.08
  VG Name                data
  LV UUID                xEcUcj-1prX-OB64-yCYp-c75B-AeTY-LZeFNZ
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/data/mysql
  LV Status              available
  # open                 0
  LV Size                430.00 GB
  Current LE             13760
  COW-table size         45.00 GB
  COW-table LE           1440
  Allocated to snapshot  20.27% 
  Snapshot chunk size    4.00 KB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:8
(...)

En caso que se llene perderemos el snapshot, pero siempre lo podemos extener con lvextend.

Estos son los comandos básicos para sobrevivir con LVM, pero existen muchas más opciones.

2 comments to “Guía de supervivencia con LVM”

  1. Buena guía para iniciarse en LVM e ir entendiendo su funcionamiento. Sólo por que me pica la curiosidad, comentas el hecho de particionar los discos con una única partición para diferenciar nuevos de ya usados, pero no entiendo mucho el porqué.

  2. Una vez añadiendo discos a un equipo hice el pvcreate de un disco que ya era parte del volume group dejando fuera los datos que tenía (los logical volumes)

    Se puede recuperar modificando el ID en los primeros sectores del disco, pero de momento ya te han quedado los datos inaccesibles. Simplemente viendo que el disco sda no tiene ninguna partición puedes saber que no esta en uso, pero si ves un sdb y sdb1 significa que ese ni tocarlo

    saludos

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>