Apocalipsis: Extender partición Persistence automáticamente

El hecho que haya que retocar manualmente las particiones después de copiar la imagen de disco al disco externo, es un problema.
Mucha gente no tiene ni idea de lo que significa (…y porqué tendría? Tampoco es necesario) y también es peligroso si no sabes lo que estás haciendo. No sería la primera vez que ocurre que te vaya a modificar las particiones en el disco equivocado provocando perdidas de datos.

Así que he ido buscando una solución para automatizar el proceso, consciente que en los RaspberryPi en los últimos años esta operación es automática al primer arranque.

la operación es bastante simple y se reduce a 2 comandos:

growpart /dev/sdb 5 

resize2fs /dev/sdb5

El comando growpart extiende la partición 5 del disco /dev/sdb a lo máximo posible (el espacio entre /dev/sdb y el 5 no es un error)
El siguiente comando resisze2fs /dev/sdb5 en cambio, extiende el formato de forma de ocupar todo el espacio libre de la partición recién extendida.

Pero todo esto hay que hacerlo automaticamente al primer boot, ANTES de que el sistema monte en el filesystem o sistema de archivo la partición Persistence (/dev/sdb5). Una vez montada ya no se puede tocar.

Lo que hay que hacer es crear un servicio que se ejecute ANTES de montar las particiones… y buscando he encontrado que alguien ya había resuelto este problema:

https://sleeplessbeastie.eu/2020/10/14/how-extend-existing-ext4-filesystem-using-systemd-service/

Me he vuelto en «cubic», el creador de imagen Live para debian y derivadas, y allí he instalado:

apt install cloud-guest-utils

y luego he añadido este servicio creando este fichero de texto con mcedit (pero tu puedes usar nano o vim)

mcedit /etc/systemd/system/growpart-and-resizefs-root.service

y dentro:

[Unit]
Description=Extend root partition and resize ext4 file system
After=local-fs.target
Wants=local-fs.target

[Service]
ExecStart=/usr/local/bin/resizePersistence.sh

Type=oneshot

[Install]
WantedBy=multi-user.target

luego como que no funciona (y no puede funcionar) el comando para añadir automáticamente el servicio de arranque.
El problema es que systemctl daemon-reload y systemctl enable growpart-and-resize-root dan un error de que están dentro de un ambiente chroot

Por lo tanto, he creado a mano un enlace simbólico a mano con

ln -s /etc/systemd/system/growpart-and-resizefs-root.service /etc/systemd/system/multi-user.target.wants/growpart-and-resizefs-root.service

ahora creamos otro script externo a systemd (así funciona bash correctamente) en /usr/local/bin/resizePersistence.sh

mcedit /usr/local/bin/resizePersistence.sh

y dentro le ponemos

#!/bin/bash

ROOT_DISK=$(df | grep "/run/live/persistence" | grep -v "100%"  | cut -d ' ' -f1 | cut -c 1-8)
ROOT_PARTITION=$(df | grep "/run/live/persistence" | grep -v "100%"  | cut -d ' ' -f1 | cut -c 9)

echo ROOT_DISK=$ROOT_DISK
echo ROOT_PARTITION=$ROOT_PARTITION

/bin/bash -c "/usr/bin/growpart -N $ROOT_DISK $ROOT_PARTITION && /usr/bin/growpart $ROOT_DISK $ROOT_PARTITION || exit 0"
/bin/bash -c "/sbin/resize2fs $ROOT_DISK$ROOT_PARTITION || exit 0"

Luego he creado la imagen iso en seguida con mkusb he creado un pen usb con persistence, quitado la partición de ntfs y reducido la partición Persistence a 6GB todo con gparted. Luego con «Discos» he sacado la imagen desde la llave usb de unos 31GB, y luego con qemu-img resize -f raw Apocalipsis_1.7_amd64.img 10G he reducido el tamaño de la imagen a unos 10GB la cual una vez comprimida en .zip ha bajada a unos 7GB ,… pero esto lo vamos a ver en otro articulo y video 🙂

Comentarios cerrados.