Manipular volúmenes lógicos (LVM) en discos virtuales

Me refiero a discos virtuales a los que creamos usando dd. Cuando creamos un disco utilizando por ejemplo dd if=/dev/zero of=imagen.img y lo usamos para crear una máquina virtual, en este caso con Xen, luego le instalamos un sistema operativo que maneje ya sea CentOS, RHEL, Debian o cualquier otro que maneje LVM en la instalación, hay veces que necesitamos manipularlo ya sea para clonarlo, hacerle mantención o simplemente montarlo para ver los archivos. En mi caso, tuve que clonar la máquina virtual en caliente y quedó el FS corrupto, por lo que tuve que corregirlo, tambien sirve para hacer tareas de mantención como aumentar o disminuir el tamaño del disco o volúmenes lógicos.

Tengo mi disco original llamado “vm1.img” y la clono simplemente con un cp o bien con “dd if=vm1.img vm1_clon.img“, paso a paso, lo que tenemos que hacer es:

  1. Crear un dispositivo “loop” en base a nuestro disco virtual
  2. Mapear el dispositivo loop creado
  3. Revisar los dispositivos creados en /dev/mapper/
  4. Activar el volúmen y realizar las tareas necesarias

Las herramientas que usé son losetup, kpartx y vgchange.

Primero, ya tenemos nuestro disco creado, en este caso lo llamaré “testing” y tiene un tamaño de 80GB.
# fdisk -l testing

Disk testing: 85.9 GB, 85899345920 bytes
255 heads, 63 sectors/track, 10443 cylinders, total 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0007759f

Device Boot Start End Blocks Id System
testing1 * 63 208844 104391 83 Linux
testing2 208845 167766794 83778975 8e Linux LVM

Para comenzar vamos a usar el comando losetup para crear un dispositivo “loop” en base a nuestra imagen de disco, para esto ejecutamos:

# losetup -f testing

Y verificamos con el mismo comando losetup que se haya creado

# losetup -a
/dev/loop0: [fe01]:24577 (/mnt/vardata/testing)

Ya tenemos nuestro dispositivo “loop” en /dev/loop0 mapeado a la imagen de disco virtual ubicada en /mnt/vardata/testing.

Ahora debemos usar la herramienta kpartx para mapear ese dispositivo que hemos mapeado a nuestro disco virtual hacia nuestro administrador de volúmenes lógicos

# kpartx -a -v /dev/loop0
add map loop0p1 (254:2): 0 208782 linear /dev/loop0 63
add map loop0p2 (254:3): 0 167557950 linear /dev/loop0 208845

Ahora tenemos otros dispositivos creados en /dev/mapper, corresponden a “loop0p1” y “loop0p2” correspondientes a las particiones de nuestro disco virtual. Así debería ser presentarse:

# ls -lia /dev/mapper/
total 0
1072 drwxr-xr-x 2 root root 140 sep 13 15:19 .
3 drwxr-xr-x 15 root root 3260 sep 13 15:19 ..
1073 crw------- 1 root root 10, 236 ago 11 12:12 control
2672529 lrwxrwxrwx 1 root root 7 sep 13 15:19 loop0p1 -> ../dm-2
2671232 lrwxrwxrwx 1 root root 7 sep 13 15:19 loop0p2 -> ../dm-3
3655 lrwxrwxrwx 1 root root 7 ago 11 12:12 VolGroup_ID_15211-backup -> ../dm-0
3672 lrwxrwxrwx 1 root root 7 ago 11 12:12 VolGroup_ID_15211-vardata -> ../dm-1

Y el comando vgdisplay debería mostrar la información del grupo

# vgdisplay
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 79,88 GiB
PE Size 32,00 MiB
Total PE 2556
Alloc PE / Size 2556 / 79,88 GiB
Free PE / Size 0 / 0
VG UUID yAIBPd-1PD6-IN1U-aoK7-bLSW-rz08-ERktCp

Y con lvdisplay revisamos la información de los volúmenes dentro del grupo VolGroup00

# lvdisplay VolGroup00
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID Du8Hwj-BUff-RhS3-lNTZ-KsxS-jvEp-S71om4
LV Write Access read/write
LV Status NOT available
LV Size 77,84 GiB
Current LE 2491
Segments 1
Allocation inherit
Read ahead sectors auto

--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID Sg3KQG-F3Ad-kgIx-yJi0-OSxm-fBUg-bKUR3O
LV Write Access read/write
LV Status NOT available
LV Size 2,03 GiB
Current LE 65
Segments 1
Allocation inherit
Read ahead sectors auto

Si te fijan en un detalle, en ambos volúmenes, el estado es “NOT available“, pues debemos activarlo

# vgchange VolGroup00 -a y
2 logical volume(s) in volume group "VolGroup00" now active

Y volvemos a revisar

# lvdisplay VolGroup00
--- Logical volume ---
LV Name /dev/VolGroup00/LogVol00
VG Name VolGroup00
LV UUID Du8Hwj-BUff-RhS3-lNTZ-KsxS-jvEp-S71om4
LV Write Access read/write
LV Status available
# open 0
LV Size 77,84 GiB
Current LE 2491
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:4

--- Logical volume ---
LV Name /dev/VolGroup00/LogVol01
VG Name VolGroup00
LV UUID Sg3KQG-F3Ad-kgIx-yJi0-OSxm-fBUg-bKUR3O
LV Write Access read/write
LV Status available
# open 0
LV Size 2,03 GiB
Current LE 65
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 254:5

Ya los tenemos disponibles y ahora podemos trabajar con ese volúmen como si fuese un “lvm” normal, realizar tareas de mantención, montar el volumen, disminuir o aumentar su tamaño, etc.

Cuando ya terminemos de hacer todo lo que queramos con el disco virtual, hay que volver todo a la normalidad, haciendo los pasos inversos:

Desactivar el volumen
# vgchange VolGroup00 -a n
0 logical volume(s) in volume group "VolGroup00" now active

Remover el mapeo de los dispositivos loop0p1 y loop0p2 creados desde loop0
# kpartx -d /dev/loop0

Remover el mapeo de /dev/loop0 creado desde nuestro disco virtual “testing”
# losetup -v -d /dev/loop0

Ya dejamos todo como estaba y podemos volver a utilizar nuestro disco virtual.

2 comentarios

  1. Muy interesante

  2. hola que bueno es aprender con ustedes no tengo idea y gracias a ustedes aprendo cada día …. si pudiera aprender mas de ustedes se lo agradecería ya que tengo amigos que enseñan muy mal y mas encima como no entiendo se enojan ,gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.