Estou tentando usar systemd-tmpfiles para gerenciar arquivos no "disco temporário" de uma VM Linux (CentOS Stream 8) no Azure. A systemd-tmpfiles
configuração parece estar correta, conforme julgado pela execução systemd-tmpfiles --create
manual quando o sistema está ativo. No entanto, ele não está funcionando com o systemd-tmpfiles-setup
serviço, pois esse serviço cria os arquivos no diretório do ponto de montagem em vez de no sistema de arquivos montado. Claro, isso discute todo o exercício.
Presumo que isso esteja acontecendo porque systemd-tmpfiles-setup
é executado antes da montagem do disco temporário, então tentei resolvê-lo aplicando uma RequiresMountsFor
propriedade por meio de uma substituição de configuração:
/etc/systemd/system/systemd-tmpfiles-setup.service.d/override.conf
[Unit]
RequiresMountsFor=/mnt/resource
O Systemd parece reconhecer isso, conforme julgado pela systemctl list-dependencies systemd-tmpfiles-setup
lista da unidade de montagem apropriada, mas na reinicialização, ele ainda cria os arquivos desejados no diretório do ponto de montagem em vez de no disco temporário montado.
Possivelmente é relevante que a unidade de montagem desejada não tenha um arquivo de unidade explícito; Estou contando com o systemd para gerar a unidade digitalizando /etc/fstab
, como de fato parece estar fazendo.
/etc/fstab :
# ...
/dev/disk/cloud/azure_resource-part1 /mnt/resource auto defaults,nofail,x-systemd.requires=cloud-init.service,comment=cloudconfig 0 2
o que estou perdendo? Existe uma boa razão para que o que estou fazendo não funcione?
Claro, assim que postei a pergunta, descobri a resposta. Estas entradas do log do sistema explicam o que está acontecendo:
(Não registrado: sysinit.target depende de systemd-tmpfiles-setup.service.)
O Systemd quebra o ciclo ignorando o requisito de substituição, o que é o melhor. Portanto, se eu quiser fazer isso com systemd-tmpfiles (e eu faço), precisarei acioná-lo separadamente de
systemd-tmpfile-setup
. Provavelmente adicionarei um serviço personalizado separado.