Pedro !
Vamos desfazer algumas coisas.
-
Volta o shutdown.target pro original, deletando as linhas
Requires=pedro_pre_tmpfs.service
After=pedro_pre_tmpfs.service
-
desabilita o serviço “pre”
systemctl disable pedro_pre_tmpfs.service
Agora vem o pulo do gato.
Edita o finalrd.service e inclui uma linha chamando o script do “pre”.
Acho que fica assim.
[Unit]
Description=Create final runtime dir for shutdown pivot root
Documentation=man:finalrd(1)
After=local-fs.target boot.mount boot.automount
Wants=local-fs.target
Conflicts=shutdown.target umount.target
DefaultDependencies=No
[Service]
RemaiAfterExit=yes
Type=oneshot
ExecStart=/bin/true
ExecStop=/home/pedro/shut/pre_tmpfs.sh
ExecStop=/usr/bin/finalrd
[Install]
WantedBy=sysinit.target
Claro, o primeiro ExecStop tem que refletir o caminho que você usou pro script.
OBS : Esse é meu finalrd.service original. Só tem a mais a linha
ExecStop=/home/pedro/shut/pre_tmpfs.sh
Se o teu estiver diferente, só adiciona a linha sem alterar mais nada.
Feito tudo, vamos dar o reload
systemctl daemon-reload
Se eu não estiver enganado, isso deve garantir as condições que queremos.
ALTERNATIVA
EDITADO porque esta foi escolhida como solução e pode não estar muito claro para novos visitantes a forma de resolver
O problema consiste no fato de que a criação da initramfs (que ocorre no final do shutdown) pode ser corrompida quando executa em paralelo com a desativação da área de swap, fazendo com que alguns links não sejam devidamente inseridos na imagem.
Uma maneira de forçar que as operações ocorram em sequência, é editando o arquivo /lib/systemd/system/finalrd.service e garantindo que a área de swap esteja desativada antes da criação da initram. Isso pode ser alcançado inserindo-se a linha
ExecStop=/sbin/swapoff -a
logo antes da linha
ExecStop=/usr/bin/finalrd