Como posso fazer o fsck rodar de maneira não interativa no momento da inicialização?

19

Eu tenho um servidor Ubuntu 12.04 sem cabeça em um datacenter a 1500 milhas de distância. Duas vezes agora, na reinicialização, o sistema decidiu que tinha que fsck. Infelizmente, o Ubuntu executou o fsck no modo interativo, então eu tive que pedir a alguém no meu datacenter para revisar, conectar um console e pressionar a tecla Y. Como faço para configurá-lo para que o fsck seja executado no modo não interativo no momento da inicialização com o sinalizador -you -p(aka -a)?

Se eu entendi o processo de inicialização do Ubuntu corretamente, o init chama o mountall, que por sua vez chama o fsck. No entanto, não vejo nenhuma maneira de configurar como o fsck é chamado. Isso é possível?

(Para evitar uma sugestão; sei que posso usar tune2fs -i 0 -c 0para evitar fscks periódicos. Isso pode ajudar um pouco, mas preciso que o sistema tente voltar, mesmo que tenha um motivo real para fsck, digamos, após uma falha de energia .)

Em resposta às perguntas de acompanhamento, aqui estão os detalhes pertinentes do meu / etc / fstab. Não acredito que tenha editado isso do que o Ubuntu colocou lá.

UUID=3515461e-d425-4525-a07d-da986d2d7e04 /               ext4    errors=remount-ro 0       1
UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot           ext4    defaults        0       2
UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none            swap    sw              0       0
Nelson
fonte
1
Esta pergunta e suas respostas envolventes /etc/default/rcSnão são realmente válidas em 2019, com o Ubuntu 16 e o ​​Ubuntu 18 agora usando o systemd. Não conheço a história completa do systemd, mas a fsck.repairopção de linha de comando de configuração / kernel parece relevante. Os documentos atualmente dizem que seu padrão é preen, o que significa -p. Também pode ser definido como yespara -y. /etc/default/grubpode ser o lugar para definir isso. Ficaria agradecido se alguém com mais conhecimento fornecesse uma resposta moderna do sistema.
Nelson

Respostas:

29

A configuração que eu estou procurando é em / etc / default / rcS , FSCKFIX=yes. Isso significa "reparar automaticamente os sistemas de arquivos com inconsistências durante a inicialização" e faz com que o fsck seja executado com o -ysinalizador. Foi definido noem ambos os meus sistemas Ubuntu.

Mesmo quando definido como no, o tempo de inicialização do fsck ainda é um pouco inativo. mountall executa fsck com -a, um sinônimo para -p, que significa "corrigir automaticamente qualquer problema no sistema de arquivos que possa ser corrigido com segurança sem intervenção humana". Aparentemente, -pcai para o modo interativo se houver correções inseguras a serem feitas. Para executar totalmente automaticamente, você precisa -you FSCKFIX=yes.

Aqui está o trecho de código relevante de mountall.c

if (fsck_fix || mnt->fsck_fix) {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y"));
} else {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a"));
}
Nelson
fonte
Para sistemas operacionais recentes com systemd, o mesmo pode ser alcançado adicionando-se fsck.repair=yesa param GRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grub
Maxxer 9/10
2

Para o Ubuntu 15,16,17+, a configuração do valor FSCKFIX está localizada em lib / init / vars.sh

Pode usar o comando grep -r FSCKFIX * 2>/dev/nullpara encontrá-lo.

setec
fonte
1
Obrigado! Não sou positivo, mas os comentários nesse arquivo sugerem que você ainda deve definir a configuração /etc/default/rcS. /lib/init/vars.shtem um padrão para FSCKFIXmas fontes /etc/default/rcSque podem substituí-lo. OTOH, um sistema Ubuntu 18 recém-instalado, não tinha um rcSarquivo.
1819 Nelson Nelson
1

Verifique se você não possui nenhum sinalizador que possa causar isso no fstab e verifique seus scripts de inicialização. (Tente grep'ing seus scripts init para 'fsck' para descobrir onde é usado) Meu sistema executa fsck não interativo, então aqui está uma cópia do meu fstab e parte do meu script / etc / init / mountall para você comparar

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=acbe3514-33a3-4170-b1be-df7b8460a49a /               ext4    errors=remount-ro 0       1
UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home           ext4    defaults        0       2
UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none            swap    sw              0       0

Fragmento de / etc / init / mountall

script
    . /etc/default/rcS
    [ -f /forcefsck ] && force_fsck="--force-fsck"
    [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"

    # set $LANG so that messages appearing in plymouth are translated
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec mountall --daemon $force_fsck $fsck_fix
end script
Sepero
fonte
1
Obrigado pela ajuda. Você poderia me dizer o que grep FSCKFIX /etc/default/rcSdiz no seu sistema?
Nelson