CentOS – Montar Storage Pool sobre LVM para KVM

Tenemos un CentOS 5 por necesidades técnicas y tenemos instalado KVM. Queremos que KVM aloje los discos virtuales en volúmenes LVM en vez de guardarlo en imágenes de disco estándar (típicamente alojadas en el /var) por motivos técnicos y de pasada por temas de performance.

Hemos instalado el Gnome Desktop y una serie de utilidades, entre ellas claro el propio kvm y el virt-manager. La parte de añadir el storage pool al kvm la hago por GUI por pereza pero evidentemente, se puede añadir vía comandos. Es que voy con prisa, como siempre!

Listamos los discos disponibles. En este escenario tenemos dos discos físicos /dev/sda para / y /dev/sdb con 1.6 TB para almacenar discos de máquinas virtuales KVM

# fdisk -l /dev/{s,h}d? 2> /dev/null | grep '^Disk /dev.*'
Disk /dev/sda: 107.3 GB, 107363696640 bytes
Disk /dev/sdb: 1892.6 GB, 1892667097088 bytes

Preparamos una partición /dev/sdb1 en sistema LVM

Using the whole secondary hard disk for LVM partition: 
fdisk /dev/sdb1

At the Linux fdisk command prompt,
press n to create a new disk partition,
press p to create a primary disk partition,
press 1 to denote it as 1st disk partition,
press ENTER twice to accept the default of 1st and last cylinder – to convert the whole secondary hard disk to a single disk partition,
press t (will automatically select the only partition – partition 1) to change the default Linux partition type (0×83) to LVM partition type (0x8e),
press L to list all the currently supported partition type,
press 8e (as per the L listing) to change partition 1 to 8e, i.e. Linux LVM partition type,
press p to display the secondary hard disk partition setup. Please take note that the first partition is denoted as /dev/sdb1 in Linux,
press w to write the partition table and exit fdisk upon completion.

Escaneamos en busca de volúmenes físicos en LVM

# pvs

Nothing, ok, vamos bien. Sigamos, vamos a crear ahora un volumen físico LVM

# pvcreate /dev/sdb1
Writing physical volume data to disk "/dev/sdb1"
Physical volume "/dev/sdb1" successfully created

Listamos ahora nuestros volumenes físicos y encontramos el que acabamos de crear

# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 a--  1.72T 1.72T

Con pvscan o pvdisplay veremos más datos

# pvscan
  PV /dev/sdb1                      lvm2 [1.72 TB]
  Total: 1 [1.72 TB] / in use: 0 [0   ] / in no VG: 1 [1.72 TB]
# pvdisplay
  "/dev/sdb1" is a new physical volume of "1.72 TB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               1.72 TB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               qhH09b-LpZh-Ijbd-n8UT-qdZt-d8Iv-sHK2ZD

Ahora crearemos un grupo de volumen, que es una colección de uno o más discos físicos y contiene uno o más volumenes lógicos creados en esos discos. Un volumen lógico es simplemente una colección de espacio alojado que pertenece a un grupo de volumen padre y contendrá las particiones para a su vez contener los datos

En este caso, sólo tenemos /dev/sdb1 para alojar grupos de volumenes, por tanto ejectuaremos

# vgcreate -s 16M lvmvol /dev/sdb1
  Volume group "lvmvol" successfully created

donde lvmvol es el nombre de nuestro grupo de volumenes
donde -s 16M es el physical exten size, más info aquí

Ahora, de la misma forma que listamos discos físicos listamos los volumenes con vgs

# vgs
  VG     #PV #LV #SN Attr   VSize VFree
  lvmvol   1   0   0 wz--n- 1.72T 1.72T

con vgscan o vgdisplay tendremos más información al respecto

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "lvmvol" using metadata type lvm2
# vgdisplay
  --- Volume group ---
  VG Name               lvmvol
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               1.72 TB
  PE Size               16.00 MB
  Total PE              112811
  Alloc PE / Size       0 / 0
  Free  PE / Size       112811 / 1.72 TB
  VG UUID               qOf619-1CQy-9D7n-KejA-xCut-1BiL-yQhYOu

En este punto, tenemos un volumen lógico llamado “lvmvol”. Este volumen va a ser el que utilicemos para alojar los discos duros de las máquinas virtuales KVM. Para ello, vamos a conectarnos via GUI de nuestro CentOS 5 y arrancar la interfaz gráfica del virt-manager, llamado Virtual Machine Manager.

Para añadir nuestro volumen, seguimos estos pasos, hay que hacerlo como se dice:

En este punto, tenemos nuestro Storage Pool configurado con un espacio de 1.7TB montado sobre LVM, y será el espacio por defecto donde deberemos alojar los discos virtuales de nuestras máquinas virtuales.

http://vitobotta.com/setting-up-kvm-lvm-virtual-machine-host/

http://www.walkernews.net/2007/07/02/how-to-create-linux-lvm-in-3-minutes/
http://www.walkernews.net/2007/07/02/maximum-size-of-a-logical-volume-in-lvm/

Actualización:

Al parece desde el virt-manager GUI versión 0.6 no es posible alojar el disco duro de la máquina virtual en el storage pool LVM como nos gustaría. Lo haremos a mano:

# lvcreate -L 300G -n vol001 lvmvol
  Logical volume "vol001" created

Entonces iniciaríamos el virt-manager y configuraríamos nuestro storage para nuestra virtual como /dev/mapper/vol0001. Si seguimos esto, al crear la máquina virtual y hacer fdisk veremos un dispositivo “físico” /dev/sda

Problemas

“Can’t remove open logical volume”

Listamos volúmenes

# vgscan
Found volume group "vg0" using metadata type lvm2

Comprobamos su estado

# dmsetup info -c  /dev/mapper/vg0-lvol0
Name             Maj Min Stat Open Targ Event  UUID
vg0-lvol0        253   0 L--w    1    1      0 LVM-5WLB1qNCoeeIee6AGTb3mMl5U1Q0BH72qLuuTzL0KykfN0KnNftHPpRbMTtKXLqz

Vemos que en el tag Open marca como 1, es decir, sigue abierto. Por eso no podemos ejecutar aún el vgremove. Tenemos que cerrar esté volumen lógico de la tabla dmsetup para entonces proceder a borrarlo con vgremove.

# dmsetup remove /dev/mapper/vg0-lvol0
device-mapper: remove ioctl failed: Device or resource busy
Command failed

Uops! esto si que no lo esperabamos. Vamos a probar algo más. Creamos un script con un bucle para eliminar estas entradas

# cat script
while [ $? -eq "5" ]; do lvremove -f /dev/vg0/lvol0 ;
done

Damos permiso al script y ejecutamos. Volvemos a probar el comando:

# vgremove vg0
Do you really want to remove volume group "vg0" containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume lvol0? [y/n]: y
  Logical volume "lvol0" successfully removed
  Volume group "vg0" successfully removed

El volumen lógico fue eliminado correctamente.

http://geekinlinux.blogspot.com.es/2011/11/cant-remove-open-logical-volume.html
http://stackoverflow.com/questions/7104762/cant-remove-open-logical-volume

http://tekvi.blogspot.com.es/2012/02/lvremove-cant-remove-open-logical.html

1 thought on “CentOS – Montar Storage Pool sobre LVM para KVM

  1. Pingback: CentOS – ethernet modo brigde

Leave a Reply

Your email address will not be published. Required fields are marked *