Añadir un VDO a una máquina virtual
- EN
- ES
Table of Contents
Cómo añadir un disco VDO a una máquina virtual para añadir almacenamiento aprovechando la compresión y deduplicación transparentes
Mierda, una de las máquinas virtuales de mi laboratorio casero ha petado porque el filesystem root se ha llenado. Parece que Nessus Essentials genera reportes mucho más frecuentes y grandes de lo que yo esperaba :)
Para arreglarlo añadiré un disco para mover el directorio /opt
(o parte de él). Pero usaré el nuevo Red Hat Virtual Data Optimizer (VDO) para aprovechar sus características de compresión y deduplicación transparentes.
Para empezar, crearé el disco nuevo lo contectaré a la VM. Cómo hacerlo dependerá del sistema de virtualización que está usando cada cual.
Lo importante es terminar con un nuevo disco en la VM:
# dmesg | tail
[...]
[89575.706450] scsi 0:0:0:1: Direct-Access QEMU QEMU HARDDISK 2.5+ PQ: 0 ANSI: 5
[89575.710622] sd 0:0:0:1: Power-on or device reset occurred
[89575.710950] sd 0:0:0:1: Attached scsi generic sg2 type 0
[89575.713614] sd 0:0:0:1: [sdb] 33554432 512-byte logical blocks: (17.2 GB/16.0 GiB)
[89575.713719] sd 0:0:0:1: [sdb] Write Protect is off
[89575.713720] sd 0:0:0:1: [sdb] Mode Sense: 63 00 00 08
[89575.713869] sd 0:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[89575.723197] sd 0:0:0:1: [sdb] Attached SCSI disk
vdo
no se instala por defecto en CentOS 8 así que:
yum -y install vdo kmod-kvdo
Ya podemos crear el volumen vdo donde /opt
podrá ir a vivir:
# vdo create --vdoLogicalSize=32G -n vdo_opt --device=/dev/sdb
Creating VDO vdo_opt
Starting VDO vdo_opt
Starting compression on VDO vdo_opt
VDO instance 0 volume is ready at /dev/mapper/vdo_opt
Crear el filesystem XFS (no olvidar el argumento -K)
mkfs.xfs -K /dev/mapper/vdo_opt
De momento todo ok. Falta mover los datos, Antes de empezar, tenemos que asegurarnos de que no hy ficheros en uso en el directorio que queremos mover; si es el caso, probablemente tengamos que parar el servicio nessusd.service.
Y ahora el proceso habitual: renombrar /opt
a /opt2
y crear el nuevo /opt
que será el nuevo hogar del volumen vdo:
cd /
mv /opt /opt2
mkdir /opt
mount /dev/mapper/vdo_opt /opt
mv /opt2/* /opt/
Dependiendo de cuántos datos haya que mover, esto puede llevar un rato. Si todo va bien, una vez termine de ejecutarse podremos borrar el viejo directorio /opt2
:
rmdir /opt2
En caso de error, posiblemente haya ficheros ocultos en uso, tocará hacer troublehsooting.
#
Montando el disco VDO
Probablemente hayas notado que montamos el vdo
manualmente sin crear una entrada /etc/fstab
. Y no lo vamos a hacer.
Vamos a dejar que sea systemd quien se haga cargo. Como sabrás, las unidades systemd no se limitan a los servicios tradicionales sino que pueden ser también puntos de montaje.
Con la instalación de vdo, se crearon algunos ficheros de ejemplo /usr/share/doc/vdo/examples
. Vamos a usar uno de ellos:
cp /usr/share/doc/vdo/examples/systemd/VDO.mount.example /etc/systemd/system/opt.mount
Editar vdo-opt.mount
a nuestra conveniencia:
[Unit]
Description = Mount filesystem that lives on VDO
name = opt.mount
Requires = vdo.service systemd-remount-fs.service
After = multi-user.target
Conflicts = umount.target
[Mount]
What = /dev/mapper/vdo_opt
Where = /opt
Type = xfs
Options = discard
[Install]
WantedBy = multi-user.target
WARNING: to be able to do this, mount unit name (opt
) must match mount point name (/opt
).
OJOCUIDAO: para poder hacer esto, el nombre de la unidad (opt
) tiene que coincidir con el nombre del punto de montaje (opt
).
Enable y start:
# systemctl enable --now opt.mount
# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 920060 0 920060 0% /dev
tmpfs 936732 0 936732 0% /dev/shm
tmpfs 936732 8692 928040 1% /run
tmpfs 936732 0 936732 0% /sys/fs/cgroup
/dev/mapper/vg_system-root 10475520 1633256 8842264 16% /
/dev/mapper/vg_system-home 1038336 126544 911792 13% /home
/dev/mapper/vg_system-tmp 2086912 47780 2039132 3% /tmp
/dev/sda1 999320 265636 664872 29% /boot
tmpfs 187344 0 187344 0% /run/user/1000
/dev/mapper/vdo_opt 33538048 8992684 24545364 27% /opt
¿Cuánto tardaré en volver a llenarse? Pues yo qué sé, habrá que echar un ojo a las estadísticas de vez en cuando:
vdostats --human-readable
Device Size Used Available Use% Space saving%
/dev/mapper/vdo_opt 16.0G 8.8G 7.2G 55% 42%