¿Cómo depurar un bucle en systemd-shutdown/initrd? (Arco Linux)

¿Cómo depurar un bucle en systemd-shutdown/initrd? (Arco Linux)

Recientemente instalé Arch Linux en un disco virtual, bajo una configuración personalizada para root en ZFS. Esto fue mediante el uso de algunas secuencias de comandos que he creado para administrar una configuración de arranque múltiple, con grupos raíz y de arranque separados, cada uno para usarse tanto para Arch como para FreeBSD. Actualmente, la configuración del grupo ZFS se creó con FreeBSD en una máquina virtual. Luego, la instalación de Arch Linux se creó desde otra VM, donde Arch se instaló en una partición Ext4. Con Arch instalado en la configuración ZFS de inicio/raíz y después de alguna configuración para Grub, la instalación de Arch en ZFS ahora arranca exitosamente.

Actualmente, el disco virtual con los grupos ZFS se ejecuta en una máquina virtual independiente. Arch Linux es el único sistema operativo instalado en el disco virtual de esa máquina en este momento. Ahora arranca correctamente, con la configuración de Grub2 correspondiente. Sin embargo, noto un bucle durante el apagado.

[ 1561.324253] systemd-shutdown[1]: Sending SIGKILL to remaining processes...
[ 1561.336930] systemd-shutdown[1]: Unmounting file systems.
[ 1561.341650] [563]: Remounting '/var' read-only in with options 'noxattr,noacl'.
[ 1561.783555] [564]: Unmounting '/var'.
[ 1561.790194] [565]: Remounting '/usr' read-only in with options 'noxattr,noacl'.
[ 1561.796853] [566]: Remounting '/' read-only in with options 'noxattr,noacl'.
[ 1561.803420] systemd-shutdown[1]: All filesystems unmounted.
[ 1561.809423] systemd-shutdown[1]: Deactivating swaps.
[ 1561.813672] systemd-shutdown[1]: All swaps deactivated.
[ 1561.818688] systemd-shutdown[1]: Detaching loop devices.
[ 1561.824354] systemd-shutdown[1]: All loop devices detached.
[ 1561.829085] systemd-shutdown[1]: Stopping MD devices.
[ 1561.833346] systemd-shutdown[1]: All MD devices stopped.
[ 1561.837982] systemd-shutdown[1]: Detaching DM devices.
[ 1561.842299] systemd-shutdown[1]: All DM devices detached.
[ 1561.847501] systemd-shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[ 1561.856852] systemd-shutdown[1]: Successfully changed into root pivot.
[ 1561.863478] systemd-shutdown[1]: Returning to initrd...
[ 1562.306958] shutdown[1]: Syncing filesystems and block devices.
[ 1562.311377] shutdown[1]: Sending SIGTERM to remaining processes...
[ 1562.316903] shutdown[1]: Sending SIGKILL to remaining processes...
[ 1562.329374] shutdown[1]: Unmounting file systems.
[ 1562.334319] sd-remou[569]: Remounting '/' read-only in with options 'noxattr,noacl'.
[ 1562.346902] sd-umoun[570]: Unmounting '/oldroot/sys/kernel/config'.
[ 1562.354595] sd-umoun[571]: Unmounting '/oldroot/sys/fs/fuse/connections'.
[ 1562.361525] sd-umoun[572]: Unmounting '/oldroot/sys/kernel/tracing'.
[ 1562.368232] sd-umoun[573]: Unmounting '/oldroot/sys/kernel/debug'.
[ 1562.373715] sd-umoun[574]: Unmounting '/oldroot/dev/mqueue'.
[ 1562.380105] sd-umoun[575]: Unmounting '/oldroot/dev/hugepages'.
[ 1562.386843] sd-umoun[576]: Unmounting '/oldroot/sys/fs/bpf'.
[ 1562.391984] sd-umoun[577]: Unmounting '/oldroot/sys/fs/pstore'.
[ 1562.397417] sd-umoun[578]: Unmounting '/oldroot/sys/fs/cgroup'.
[ 1562.404234] audit: type=1334 audit(1635363440.667:81): prog-id=8 op=UNLOAD
[ 1562.410100] sd-umoun[579]: Unmounting '/oldroot/dev/pts'.
[ 1562.414579] audit: type=1334 audit(1635363440.667:82): prog-id=6 op=UNLOAD
[ 1562.420101] sd-umoun[580]: Unmounting '/oldroot/dev/shm'.
[ 1562.426852] sd-umoun[581]: Unmounting '/oldroot/sys/kernel/security'.
[ 1562.432165] sd-umoun[582]: Unmounting '/oldroot/usr'.
[ 1562.443869] sd-remou[583]: Remounting '/oldroot/run' read-only in with options 'noxattr,noacl'.
[ 1562.456905] sd-umoun[584]: Unmounting '/oldroot/run'.
[ 1562.461323] sd-umoun[585]: Unmounting '/oldroot'.
[ 1562.466800] sd-umoun[585]: Failed to unmount /oldroot: Device or resource busy
[ 1562.473458] sd-umoun[586]: Unmounting '/oldroot/dev'.
[ 1562.478395] sd-umoun[587]: Unmounting '/oldroot/sys'.
[ 1562.483288] sd-umoun[588]: Unmounting '/oldroot/proc'.
[ 1562.488082] sd-umoun[589]: Unmounting '/oldroot'.
[ 1562.493279] shutdown[1]: All filesystems unmounted.
[ 1562.498851] shutdown[1]: Deactivating swaps.
[ 1562.502456] shutdown[1]: All swaps deactivated.
[ 1562.506839] shutdown[1]: Detaching loop devices.
[ 1562.511505] shutdown[1]: All loop devices detached.
[ 1562.515404] shutdown[1]: Stopping MD devices.
[ 1562.520083] shutdown[1]: All MD devices stopped.
[ 1562.523666] shutdown[1]: Detaching DM devices.
[ 1562.527617] shutdown[1]: All DM devices detached.
[ 1562.531822] shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[ 1562.540145] shutdown[1]: Successfully changed into root pivot.
[ 1562.544940] shutdown[1]: Returning to initrd...

Solo encontré esto con la instalación de Arch Linux en ZFS. Al usar las mismas versiones de systemd, mkinitcpio, linux y zfs-linux en otra instalación de VM, con Arch en una partición Ext4 allí, no se produce tal bucle durante el apagado de esa máquina. ¿Puede deberse a la raíz en la configuración de ZFS?

No puedo intentar descubrir cómo depurar más este bucle.

En mi opinión, esto puede estar relacionado con algunas secuencias de comandos para systemd-shutdown en mkinticpio, como las que se introdujeron en 2013 (Bachler2013).

Lo que parece ser el código principal del mkinitcpio-generate-shutdown-ramfsservicio, introducido en esa época: un extracto de/usr/lib/systemd/system/mkinitcpio-generate-shutdown-ramfs.service

[Service]
Type=oneshot
# /tmp could be umounted at this point
# use /run as temporary directory
Environment=TMPDIR=/run
ExecStart=/usr/bin/mkinitcpio -A sd-shutdown -k none -c /dev/null -d /run/initramfs

Además, el contenido del expediente/usr/lib/initcpio/install/sd-shutdown

#!/bin/bash

build() {
    add_binary /usr/lib/systemd/systemd-shutdown /shutdown

    if type -P kexec >/dev/null; then
        add_binary kexec
    fi
}

help() {
    cat <<HELPEOF
This hook adds systemd-shutdown to the initramfs. This is only
if the image is extracted to /run/initramfs before shutdown.
HELPEOF
}

# vim: set ft=sh ts=4 sw=4 et:

No estoy seguro de si eso realmente llega al proceso de apagado de la máquina virtual; es posible que el sistema no cumpla con las condiciones previas establecidas para tanto.

Intenté enmascarar el mkinitcpio-generate-shutdown-ramfsservicio en systemd, luego ejecutarlo mkinitcpio -Pnuevamente, reiniciar... y todavía entra en ese bucle durante el apagado del sistema.

El sistema todavía se puede utilizar bajo la instalación de VM, al menos, hasta el momento del apagado, cuando la máquina comienza a funcionar en bucle indefinidamente. Idealmente, me gustaría poder solucionar este nudo de la configuración, antes de instalar cualquier cosa además de Arch o colocarlo en el disco duro interno de una máquina.

No estoy seguro de cuál puede ser el resultado del mensaje Failed to unmount /oldroot: Device or resource busy. ¿Puede ser algo relacionado con la raíz en la instalación de ZFS? Pero eso es sólo una suposición, en realidad.

Desde mi punto de vista, el proceso de apagado de systemd: ¿se está ejecutando bajo initrd, según lo que dice la salida de la consola? Creo que no parece trivial depurar en este punto.

Estoy seguro de que podría continuar usando Arch para mantener actualizada la configuración de Grub, después de instalar FreeBSD junto a Arch, en la configuración del grupo ZFS en el disco virtual de la VM. Sin embargo, si es posible solucionar este problema con el ciclo de apagado en Arch, me gustaría poder mantener la instalación de Arch como un sistema de escritorio en funcionamiento, en la instalación de VM o, finalmente, en el disco duro de la PC.

Si bien no puedo intentar descubrir cómo depurar más este bucle, para ese bucle durante el apagado, ¿tal vez haya un parche que aún no he encontrado?

Actualizar

He encontradocódigo fuentepara systemd-shutdown, en la versión en uso en Arch Linux. Creo que parece un código bastante sencillo. Puede que no haya mucho sobre el punto de montaje 'oldroot', o cómo podría volverse desmontable bajo systemd-shutdown.

No parece deberse al registro. Configuré y Storage=volatilecreé /etc/systemd/journald.confun servicio systemd oneshot que se ejecuta /usr/bin/journalctl --flushdespués del arranque. El /var/sistema de archivos se desmonta con éxito ahora y no creo que esté perdiendo todos los datos de registro al reiniciar.

Sin embargo, el bucle sigue ocurriendo durante el apagado, junto con el mensaje Failed to unmount /oldroot...de systemd-shutdown. ¿Hay algo que lo cuelgue por efecto secundario?

información relacionada