Backup doméstico seguro con Linux, cifrado y ZFS (VII): Actualización y reconfiguración del sistema

2   Actualización a Ubuntu 16.04

Veo lo siguiente al conectar a mi servidor ProLiant por SSH:

New release '16.04.5 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Hacemos lo que nos dice: ejecutamos el comando do-release-upgrade, cruzamos los dedos y nos disponemos a esperar.

Obsérvese que estamos acutalizando a la versión 16.04 de Ubuntu, no a la última versión estable disponible.

La actualización, con una conexión a internet decente y una tarjeta microSD de categoría A1, necesita 24 minutos [1]. Este tiempo depende enormemente de la velocidad de la tarjeta microSD. Con una tarjeta clase 10 tardé, en una prueba previa, algo más de dos horas.

El proceso es bastante automático, pero requiere alguna intervención manual de vez en cuando, así que hay que mantener un ojo en esta ventana mientras hacemos otras cosas.

Tras la actualización y el reinicio del servidor ProLiant, conectamos por SSH y vemos lo siguiente:

Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-141-generic x86_64)
[1] (1, 2) Un buen porcentaje de este tiempo es la compilación implícita de los módulos ZFS. La duración de esa parte depende de la potencia de CPU en juego, no de la velocidad de la tarjeta microSD. Mi modelo de servidor ProLiant (HP ProLiant MicroServer Gen8 G1610T 1P 2GB-U B120i NHP SATA Server) tiene una CPU anémica: Dual Core Intel Celeron G1610T a 2.30GHz.

3   Actualización a Ubuntu 18.04

Aunque ahora Ubuntu no nos dice (aún) que hay una actualización disponible, nosotros sabemos que sí la hay. Ejecutamos el comando do-release-upgrade de nuevo.

Con la configuración ya descrita, el proceso tarda 24 minutos [1] otra vez. De nuevo necesitaremos hacer algunas entradas manuales, así que hay que estar atento a la ventana SSH.

Tras la actualización y el reinicio del servidor ProLiant, conectamos por SSH y vemos lo siguiente:

Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-43-generic x86_64)

La cosa tiene buena pinta.

4   Cambios de configuración

La actualización a Ubuntu 18.04 tiene pequeños cambios que no me gustan y que procedo a cambiar.

4.1   Limpieza de paquetes anticuados

Ahora tendremos en el sistema tres kernels distintos, correspondientes a las versiones 14.04, 16.04 y 18.04 de Ubuntu. Eliminamos las versiones anticuadas:

# apt-get remove linux-image-4.4.0-141-generic linux-image-extra-4.4.0-141-generic linux-image-3.13.0-98-generic linux-image-extra-3.13.0-98-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  linux-image-3.13.0-98-generic linux-image-4.4.0-141-generic linux-image-extra-3.13.0-98-generic
  linux-image-extra-4.4.0-141-generic
0 upgraded, 0 newly installed, 4 to remove and 0 not upgraded.
After this operation, 419 MB disk space will be freed.
Do you want to continue? [Y/n] y

Nos ahorramos 419 megabytes en la tarjeta microSD y tiempo de proceso al instalar actualizaciones de kernel debido a la recompilación de los módulos ZFS para todos los kernels presentes en el sistema.

4.2   Con frecuencia no se muestra el menú de arranque GRUB

Por defecto, con esta versión de Ubuntu, no se muestra el menú de arranque GRUB, lo que me resulta desconcertante e inconveniente, sobre todo si estoy entrando a través de iLO de forma remota. De hecho, en las primeras pruebas de esta actualización pensé que el kernel se colgaba en el arranque porque no veía nada en la pantalla.

Prefiero que se muestre siempre el menú GRUB. Para ello:

  1. Editamos el fichero /etc/default/grub. Editamos la línea que pone:

    GRUB_TIMEOUT_STYLE=hidden
    

    y la cambiamos por:

    GRUB_TIMEOUT_STYLE=menu
    
  2. Mientras estoy en ello, aprovecho para bajar el timeout de diez a cinco segundos, cambiando la línea:

    GRUB_TIMEOUT=10
    

    a:

    GRUB_TIMEOUT=5
    
  3. Activamos los cambios con:

    # update-grub
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-4.15.0-43-generic
    Found initrd image: /boot/initrd.img-4.15.0-43-generic
    Found memtest86+ image: /memtest86+.elf
    Found memtest86+ image: /memtest86+.bin
    done
    

4.3   La resolución del terminal es demasiado alta para iLO

En caso de necesidad accedo al servidor ProLiant mediante iLO (a través de mi móvil). La resolución de terminal de Ubuntu 18.04 es de 1024x768, demasiado alta para resultar práctica en la pantalla de mi iPhone 6.

  1. Editamos el fichero /etc/default/grub:

    1. Sustituimos o añadimos (si no existe) la siguiente línea:

      GRUB_GFXPAYLOAD_LINUX=640x480
      
    2. Buscamos la línea que empieza por GRUB_CMDLINE_LINUX_DEFAULT= y le añadimos el parámetro nomodeset. En mi caso, la línea queda:

      GRUB_CMDLINE_LINUX_DEFAULT="splash quiet nomodeset"
      

      De hecho, personalmente prefiero que la carga del sistema sea ruidosa y me vaya mostrando lo que está haciendo en todo momento, así que dejo esa línea como:

      GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
      

      Es decir, no quiero ni el splash ni el quiet.

  2. Activamos los cambios con:

    # update-grub
    Generating grub configuration file ...
    Found linux image: /boot/vmlinuz-4.15.0-43-generic
    Found initrd image: /boot/initrd.img-4.15.0-43-generic
    Found memtest86+ image: /memtest86+.elf
    Found memtest86+ image: /memtest86+.bin
    done
    

Enlaces relevantes:

4.4   Elimino el espacio de SWAP

Aunque soy un gran amante del swap, como regla general no deberíamos hacer swap sobre una tarjeta microSD. Suelen ser lentas y el número de escrituras antes de que falle está limitado. Además, necesito esos 500 MB de espacio que reservé el 2014.

Esta máquina tiene poca RAM, 2GB, pero no necesito más para el uso que le estoy dando ahora mismo.

Los pasos serían los siguientes:

  1. Editamos el fichero /etc/fstab y eliminamos la línea referida al swap. En mi caso es:

    /dev/mapper/csi-swap_1  none  swap  sw  0  0
    

    Esto desactivará el swap en el siguiente reinicio del servidor.

  2. Quiero deshacerme del swap ya, sin reiniciar la máquina primero. Por tanto, desactivo el swap para esta ejecución del sistema operativo:

    # free
                  total        used        free      shared  buff/cache   available
    Mem:        1994812      123496     1696884         748      174432     1725408
    Swap:        511996           0      511996
    # swapoff -a
    # free
                  total        used        free      shared  buff/cache   available
    Mem:        1994812      123944     1696248         748      174620     1724948
    Swap:             0           0           0
    
  3. Destruyo el volumen lógico LVM asociado al swap:

    # pvdisplay
      --- Physical volume ---
      PV Name               /dev/mapper/sda5_crypt
      VG Name               csi
      PV Size               <14.60 GiB / not usable 1.50 MiB
      Allocatable           yes (but full)
      PE Size               4.00 MiB
      Total PE              3736
      Free PE               0
      Allocated PE          3736
      PV UUID               EOEHC1-giJC-wc8u-0ZdX-gTOD-OpaN-98MSgP
    
    # lvdisplay
      --- Logical volume ---
      LV Path                /dev/csi/root
      LV Name                root
      VG Name                csi
      LV UUID                Y6uCXK-4kpb-YM4b-SmIk-0fxe-MqkB-27UfgW
      LV Write Access        read/write
      LV Creation host, time ,
      LV Status              available
      # open                 1
      LV Size                <14.11 GiB
      Current LE             3611
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:1
    
      --- Logical volume ---
      LV Path                /dev/csi/swap_1
      LV Name                swap_1
      VG Name                csi
      LV UUID                aldOiP-lD22-0k4F-4nek-rfHf-SAlP-8pdjx1
      LV Write Access        read/write
      LV Creation host, time ,
      LV Status              available
      # open                 0
      LV Size                500.00 MiB
      Current LE             125
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:2
    
    # lvremove /dev/csi/swap_1
    Do you really want to remove and DISCARD active logical volume csi/swap_1? [y/n]: y
      Logical volume "swap_1" successfully removed
    # pvdisplay
      --- Physical volume ---
      PV Name               /dev/mapper/sda5_crypt
      VG Name               csi
      PV Size               <14.60 GiB / not usable 1.50 MiB
      Allocatable           yes
      PE Size               4.00 MiB
      Total PE              3736
      Free PE               125
      Allocated PE          3611
      PV UUID               EOEHC1-giJC-wc8u-0ZdX-gTOD-OpaN-98MSgP
    

    Aquí destruimos el volumen lógico del swap y vemos que su espacio ha quedado libre y disponible para el uso de LVM.

  4. Limpieza en la configuración de initramfs.

    Aunque no es inmediatamente obvio, cuando más adelante se regenere el initramfs veremos avisos como este:

    W: initramfs-tools configuration sets RESUME=/dev/mapper/csi--vg-swap_1
    W: but no matching swap device is available.
    

    Para solucionarlo:

    1. Dado que esta máquina no hiberna, simplemente borramos el fichero /etc/initramfs-tools/conf.d/resume.
    2. Regeneramos el initramfs.

    Es decir:

    # rm /etc/initramfs-tools/conf.d/resume
    # update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-4.15.0-43-generic
    

    Vemos que ya no sale ningún aviso.

4.5   A start job is running for dev-disk-by/label-KEYS:-z-dkeyfile.device

Durante el arranque del sistema tendremos una pausa de minuto y medio con el siguiente mensaje: "A start job is running for dev-disk-by/label-KEYS:-z-dkeyfile.device". Tras esa espera, el arranque continúa con normalidad y todo funciona a la perfección.

Se trata de un problema conocido, tal y como se documenta, por ejemplo, en:

Es una pena que, tratándose de un problema conocido, no se haya solucionado aún.

Este bug incrementa mi tiempo de arranque en minuto y medio. Los servidores ProLiant ya son tremendamente lentos a la hora de arrancar, así que de momento prefiero no hacer ningún workaround y simplemente soportarlo sin más. De momento.

Se trata de algo a reevaluar en el futuro.

4.6   Restos de mezcla de versiones ZFS

Tendríamos que haber desinstalado ZFS antes de proceder a la actualización de Ubuntu, pero no lo hemos hecho, así que acabamos con versiones mezcladas de ZFS en el sistema operativo:

# apt-cache show zfsutils | grep Version
Version: 0.6.5.11-1~trusty
# journalctl -b|grep -i zfs
Dec 27 18:23:04 csi systemd[1]: Starting Install ZFS kernel module...
Dec 27 18:23:06 csi systemd[1]: Started Install ZFS kernel module.
Dec 27 18:23:06 csi kernel: ZFS: Loaded module v0.7.5-1ubuntu16.4, ZFS pool version 5000, ZFS filesystem version 5
Dec 27 18:23:06 csi systemd[1]: Reached target ZFS pool import target.
Dec 27 18:23:06 csi systemd[1]: Starting Mount ZFS filesystems...
Dec 27 18:23:06 csi systemd[1]: Started Mount ZFS filesystems.
Dec 27 18:23:07 csi systemd[1]: Started ZFS Event Daemon (zed).
Dec 27 18:23:07 csi zed[744]: ZFS Event Daemon 0.7.5-1ubuntu16.4 (PID 744)
Dec 27 18:23:07 csi systemd[1]: Starting ZFS file system shares...
Dec 27 18:23:07 csi systemd[1]: Started ZFS file system shares.
Dec 27 18:23:08 csi systemd[1]: Reached target ZFS startup target.

Aquí vemos que los paquetes ZFS que tenemos instalados son de la versión 0.6.5.11-1~trusty, provenientes de Ubuntu 14.04, mientras que la versión cargada por el kernel durante el arranque es la 0.7.5-1ubuntu16.4 proveniente de Ubuntu 16.04. Ni rastro del soporte ZFS de Ubuntu 18.04.

Procedo a desinstalar todos los paquetes ZFS:

# apt-get remove libzfs2linux libzpool2linux zfs-zed zfsutils-linux zfs-dkms zfs-doc ubuntu-zfs libzpool2 libzfs2 zfsutils
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libnvpair1linux libuutil1linux
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  libnvpair1 libuutil1 libzfs2 libzfs2linux libzpool2 libzpool2linux ubuntu-zfs zfs-dkms zfs-doc zfs-zed zfsutils zfsutils-linux
0 upgraded, 0 newly installed, 12 to remove and 0 not upgraded.
After this operation, 17.4 MB disk space will be freed.
Do you want to continue? [Y/n] y

Ahora procedemos a instalar la versión de ZFS nativa de Ubuntu 18.04:

# apt-get install zfsutils-linux
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-zed
Suggested packages:
  nfs-kernel-server samba-common-bin zfs-initramfs | zfs-dracut
The following NEW packages will be installed:
  libnvpair1linux libuutil1linux libzfs2linux libzpool2linux zfs-zed zfsutils-linux
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,168 kB of archives.
After this operation, 4,259 kB of additional disk space will be used.
Do you want to continue? [Y/n] y

Aquí veremos que nos entran paquetes cuyo número de versión es del tipo 0.7.5-1ubuntu16.4. Esto es muy desconcertante, porque parecen ser paquetes de Ubuntu 16.04 cuando lo que tengo ahora es Ubuntu 18.04. Sin embargo, parece ser lo normal:

Lo dicho, desconcertante.

En cualquier caso, la versión de ZFS que tenemos por defecto en Ubuntu 18.04 es la 0.7.5. Esa versión se publicó el 19 de diciembre de 2017, lo que sería coherente con su inclusión en Ubuntu 18.04.

4.7   La versión de ZFS en Ubuntu 18.04 no está actualizada

Se ha instalado una nueva versión de ZFS on Linux durante el proceso de actualización. Antes usábamos la versión 0.6.5.11 y Ubuntu 18.04 incluye la versión 0.7.5, como hemos visto en la sección anterior. La versión actual (diciembre de 2018) de ZFS on Linux es la 0.7.12.

Estaría bien poder utilizar la última versión de ZFS on Linux, pero no parece haber forma trivial de hacerlo. Aparentemente hay que enterarse de que hay una versión nueva, descargarla y compilarla. También habrá que recompilar cuando entre una actualización del kernel Ubuntu.

Analizaré la situación en un futuro cercano. De momento puedo ir tirando con la versión 0.7.5.