Volúmenes lógicos

LVM, la implementación de volúmnes lógicos, sirve para flexibilizar el manejo de particiones y entre otras cosas más para crear instantáneas que pueden usarse con xen.

Para crear un LVM es necesario crear 1 o más PVs (volúmenes físicos). Un PV puede ser la partición de un disco. Uno o más PVs conforman un VG (grupo de volúmenes). Una vez conformado un VG se puede particionar tal como si fuera un disco tradicional. En este caso cada partición es llamada volúmen lógico (LV).

Algunas herramientas de LVM

  • pvcreate: Crea volúmenes físicos
  • vgcreate: Crea un grupo de volúmenes
  • vgchange: Sirve para modificar los atributos de un grupo de volúmenes, por ejemplo para  activar o desactivarlo.
  • vgreduce: Elimina volúmenes físicos.
  • vgextend: Agrega volúmenes físicos a un grupo de volúmenes
  • lvcreate: Crea un volúmen lógico
  • lvextend: Sirve para expandir un volúmen lógico, si se usa ext3, luego hay que usar la herramienta resize2fs. Se puede usar con con el sistema de archivos correspondiente montado.
  • lvreduce: Sirve para achivar un volumen lógico, previamente si usa ext3 hay que usar el comando resize2fs indicando un tamaño coherente con lo que se indica on lvreduce. Por lo que entiendo no puede usar con el sistema de archivos montado
  • Las herramientas vgdisplay, pvdisplay, y lvdisplay muestran respectivamente información de grupos de volúmenes, volúmenes físicos y volúmenes lógicos.
  • lvs: Muestra información resumida de todos los volúmenes lógicos.
  • lvrename: Sirve para cambiarle el nombre a un volumen lógico.

Las líneas en /etc/fstab correspondientes a volúmenes lógicos puede verse así:

/dev/vboxes/mercurio        /mercurio        ext3    defaults    1 2
/dev/vboxes/venus        /venus        ext3    defaults    1 2
/dev/vboxes/marte        /marte        ext3    defaults    1 2

Si bien existen herramientas gráficas, es conveniente conocer los comandos subyacentes.

Interfaces de red en Xen

Cuando se arranca con kernel Xen en Centos 5.1 genera cuatro interfaces más de red (suponiendo que tenemos solamente una placa de red): peth0, vif0.0, virbr0 y xenbr0.

eth0 Link encap:Ethernet HWaddr 00:16:76:6F:2D:6C
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::216:76ff:fe6f:2d6c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26381 errors:0 dropped:0 overruns:0 frame:0
TX packets:21968 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:36205072 (34.5 MiB) TX bytes:1598392 (1.5 MiB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1263 errors:0 dropped:0 overruns:0 frame:0
TX packets:1263 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2078804 (1.9 MiB) TX bytes:2078804 (1.9 MiB)

peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:26404 errors:0 dropped:0 overruns:0 frame:0
TX packets:22041 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36210479 (34.5 MiB) TX bytes:1730806 (1.6 MiB)
Interrupt:21 Base address:0x4000

vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:21968 errors:0 dropped:0 overruns:0 frame:0
TX packets:26381 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1598392 (1.5 MiB) TX bytes:36205072 (34.5 MiB)

virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:53 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:9337 (9.1 KiB)

xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:139 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:46934 (45.8 KiB) TX bytes:0 (0.0 b)

Lo que hace es crear dos bridges:

  • virbr0: Sin interfaces
  • xenbr0: Interfaces peth0 y vif0.0

Cuando se levanta un sistema operativo en el DomU cambia a:

  • virbr0: vifN.0
  • xenbr0: Interfaces peth0 y vif0.0

Paravirtualizando con Xen

A pesar de que el propio Linus Torvalds recientemente le quitó relevancia a la virtualización, sigue siendo un recurso muy importante en muchos ámbitos. Mediante la virtualización podemos consolidar distintos sistemas operativos en un sólo equipo físico, con el consiguiente ahorro económico. Además, supone más facilidad de administración, usar entornos separados para el desarrollo de software (se evita el tedioso reinicio del sistema real), evaluar software de tipo experimental de manera inocua, etc.

Arranque de un sistema en DomUExisten muchas opciones en lo que a virtualización se refiere. Xen es una de ellas, que usa una técnica llamada paravirtualización. Sintéticamente, esto signfica que Xen es un hipervisor, es decir es un software que es lanzado por el cargador de arranque y que simula ser el hardware real. El hipervisor por si solo no puede hacer demasiado, lo que hace es llamar a un sistema operativo virtualizado, lo que llamaríamos un guest, que en la jerga de Xen se denomina Dom0. Este Dom0 no es cualquier guest, es el sistema que tiene el único privilegio de acceder al hipervisor, es decir al pseudo-hardware. Lo interesante de esto es que el Dom0 puede gestionar a otros dominios llamados DomU, es decir podemos tener otros sistemas operativos invitados.

La ventaja de esta técnica es que todos los sistemas operativos instalados acceden a los mismos drivers, con lo cual la performance de un sistema instalado como DomU es casi idéntica a la de unConsola mostrando un sistema de DomU sistema nativo. Por supuesto, como casi nada es perfecto, esto tiene una desventaja, es necesario que los sistemas invitados estén modificados para poder ser invitados en Xen. Es por eso que se usa un kernel especial, que de hecho lo primero que hace es arrancar Xen, y luego el Dom0. La otra desventaja que tiene es que las distros del DomU y la del Dom0 tienen que ser idénticas para que la implementación sea sencilla. Es decir, si Dom0 es Centos 5.1 una distro del DomU también debe ser Centos 5.1. Obviamente hay excepciones, de hecho, la virtualización completa a diferencia de la paravirtualización permite que un sistema cerrado como Windows esté como sistema invitado.