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

19

Eu tenho um servidor Ubuntu 12.04 sem cabeçote em um datacenter a 1.500 km de distância. Por duas vezes, na reinicialização, o sistema decidiu que tinha que fsck. Infelizmente o Ubuntu rodou o fsck no modo interativo, então eu tive que pedir a alguém no meu datacenter para passar por cima, conectar um console e pressionar a tecla Y. Como configurá-lo para que o fsck seja executado no modo não interativo no momento da inicialização com o sinalizador -y ou -p (também conhecido como -a )?

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

(Para evitar uma sugestão, estou ciente de que posso usar tune2fs -i 0 -c 0 para 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 a perguntas de acompanhamento, aqui estão os detalhes pertinentes do meu / etc / fstab. Eu não acredito que eu editei isso em tudo 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
    
por Nelson 15.06.2012 / 01:44

3 respostas

27

A configuração que estou procurando está em / etc / default / rcS , %código%. Isso significa "reparar automaticamente sistemas de arquivos com inconsistências durante a inicialização" e faz com que o fsck seja executado com o sinalizador FSCKFIX=yes . Foi definido como -y em ambos os meus sistemas Ubuntu.

Mesmo quando definido como no , o fsck de tempo de inicialização ainda é pouco interativo. mountall executa fsck com no , um sinônimo para -a , que significa "corrigir automaticamente qualquer problema no sistema de arquivos que possa ser fixado com segurança sem intervenção humana". Aparentemente -p cai para o modo interativo se houver correções inseguras a serem feitas. Para executar de forma totalmente automática, você precisa de -p ou -y .

Aqui está o bit de código relevante do 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"));
}
    
por Nelson 16.06.2012 / 16:42
1

Verifique se você não possui flags que possam causar isso no fstab e verifique seus scripts de inicialização. (Tente usar seus scripts init para o 'fsck' para descobrir onde ele é usado) Meu sistema executa o 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

Snippet 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
    
por Sepero 15.06.2012 / 03:05
0

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/null para finalizá-lo.

    
por setec 04.02.2018 / 17:14

Tags