Backup doméstico seguro con Linux, cifrado y ZFS (VII): Actualización y reconfiguración del sistema
Contenido
- 1 Pasos previos
- 2 Actualización a Ubuntu 16.04
- 3 Actualización a Ubuntu 18.04
-
4 Cambios de configuración
- 4.1 Limpieza de paquetes anticuados
- 4.2 Con frecuencia no se muestra el menú de arranque GRUB
- 4.3 La resolución del terminal es demasiado alta para iLO
- 4.4 Elimino el espacio de SWAP
- 4.5 A start job is running for dev-disk-by/label-KEYS:-z-dkeyfile.device
- 4.6 Restos de mezcla de versiones ZFS
- 4.7 La versión de ZFS en Ubuntu 18.04 no está actualizada
- 5 Transferencia del servicio de la microSD de 16GB a la de 4GB
1 Pasos previos
Continuamos donde lo habíamos dejado en Backup doméstico seguro con Linux, cifrado y ZFS (VII): Cambio de tarjeta microSD y redimensionamiento LUKS/LVM/FS.
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.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.
-
Editamos el fichero /etc/default/grub:
-
Sustituimos o añadimos (si no existe) la siguiente línea:
GRUB_GFXPAYLOAD_LINUX=640x480
-
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.
-
-
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:
-
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.
-
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
-
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.
-
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:
- Dado que esta máquina no hiberna, simplemente borramos el fichero /etc/initramfs-tools/conf.d/resume.
- 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:
- Install ZFS File System on Ubuntu 18.04 LTS.
- En Software Packages in "bionic", Subsection kernel vemos que la versión de ZFS es la 0.7.5.
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.
5 Transferencia del servicio de la microSD de 16GB a la de 4GB
La justificación y el proceso se describen en Backup doméstico seguro con Linux, cifrado y ZFS (VII): Volvemos a la tarjeta microSD original.