¿Cómo puedo hacer que fsck se ejecute de forma no interactiva en el 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 en reiniciar el sistema decidió que tenía que fsck. Desafortunadamente, Ubuntu ejecutó fsck en modo interactivo, así que tuve que pedirle a alguien en mi centro de datos que revisara, conectara una consola y presionara la tecla Y. ¿Cómo lo configuro para que fsck se ejecute en modo no interactivo en el momento del arranque con el indicador -y o -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 esto posible?

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

En respuesta a preguntas de seguimiento, aquí están los detalles pertinentes de mi / etc / fstab. No creo que haya editado esto en absoluto a partir 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
    
pregunta Nelson 14.06.2012 - 23:44

3 respuestas

27

La configuración que estoy buscando está en / etc / default / rcS , %código%. Esto significa "reparar automáticamente los sistemas de archivos con inconsistencias durante el arranque" y hace que fsck se ejecute con el indicador FSCKFIX=yes . Se estableció en -y en mis dos sistemas Ubuntu.

Incluso cuando se establece en no , el tiempo de arranque fsck sigue siendo algo no interactivo. mountall ejecuta fsck con no , un sinónimo para -a , que significa "corregir automáticamente cualquier problema del sistema de archivos que pueda arreglarse sin intervención humana". Aparentemente, -p pasa al modo interactivo si hay reparaciones inseguras. Para ejecutar de forma totalmente automática, necesita -p o -y .

Aquí está el fragmento 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"));
}
    
respondido por el Nelson 16.06.2012 - 14:42
1

Asegúrate de no tener ningún indicador que pueda causar esto en fstab, y verifica tus scripts de inicio. (Pruebe 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 usted compare

$ 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
    
respondido por el Sepero 15.06.2012 - 01:05
0

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/null para finalizarlo.

    
respondido por el setec 04.02.2018 - 16:14

Lea otras preguntas en las etiquetas