No systemd atual (218 no momento da escrita), uma entrada em /etc/crypttab
resulta em uma instância da unidade [email protected]
sendo gerada pelo systemd-cryptsetup-generator
que o systemd executa quando o sistema está inicializando. / p>
A unidade gerada inclui uma dependência no caminho para o arquivo de chaves:
RequiresMountsFor=/path/to/key_file
Esse tipo de dependência é documentada em man systemd.unit
, onde explica que isso resulta em Requires=
e After=
dependencies para todas as montagens necessárias para acessar o caminho especificado.
A dependência Requires=
faz com que o systemd pare a unidade cryptsetup se a unidade de montagem estiver desativada.
Isso significa que a desmontagem do dispositivo que contém a chave indica a desativação da unidade cryptsetup e bloqueia o volume quando isso ocorre.
A única alternativa possível no momento é não usar /etc/crypttab
para quaisquer volumes em que isso possa ser um problema, mas fornecer uma unidade personalizada que não inclua uma RequiresMountsFor=
de dependência. . Aqui está uma unidade personalizada adequada que é baseada na unidade produzida pelo gerador:
# /etc/systemd/system/systemd-cryptsetup\@.service
[Unit]
Description=Cryptography Setup for %I
Documentation=man:crypttab(5) man:systemd-cryptsetup-generator(8) man:[email protected](8)
DefaultDependencies=no
Conflicts=umount.target
BindsTo=dev-mapper-%i.device
IgnoreOnIsolate=true
After=cryptsetup-pre.target
Before=cryptsetup.target
BindsTo=dev-lvmvg-%i.device
After=dev-lvmvg-%i.device
Before=umount.target
[Service]
Type=oneshot
RemainAfterExit=yes
TimeoutSec=0
ExecStart=/usr/lib/systemd/systemd-cryptsetup attach '%i' '/dev/lvmvg/%i' '/root/keyring/%i.key' 'header=/root/keyring/%i.hdr'
ExecStop=/usr/lib/systemd/systemd-cryptsetup detach '%i'
[Install]
WantedBy=dev-mapper-%i.device
Este exemplo seria usado em vez deste /etc/crypttab
entry:
# <name> <device> <password> <options>
mail /dev/lvmvg/mail /root/keyring/mail.key header=/root/keyring/mail.hdr
Este problema foi levantado com os desenvolvedores do systemd e foi adicionado ao Lista TODO .