Em qual unidade de comando / systemd do zfs depende para garantir que um ponto de montagem esteja disponível?

2

Gostaria de ter certeza de que um ponto de montagem do ZFS esteja disponível antes que o serviço gerenciado por systemd seja iniciado. Portanto, eu usaria a sub-rotina After= na unidade systemd . Mas, o que escrever como argumento?

Estou usando uma instalação local do ZFS devido a problemas de desempenho contínuos com a versão enviada e importo o único pool com

[Unit]
Description=ZFS pool import for source installations of ZFS
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/zpool import -d /dev data

[Install]
WantedBy=multi-user.target

porque eu nunca encontrei nenhuma documentação útil do systemd no Ubuntu e ele parece ser alvo de desenvolvedores agora .

No entanto, em outro sistema, também tenho problemas com os recursos internos, por exemplo, zfs-mount.service é carregado e executado mesmo se nenhum conjunto for importado e, portanto, nenhuma montagem poderia ter sido bem-sucedida.

Existe um destino do qual eu posso fazer com que meus serviços dependam para iniciar somente depois que o ponto de montagem estiver disponível e se recusar a iniciar se todo o ZFS ou apenas o ponto de montagem falharem ao inicializar (e eu puder copiar para minha instalação local )?

Estou usando o Ubuntu 17.10.

    
por Karl Richter 23.12.2017 / 16:56

1 resposta

0

Padrões do sistema

Há muita mágica aqui, mas no Ubuntu 18.04 a resposta geralmente parece ser zfs.target , que está listada como WantedBy de todos os vários zfs-*.service s (mount, modprobe, etc.). Você vai ver isso se você ler através de

more /lib/systemd/system/zfs* | less

Você pode notar que há também um zfs-import.target que é satisfeito depois que zpool import foi executado, mas antes que os sistemas de arquivos sejam montados.

No meu caso, no entanto, há outras etapas que precisam acontecer primeiro (mapeamento de dispositivo de bloco criptografado, por exemplo), de modo que elas não funcionem fora da caixa para mim.

Pontos de montagem específicos

Para pontos de montagem específicos, eu recomendaria não confiar no zfs.target geral, mas sim adicionar seu próprio serviço (talvez com Wants=zfs.target ) que verifica o status das montagens específicas nas quais seu sistema confia. Por exemplo, se você confiar em /blah/my/zfs/mount sendo montado, basta criar um serviço para o que pode verificar o status de montagem do zfs antes de retornar, talvez com

zfs get mounted blah/my/zfs/mount | grep yes

Exemplo

/etc/systemd/system/my-zfs-mount.service

[Unit]
Description=ZFS mount blah/my/zfs/mount
Wants=zfs.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/sbin/zfs get mounted blah/my/zfs/mount | grep yes

[Install]
WantedBy=multi-user.target

E os seus outros serviços podem depender deste.

    
por banzaimonkey 16.07.2018 / 04:45