Estou perguntando sobre um sistema Debian Wheezy rodando o sysvinit e o ZFS no Linux. Embora meu problema se manifeste com o ZFS, suspeito strongmente que o problema subjacente não seja específico do ZFS.
Por algum motivo, se eu inicializar o sistema normalmente, zfs-import
executará antes cryptdisks-early
durante a seqüência de inicialização do sistema. Isso é um problema, porque tenho pools do ZFS em dispositivos LUKS que depois não são importados porque os dispositivos LUKS ainda não estão disponíveis descriptografados e, como consequência, muitas outras coisas falham porque esperam que as coisas estejam disponíveis no sistema de arquivos que não são.
No entanto, parece que se eu inicializo no modo de usuário único (anexando single
à linha de comando do kernel), cryptdisks-early
é executado antes de zfs-import
do jeito que eu quero.
Não me lembro de nenhum momento recente em que o acima não tenha sido o caso, mas não posso garantir que os serviços não tenham sido iniciados automaticamente na ordem correta ao inicializar normalmente. Acredito que tudo isso começou com uma grande atualização do ZoL para mim, com basicamente novos scripts de inicialização que geraram alguns ajustes, por exemplo, em /etc/insserv.conf.d em comparação com a configuração anterior, mas eu também suspeito que os próprios scripts de init estão bem, apenas que algo sobre a ordem de inicialização fica bagunçado de alguma forma.
Olhando através de /etc/rc?.d, eu encontro em /etc/rcS.d entre muitos outros:
S10cryptdisks-early
S11zfs-import
S12cryptdisks
Nao parece que tudo deve começar na ordem correta, mas obviamente isso nem sempre acontece.
/etc/insserv.conf.d/zfs-mount
contém $local_fs +zfs
, o que é esperado (a montagem dos sistemas de arquivos ZFS faz parte do fornecimento de local_fs
). Observe que no ZFS, import e mount são duas operações distintas, em que a importação acontece antes da montagem. (É possível importar um pool do ZFS sem montar nenhum de seus sistemas de arquivos, mas não montar nenhum sistema de arquivos ZFS sem ter importado o pool no qual o sistema de arquivos está armazenado. Normalmente, e no meu sistema, os sistemas de arquivos ZFS são montados automaticamente quando o pool é importado.)
Como uma solução alternativa para garantir que o sistema seja inicializado de forma limpa, eu editei /etc/init.d/zfs-import
para iniciar manualmente cryptdisks-early
antes de prosseguir no do_start. No entanto, prefiro atingir o mesmo objetivo fixando algumas configurações (que eu suspeito serem possíveis).
Eu não consigo encontrar nada específico sobre a ordem relativa de zfs-import
e cryptdisks-early
, mas eu poderia estar ignorando algo óbvio lá.
Eu quero garantir que o sistema consistentemente inicie (e espere que ele comece; pode demorar um pouco) cryptdisks-early
antes tentando iniciar %código%. Quais alterações eu preciso fazer nos arquivos de configuração do sistema?
zfs-import
não lista nada relevante, mas /etc/init.d/.depend.start
menciona ZFS e cryptdisks juntos, como visto neste extrato:
cryptdisks: checkroot.sh cryptdisks-early udev mdadm-raid
cryptdisks-early: checkroot.sh udev mdadm-raid
zfs-mount: mountall.sh mountall-bootclean.sh cryptdisks cryptdisks-early zfs-import
zfs-import: mtab.sh
Então, se eu estou lendo isso corretamente, o zfs-mount depende do zfs-import e do cryptdisks, mas o zfs-import não depende de cryptdisks, então o init está livre para iniciar o zfs-import antes cryptdisks ou até cryptdisks-early. Qual é exatamente o comportamento que estou praticando, mas não o que os nomes de arquivos em /etc/rcS.d parecem indicar.
Terei prazer em fornecer informações adicionais, se necessário; apenas me diga o que pode ser relevante.