¿Por qué mi diario systemd no es persistente en todos los reinicios?

8

Estoy experimentando un problema muy extraño con una nueva imagen de Fedora 21 en una instancia de Linode. No puedo reproducirlo fuera de Linode. El problema es que mi diario systemd no es persistente en todos los reinicios. De acuerdo con la documentación :

Por defecto, el diario almacena datos de registro en / run / log / journal /. Como / run / es volátil, los datos de registro se pierden al reiniciar. Para que los datos sean persistentes, es suficiente crear / var / log / journal / donde systemd-journald almacenará los datos.

Verifiqué que / var / log / journal existe y también lo configuré Storage=persistenten /etc/systemd/journald.conf. El directorio de registro contiene un montón de datos:

$ du -sh /var/log/journal/
89M /var/log/journal/

Sin embargo, el diario solo contiene entradas de registro desde el último reinicio del sistema:

$ journalctl --list-boots
 0 9f6a5a789dd64ec0b067140905e6da86 Thu 2015-03-19 15:08:48 GMT—Thu 2015-03-19 22:14:37 GMT

Incluso si journalctl --flushantes de reiniciar los registros se pierden. Sospecho que esto es un problema con la imagen Fedora 21 de Linode, y he abierto un ticket de soporte con ellos. Mientras tanto, sigo buscando la causa de este problema.

¿Cómo puedo depurar esto? Que podria causar esto? ¿Qué puedo hacer para arreglar esto?

hedgie
fuente

Respuestas:

14

La razón de este comportamiento es que el identificador de la máquina /etc/machine-idcambia en cada reinicio. Esto inicia un nuevo directorio de registro en /var/log/journal. Los registros antiguos se pueden ver con el siguiente comando:

journalctl --merge

Todavía estoy investigando la causa del cambio de ID de máquina. El soporte de Linode es consciente del problema. Actualizaré esta respuesta cuando sepa más.


ACTUALIZACIÓN: la causa raíz del problema es simplemente que Linode redujo a cero el contenido de /etc/machine-idsus imágenes del sistema de archivos. El resultado es la siguiente cadena de eventos:

  1. El kernel carga y monta el sistema de archivos raíz de solo lectura
  2. systemd, ejecutado desde el disco RAM inicial, intenta leer /etc/machine-iddesde el sistema de archivos raíz (el archivo existe pero no tiene contenido)
  3. systemd no puede leer el identificador de la máquina, pero tampoco puede escribir uno nuevo ya que el sistema de archivos raíz está montado de solo lectura
  4. systemd monta tmpfsen /etc/machine-id(Sí, al parecer, se puede montar un sistema de archivos en un archivo )
  5. systemd invoca systemd-machine-id-setup que genera una identificación de máquina aleatoria y la almacena en el ahora volátil/etc/machine-id
  6. El sistema arranca con un identificador de máquina volátil.

Puede verificar si su sistema tiene una identificación de máquina volátil, en lugar de permanente, mirando la salida de mount:

$ mount | grep machine-id
tmpfs on /etc/machine-id type tmpfs (ro,mode=755)

El problema es fácil de solucionar: simplemente escriba una identificación de máquina persistente en el real /etc/machine-id . Sin embargo, esto es más fácil decirlo que hacerlo, porque no se puede desmontar tmpfsdesde /etc/machine-idun sistema en ejecución. Estos son los pasos que tomé para solucionarlo en Linode:

  1. cp /etc/machine-id /etc/machine-id.copy, luego apague el sistema
  2. En el Administrador de Linode, vaya a la pestaña Rescate y arranque en modo de rescate
  3. Acceda al sistema a través de la consola Lish
  4. Montar el sistema de archivos raíz: mount /dev/xvda /mnt
  5. Mueva la copia creada en el paso 1 al ID de máquina real: mv /etc/machine-id.copy /etc/machine-id
  6. Reiniciar

Tales son las consecuencias de una falta de identificación de la máquina en el arranque. Espero que esto ayude a un transeúnte aleatorio en el futuro.

hedgie
fuente
55
Puede cambiar / etc / machine-id sin rescate / reinicio utilizando un montaje de enlace de /:mkdir /tmp/mnt; mount --bind / /tmp/mnt; cp -a /etc/machine-id /tmp/mnt/etc/; umount /tmp/mnt
rudimeier