LVM

~ 13 Apr 2024

LVM es una de esas cosas que siempre he visto pero nunca me paré siquiera a ver para qué podía ser útil. Casualmente ahora le he encontrado utilidad de rebote.

Tengo una Raspberry Pi 4 con un disco mecánico (lento) de unos cuantos teras, y otros 3 SSD de diferentes tamaños. Mi idea inicial era usar al menos uno de los SSD para hacer de caché del HDD con bcache, pero oh sorpresa el kernel de Raspbian no lo trae activado por defecto. Ok, pues recompilo un kernel con eso activado… o no. Mientras compilaba he pensado en el mantenimiento de eso con cada actualización y he pensado “ni de coña pongo mi kernel a estas alturas de la vida”.

Buscando alternativas me topo con LVM. No tiene que ver con caché, pero me sirve para lo que busco, que es un paso intermedio del HDD para descargas. Así que he hecho un volumen con dos SSD, para tener espacio suficiente entre descargas, y de ahí pasar al HDD:

# instalamos lvm2
$ sudo apt install lvm2
# creamos el volumen físico
$ sudo pvcreate /dev/sdb1 /dev/sdc1

WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdb1.
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.

$ sudo pvs

  PV         VG Fmt  Attr PSize    PFree
  /dev/sdb1     lvm2 ---    59.62g   59.62g
  /dev/sdc1     lvm2 ---  <111.79g <111.79g
# creamos el grupo de volumen
$ sudo vgcreate ssd_vol /dev/sdb1 /dev/sdc1

  Volume group "ssd_vol" successfully created

$ sudo vgs

  VG      #PV #LV #SN Attr   VSize    VFree
  ssd_vol   2   0   0 wz--n- <171.38g <171.38g
# creamos el volumen lógico
$ sudo lvcreate -l 100%FREE -n ssd_log_vol ssd_vol

  Logical volume "ssd_log_vol" created.

$ sudo lvs

  LV          VG      Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  ssd_log_vol ssd_vol -wi-a----- <171.38g
# formateamos el volúmen en ext4 y montamos la unidad
$ sudo mkfs.ext4 /dev/ssd_vol/ssd_log_vol
$ sudo mkdir /mnt/lvm_ssd
$ sudo chown -R pi:pi /mnt/lvm_ssd
$ sudo chmod 775 /mnt/lvm_ssd
$ sudo blkid

...
/dev/sdb1: UUID="L93uQY-2h0N-PJpU-T2lL-NDjc-Am38-1L12jm" TYPE="LVM2_member" PARTUUID="28d1fe50-01"
/dev/sdc1: UUID="ZMaG00-WNI1-jH3R-ycD1-mlwo-cB7M-0fNrTp" TYPE="LVM2_member" PARTUUID="74523e87-01"
/dev/mapper/ssd_vol-ssd_log_vol: UUID="10ff0f01-78dd-47e9-bff3-6ed738e680cf" BLOCK_SIZE="4096" TYPE="ext4"

# añadir al final
$ sudo nano /etc/fstab

UUID=10ff0f01-78dd-47e9-bff3-6ed738e680cf  /mnt/lvm_ssd  ext4  defaults,noatime,commit=30  0  1

$ sudo mount /mnt/lvm_ssd
# test de velocidad
$ dd if=/dev/zero of=/mnt/lvm_ssd/test.img bs=1M count=256 oflag=dsync

268435456 bytes (268 MB, 256 MiB) copied, 3.22186 s, 83.3 MB/s
# como ejemplo, pasamos las descargas en curso de Transmission a esta unidad
$ mkdir /mnt/lvm_ssd/torrents
$ transmission-remote -c /mnt/lvm_ssd/torrents

La única pega que le estoy viendo, por ahora, es lo que una vez descargado algo tarda en pasar al HDD (obviamente), pero me gusta la flexibilidad que ofrece LVM.

NOTA: Actualización 2024: Dejé de usar esto hace 1 año, funcionó bien pero terminé dejando de usarlo en favor de mergerfs + SnapRAID, en un intento de emular lo que hace unraid como tengo en el NAS y va PERFECTO.