Por que meu diário systemd não é persistente durante as reinicializações?

8

Estou tendo um problema muito estranho com uma nova imagem do Fedora 21 em uma instância do Linode. Não consigo reproduzi-lo fora do Linode. O problema é que meu diário systemd não é persistente nas reinicializações. De acordo com a documentação :

Por padrão, o diário armazena dados de log em / run / log / journal /. Como / run / é volátil, os dados do log são perdidos na reinicialização. Para tornar os dados persistentes, é suficiente criar / var / log / journal / onde systemd-journald armazenará os dados.

Eu verifiquei se o / var / log / journal existe e também configurei Storage=persistentno /etc/systemd/journald.conf. O diretório de log contém um monte de dados:

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

O diário, no entanto, contém apenas entradas de log desde a última reinicialização do sistema:

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

Mesmo se eu journalctl --flushantes de reiniciar, os logs são perdidos. Suspeito que este seja um problema com a imagem do Fedora 21 do Linode e abri um tíquete de suporte com eles. Enquanto isso, continuo pesquisando a causa desse problema.

Como posso depurar isso? O que poderia causar isso? Oque posso fazer para consertar isso?

hedgie
fonte

Respostas:

14

A razão para esse comportamento é que o identificador da máquina é /etc/machine-idalterado a cada reinicialização. Isso inicia um novo diretório de log em /var/log/journal. Os logs antigos podem ser visualizados com o seguinte comando:

journalctl --merge

Ainda estou investigando a causa da mudança de identificação da máquina. O suporte à Linode está ciente do problema. Atualizarei esta resposta quando souber mais.


ATUALIZAÇÃO - A causa raiz do problema é simplesmente que o Linode zerou o conteúdo de /etc/machine-idsuas imagens do sistema de arquivos. O resultado é a seguinte cadeia de eventos:

  1. O kernel carrega e monta o sistema de arquivos raiz somente leitura
  2. systemd, executado a partir do ramdisk inicial, tenta ler /etc/machine-idno sistema de arquivos raiz (o arquivo existe, mas possui zero conteúdo)
  3. O systemd não pode ler o identificador da máquina, mas também não pode escrever um novo, pois o sistema de arquivos raiz é montado como somente leitura
  4. montagens Systemd tmpfssobre /etc/machine-id(sim, aparentemente, você pode montar um sistema de arquivos em um arquivo )
  5. systemd chama systemd-machine-id-setup que gera um id de máquina aleatório e o armazena no diretório agora volátil/etc/machine-id
  6. O sistema inicializa com um identificador de máquina volátil

Você pode verificar se o seu sistema possui um ID de máquina volátil, e não permanente, observando a saída de mount:

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

O problema é fácil de resolver: basta escrever um ID de máquina persistente no real /etc/machine-id . Isso é mais fácil dizer do que fazer, no entanto, porque você não pode desmontar tmpfsde /etc/machine-idum sistema em execução. Estas são as etapas que tomei para corrigi-lo no Linode:

  1. cp /etc/machine-id /etc/machine-id.copy, desligue o sistema
  2. No Linode Manager, vá para a guia Rescue e inicialize no modo de recuperação
  3. Acesse o sistema através do console do Lish
  4. Monte o sistema de arquivos raiz: mount /dev/xvda /mnt
  5. Mova a cópia criada na etapa 1 para o ID da máquina real: mv /etc/machine-id.copy /etc/machine-id
  6. Reiniciar

Essas são as consequências de um ID de máquina ausente na inicialização. Espero que isso ajude um transeunte aleatório no futuro.

hedgie
fonte
5
Você pode mudar / etc / máquina-id sem resgate / reboot usando montar um ligamento de /:mkdir /tmp/mnt; mount --bind / /tmp/mnt; cp -a /etc/machine-id /tmp/mnt/etc/; umount /tmp/mnt
rudimeier