img

Objetivo:

El objetivo de este artículo es aprender a realizar un volumen de arranque totalmente funcional e independiente de cualquier instancia, es decir, que pueda ser asociado a una instancia nueva, y sea arrancable y plenamente funcional sin tener que configurar o instalar nada.

Conceptos Previos:

¿Qué es OpenStack?

Por norma general, una persona que lea esto, deberia saber ya lo que son estos conceptos pero aun así, porque como siempre hay despistados (yo el primero), voy a explicarlo brevemente. OpenStack es un orquestador de instancias o máquinas virtuales en la nube, es decir, un “gestor de máquinas virtuales” por así decirlo, entre otras funciones por supuesto.

¿Qué es una instancia?

Una instancia, en pocas palabras, es una “máquina virtual” que se aloja en una nube (dentro de una red), orquestada en este caso por OpenStack.

¿Qué es un volumen? ¿Y un volumen lógico?

Un “disco duro” virtual. Un dispositivo de almacenamiento. Un volumen lógico es una “partición” del propio dispositivo de almacenamiento gestionada por LVM.

¿Qué es LVM?

LVM (Logical Volume Manager) es una herramienta para gestionar volúmenes lógicos, permitiendo redimensionar y manejar el almacenamiento de discos.

Empezamos:

En una instancia de OpenStack basada en Debian 12 Bookworm, con esquema de particiones:

vda
vda1 ext4 /
vda15 FAT16 /boot/efi

Realizar las acciones necesarias para transformarlo y tener un esquema basado en volúmenes lógicos, donde la raíz del sistema y /home estarán como volúmenes lógicos. /boot tendrá sistema de archivos ext4, tamaño de 1GB y estará en una partición de 1GB, /boot/efi se mantendrá como está.

El primer paso es generar un volumen generando primero el volumen en -> crear volumen basado en imagen de debian. Con el volumen creado, lo he asociado a una instancia que ya tenia llamada dns, en volúmenes -> gestionar asociaciones.

Imagen del Post

Ahora en la instancia ya aparece el nuevo disco con el mismo esquema de particiones de la instancia que tenia hecha quedando así:

Para ver las particiones:

lsblk -f

Donde vda es el disco original de la instancia, y vdb es el disco que he creado manualmente y que he asociado a la instancia.

Imagen del Post

El siguiente paso es crear las particiones necesarias para usar lvm para root (raiz) y home, dejando fuera la particion boot y efi (la de efi no se toca).

Creo las particiones en vdb con fdisk, vdb3 ocupa 12gb porque utilicé el espacio restante y ahí he creado los volúmenes logicos.

Imagen del Post

Instalo lvm en el caso de no tenerlo:

sudo apt install lvm2

Creo los volúmenes lógicos en vdb3, dandole 8GB para root y 3GB para home:

sudo pvcreate /dev/vdb3
sudo vgcreate vg0 /dev/vdb3
sudo lvcreate -L 8G -n root vg0
sudo lvcreate -L 3G -n home vg0

Nota: -L para tamaño y -n para el nombre.

Le doy formato ext4, incluyendo boot que en mi caso es vdb2:

sudo mkfs.ext4 /dev/vdb2
sudo mkfs.ext4 /dev/vg0/root
sudo mkfs.ext4 /dev/vg0/home

Creo y monto los respectivos directorios:

sudo mkdir -p /mnt/newroot
sudo mount /dev/vg0/root /mnt/newroot
sudo mkdir /mnt/newroot/home
sudo mount /dev/vg0/home /mnt/newroot/home
sudo mkdir /mnt/newroot/boot
sudo mount /dev/vdb2 /mnt/newroot/boot
sudo mkdir /mnt/newroot/boot/efi
sudo mount /dev/vdb15 /mnt/newroot/boot/efi

Hecho esto, ahora hay que copiar el contenido del sistema a las nuevas particiones con rsync:

sudo rsync -aAXv / --exclude={"/mnt/root/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} /mnt/newroot/

-a (archive): Preserva la mayoría de las propiedades de los archivos.

-v (verbose): Muestra información detallada.

-A (acls): Preserva listas de control de acceso (ACL).

-X (xattrs): Preserva atributos extendidos.

Con exclude se evita copiar esos directorios, porque son del sistema actual que no servirian en las nuevas instancias.

Imagen del Post

Cuando termina de copiar los archivos, lo añado al fstab para hacerlo permanente, así que modifico el fichero /mnt/newroot/etc/fstab:

# /etc/fstab: static file system information

UUID=2261c309-7270-4f0b-9493-e18d951d86e1 /           ext4    rw,discard,errors=remount-ro,x-systemd.growfs 0 1
UUID=3baaed0b-3dde-442e-bad9-8300a057b198 /boot       ext4    defaults        0       2
UUID=69a0109e-4eea-4de2-b88f-86bd284402e5 /home       ext4    defaults        0       2
UUID=490A-A94F                           /boot/efi   vfat    umask=0077      0       1

(umask 077 para darle permisos al usuario y al propietario solamente)

Ahora hay que montar el resto de directorios (y crearlos si no existen):

mkdir -p /mnt/newroot/dev
sudo mkdir -p /mnt/newroot/proc
sudo mkdir -p /mnt/newroot/sys
sudo mkdir -p /mnt/newroot/tmp

sudo mount --bind /dev /mnt/newroot/dev
sudo mount --bind /proc /mnt/newroot/proc
sudo mount --bind /sys /mnt/newroot/sys

Usando chroot, instalo y configuro el grub para cuando el disco este en otra instancia pueda arrancar:

sudo chroot /mnt/newroot
grub-install /dev/vdb
update-grub
exit

Imagen del Post

Nota: chroot es para “engañar” al sistema, para que cuando haga un grub-install y update-grub se aplique en el segundo volumen y no en el principal, ya que si lo hago sin el chroot se aplica en el sistema principal y no funcionaria nada de esto.

Por otro lado el mount –bind es para que esten disponibles esos archivos en el nuevo volumen. (dev dispositivos, proc procesos en ejecucion, sys hardware y kernel).

Para terminar desasocio el volumen de mi instancia dns y creo una nueva:

Imagen del Post

Usando como origen el volumen que he estado modificando:

Imagen del Post

Y cuando termina de generarse y entro a la consola, ya no pone el mensaje de “error de booting from hardisk”, sino que arranca con normalidad.

Imagen del Post

Imagen del Post

Pudiendome conectar de forma normal por ssh y de paso ver las particiones como han quedado:

Imagen del Post

Imagen del Post

Errores:

Si dan errores al iniciar la instancia con el nuevo volumen es que se esta eliminando la particion efi y creandola a mano, por lo que cuando se iniciaba la instancia nueva nunca arrancaba dando siempre el error de “booting from hardisk” que intentaba arrancar con el volumen sin éxito. La solución es no tocar la partición EFI. Modificado esto ya funciona sin problemas.