¿Cómo puedo hacer que fsck se ejecute de forma no interactiva al momento del arranque?

19

Tengo un servidor Ubuntu 12.04 sin cabeza en un centro de datos a 1500 millas de distancia. Dos veces ahora al reiniciar el sistema decidió que tenía que fsck. Desafortunadamente, Ubuntu ejecutó fsck en modo interactivo, por lo que tuve que pedirle a alguien en mi centro de datos que revise, conecte una consola y presione la tecla Y. ¿Cómo lo configuro para que fsck se ejecute en modo no interactivo en el momento del arranque con el indicador -yo -p(alias -a)?

Si entiendo el proceso de arranque de Ubuntu correctamente, init invoca mountall que a su vez invoca fsck. Sin embargo, no veo ninguna forma de configurar cómo se invoca fsck. es posible?

(Para evitar una sugerencia; soy consciente de que puedo usarla tune2fs -i 0 -c 0para evitar fscks periódicos. Eso puede ayudar un poco, pero necesito que el sistema intente volver a funcionar incluso si tenía una razón real para fsck, por ejemplo, después de un corte de energía .)

En respuesta a las preguntas de seguimiento, aquí están los detalles pertinentes de mi / etc / fstab. No creo haber editado esto en absoluto de lo que Ubuntu puso allí.

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
fuente
1
Esta pregunta y sus respuestas involucradas /etc/default/rcSno son realmente válidas en 2019, con Ubuntu 16 y Ubuntu 18 ahora usando systemd. No conozco la historia completa de systemd, pero la fsck.repairopción de línea de comando de configuración / kernel parece relevante. Los documentos actualmente dicen que su valor predeterminado es preen, lo que significa -p. También se puede configurar yespara -y. /etc/default/grubpuede ser el lugar para configurar esto. Estaría agradecido si alguien con más conocimientos proporcionaría una respuesta moderna del sistema.
Nelson

Respuestas:

29

El ajuste Busco está en / etc / default / rcS , FSCKFIX=yes. Esto significa "reparar automáticamente los sistemas de archivos con inconsistencias durante el arranque" y hace que fsck se ejecute con el -yindicador. Se configuró noen mis dos sistemas Ubuntu.

Incluso cuando se establece en no, el tiempo de arranque fsck sigue siendo algo poco interactivo. mountall ejecuta fsck with -a, un sinónimo de -p, que significa "solucionar automáticamente cualquier problema del sistema de archivos que pueda solucionarse de forma segura sin intervención humana". Aparentemente -pcae al modo interactivo si hay que hacer arreglos inseguros. Para ejecutarse de forma totalmente automática, necesita -yo FSCKFIX=yes.

Aquí está el 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
fuente
Para sistemas operativos recientes con systemd, se puede lograr lo mismo agregando fsck.repair=yesa param GRUB_CMDLINE_LINUX_DEFAULTin/etc/default/grub
Maxxer
2

Para Ubuntu 15,16,17+, la configuración del valor FSCKFIX se encuentra en lib / init / vars.sh

Puede usar el comando grep -r FSCKFIX * 2>/dev/nullpara encontrarlo.

setec
fuente
1
¡Gracias! No soy positivo, pero los comentarios en ese archivo sugieren que aún debe configurar la configuración en /etc/default/rcS. /lib/init/vars.shtiene un valor predeterminado para FSCKFIXpero luego fuentes /etc/default/rcSque pueden anularlo. OTOH un sistema Ubuntu 18 recién instalado no tenía un rcSarchivo en absoluto.
Nelson
1

Asegúrese de no tener ningún indicador que pueda causar esto en fstab, y verifique sus scripts de inicio. (Intente grep'ing sus scripts de inicio para 'fsck' para encontrar dónde se usa) Mi sistema ejecuta fsck no interactivo, así que aquí hay una copia de mi fstab y parte de mi script / etc / init / mountall para que pueda 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
fuente
1
Gracias por la ayuda. ¿Podría decirme qué grep FSCKFIX /etc/default/rcSdice en su sistema?
Nelson