Após um pouco de investigação, descobri que o problema estava no systemd-fsckd
service, do pacote systemd
. No momento em que escrevo, as versões disponíveis em astuto e xenial parecem conter o código incorreto ( 225-1ubuntu9
e 229-4ubuntu4
, respectivamente).
Solução
Como o serviço não é necessário para o funcionamento correto do sistema, uma solução direta é apenas desabilitá-lo executando este comando:
systemctl mask systemd-fsckd.service systemd-fsckd.socket
A desvantagem é que agora o Plymouth não reportará fsck
progress. Na verdade, nem sequer informará ao usuário que uma verificação do sistema de arquivos está em andamento.
Explicação
Um pouco da história da man
página do serviço :
systemd-fsckd.service é um serviço responsável por receber o progresso da verificação do sistema de arquivos e por comunicar alguns dados consolidados ao console e ao plymouth (se estiver em execução). Também lida com possíveis cancelamentos de cheques.
systemd-fsckd recebe mensagens sobre o progresso da verificação do sistema de arquivos de fsck através de um soquete de domínio [...] UNIX
O problema com esse serviço é que ele usa um tempo limite fixo de 30 segundos ao fazer um epoll_wait
no soquete para informações de progresso. Se fsck
não relatar o progresso em menos de 30 segundos, então systemd-fsckd
fecha o soquete e sai com sucesso sem registrar nada até onde eu podia ver.
A próxima vez que fsck
escrever no soquete (agora fechado) para relatar o progresso, ele morrerá com SIGPIPE
. Como fsck
nunca termina, a contagem de montagem não é reiniciada.