Esta pagina se ve mejor con JavaScript habilitado

Gestión de Boot Environments en FreeBSD

 ·  🎃 kr0m

FreeBSD soporta lo que llama boot environments, estos funcionan en base a los clones de ZFS por lo que será necesario emplear dicho sistema de ficheros para poder sacarle provecho. Los boot environments nos permitirán realizar actualizaciones sobre equipos físicos o VMs sin peligro ya que podremos revertir los cambios en caso de que algo falle.

La herramienta de gestión de “boot environments” que viene instalada por defecto en FreeBSD es Bectl aunque existen otras opciones como Beadm .

Como podemos ver FreeBSD por defecto genera un “boot environment” en la instalación del sistema operativo.

bectl list

BE      Active Mountpoint Space Created
default NR     /          967M  2021-03-28 15:26

Un “boot environment” comprende el sistema operativo entero a excepción de los siguientes directorios:

/tmp  
/usr/home  
/usr/ports  
/usr/src  
/var/audit  
/var/crash  
/var/log  
/var/mail  
/var/tmp

Estos directorios no se contemplan ya que pueden contener información de usuario o de aplicaciones y no es conveniente perderlos en ningún caso.

A efectos demostrativos creamos un “boot environment” llamado pre_install:

bectl create pre_install

Consultamos los “boot environments”:

bectl list

BE          Active Mountpoint Space Created  
default     NR     /          967M  2021-03-28 15:26  
pre_install -      -          8K    2021-03-28 16:39

Podemos ver que se ha creado un nuevo dataset ZFS:

zfs list

NAME                     USED  AVAIL  REFER  MOUNTPOINT  
zroot                    970M  6.32G    96K  /zroot  
zroot/ROOT               967M  6.32G    96K  none  
zroot/ROOT/default       967M  6.32G   967M  /  
zroot/ROOT/pre_install     8K  6.32G   967M  /

Normalmente utilizaremos los “boot environments” cuando vayamos a actualizar el SO, pero para hacer la prueba instalaremos la herramienta htop:

pkg install htop

Y generaremos algunos ficheros para comprobar mas adelante su existencia al arrancar un “boot environment” u otro:

touch /home/kr0m/AA
touch /var/BB

Activamos el “boot environment” pre_install:

bectl activate pre_install

Successfully activated boot environment pre_install

Comprobamos el estado actual de los “boot environments”:

bectl list

BE          Active Mountpoint Space Created  
default     N      /          420K  2021-03-28 15:26  
pre_install R      -          967M  2021-03-28 16:39

Reiniciamos:

shutdown -r now

Por defecto arrancará el “boot environment” que le hayamos indicado pero podemos sobreescribir la configuración de forma manual desde el propio boot de FreeBSD, accedemos a la siguiente opción:
8 Boot Environments

En este menú veremos que por defecto tenemos como active pre_install ya que es la opción que activamos antes del reinicio, pero presionando la tecla “2” podemos ir alternando para arrancar uno u otro.


En realidad no era necesario acceder a este menú ya que por defecto hemos dejado configurado el “boot environment” pre_install, pero lo muestro para que quede claro que desde el loader se puede elegir el “boot environment” que deseemos.

Lo dejamos en pre_install y presionamos ENTER para arrancar.

Accedemos al sistema y comprobamos que el equipo se encuentra en el estado justo antes de instalar htop:

htop

htop: Command not found.

El fichero dentro del directorio excluido del “boot environment” seguirá existiendo ya que son datos del usuario y no deseamos perderlos:

ls -la /home/kr0m/AA

-rw-r--r--  1 root  kr0m  0 Mar 28 16:40 /home/kr0m/AA

En cambio el fichero generado en /var ha dejado de existir:

ls -la /var/BB

ls: /var/BB: No such file or directory

Si deseamos eliminar algún “boot environment” tan solo debemos pasarle el parámetro destroy seguido del nombre del “boot environment”:

bectl destroy -o default

Comprobamos que lo haya destruido:

bectl list

BE          Active Mountpoint Space Created  
pre_install NR     /          967M  2021-03-28 16:39

En este caso que hemos revertido lo mejor es renombrar el “boot environment” a default para evitar problemas ya que así en la próxima actualización podremos volver a utilizar el nombre pre_install:

bectl rename pre_install default

Consultamos los “boot environments”:

bectl list

BE      Active Mountpoint Space Created  
default NR     /          967M  2021-03-28 16:39

En este artículo solo hemos utilizado bectl de una forma muy básica, este permite operaciones mas complejas como generar una Jail a partir de un “boot environment” en concreto, consiguiendo así convertir un equipo físico a Jail.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí