Eu tenho uma máquina virtual rápida e o serviço systemd systemd-zserdbd.service
falha com
Dec 01 17:45:32 server-new systemd[1]: Starting systemd-remount-fs.service...
...
Dec 01 17:45:32 server-new (-userdbd)[183]: systemd-userdbd.service: Failed at step NAMESPACE spawning /usr/lib/systemd/systemd-userdbd: Read-only file system
Dec 01 17:45:32 server-new (-userdbd)[185]: systemd-userdbd.service: Failed at step NAMESPACE spawning /usr/lib/systemd/systemd-userdbd: Read-only file system
Dec 01 17:45:32 server-new systemd[1]: Started systemd-journald.service.
Dec 01 17:45:32 server-new (-userdbd)[186]: systemd-userdbd.service: Failed at step NAMESPACE spawning /usr/lib/systemd/systemd-userdbd: Read-only file system
Dec 01 17:45:32 server-new (-userdbd)[187]: systemd-userdbd.service: Failed at step NAMESPACE spawning /usr/lib/systemd/systemd-userdbd: Read-only file system
Dec 01 17:45:32 server-new (-userdbd)[188]: systemd-userdbd.service: Failed at step NAMESPACE spawning /usr/lib/systemd/systemd-userdbd: Read-only file system
...
Dec 01 17:45:32 server-new systemd-fsck[180]: /usr/bin/fsck.xfs: XFS file system.
Dec 01 17:45:32 server-new systemd[1]: Finished systemd-remount-fs.service.
...
Dec 01 17:45:32 server-new systemd[1]: Reached target local-fs-pre.target.
...
Dec 01 17:45:33 server-new systemd[1]: Reached target local-fs.target.
O erro é bastante óbvio: systemd-userdbd.service
requer um sistema de arquivos raiz gravável, mas é iniciado antes que o sistema de arquivos seja remontado como gravável.
Portanto, eu queria adicionar a dependência necessária via systemctl edit systemd-userdbd.service --drop-in=wait-for-rw-root
with
[Unit]
Wants=local-fs.target
After=systemd-userdbd.socket systemd-remount-fs.service local-fs.target
Mas isso parece criar uma dependência circular no momento da inicialização. A remontagem dos sistemas de arquivos leva uma eternidade até que o systemd atinja o tempo limite.
- Como posso garantir que isso
systemd-userdbd.service
seja iniciado depois que o sistema de arquivos raiz se tornar gravável sem criar uma dependência circular? - (Uma questão mais geral) Como analiso o que cria a dependência circular?
Faça com que seu initramfs (ou o kernel) monte o sistema de arquivos como leitura e gravação imediatamente, sem passar pela dança "ro-fsck-remount-rw". Ou seja, inicialize com a
rw
opção do kernel em vez dero
.(Normalmente, o primeiro passo seria garantir que seu initramfs tenha 'fsck' incluído, mas no seu caso 'fsck.xfs' não faz literalmente mais nada, exceto imprimir a mensagem, então você ficará bem sem ele.)
systemctl list-dependencies --after
deveria mostrar isso.O Systemd imprimirá cada componente de um loop de pedido no diário. Faça login como root e verifique
journalctl -b
"deleted to break ordering cycle
".Eu finalmente encontrei a solução sozinho.
systemd-userdbd.socket
gatilhossystemd-userdbd.service
. Conseqüentemente, a solução foi colocar as dependências adicionais nassystemd-userdbd.socket
quais atrasa a ativação do soquete e, por sua vez, também atrasa o serviço correspondente.Criei um drop-in via
systemctl edit systemd-userdbd.socket --drop-in=wait-for-rw-root
com o seguinte conteúdoMas basicamente é um bug upstream, pois o serviço requer um root fs gravável, mas não consegue adicioná-lo aos seus requisitos.