Saltar al contenido

¿Qué debo hacer para forzar la verificación del sistema de archivos raíz (y, opcionalmente, una solución) en el arranque?

Solución:

ext4 comprobación del sistema de archivos durante el arranque

Probado en el sistema operativo: Linux Mint 18.x en una máquina virtual

Información básica

/etc/fstab tiene el fsck orden como la última (sexta) columna, por ejemplo:

<file system>    <mount point>    <type>    <options>    <dump>    <fsck>
UUID=2fbcf5e7-1234-abcd-88e8-a72d15580c99 / ext4 errors=remount-ro 0 1

FSCKFIX=yes variable en /etc/default/rcS

Esto cambiará el fsck a reparación automática, pero no forzar un cheque fsck.

De man rcS:

FSCKFIX
    When  the  root  and all other file systems are checked, fsck is
    invoked with the -a option which means "autorepair".   If  there
    are  major  inconsistencies then the fsck process will bail out.
    The system will print a  message  asking  the  administrator  to
    repair  the  file  system manually and will present a root shell
    prompt (actually a sulogin prompt) on the console.  Setting this
    option  to  yes  causes  the fsck commands to be run with the -y
    option instead of the -a option.  This will tell fsck always  to
    repair the file systems without asking for permission.

De man tune2fs

If you are using journaling on your filesystem, your filesystem
will never be marked dirty, so it will not normally be checked.

Empezar con

Establecer lo siguiente

FSCKFIX=yes

en el archivo

/etc/default/rcS

Verifique y anote la última vez que se verificó fs:

sudo tune2fs -l /dev/sda1 | grep "Last checked"

Estas dos opciones NO funcionaron

  1. Paso -F (fuerza fsck al reiniciar) argumento para shutdown:

    shutdown -rF now
    

    No; ver: man shutdown.

  2. Añadiendo el /forcefsck archivo vacío con:

    touch /forcefsck
    

    Estos scripts parecen usar esto:

    /etc/init.d/checkfs.sh
    /etc/init.d/checkroot.sh
    

    hizo NO trabajar en el reinicio, pero el archivo se eliminó.

    Verificada por:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    sudo less /var/log/fsck/checkfs
    sudo less /var/log/fsck/checkroot
    

    Estos parecen ser los registros de init guiones.

Repito, ¡estas dos opciones NO funcionaron!


Ambos métodos funcionaron

  1. conmutadores de arranque del kernel systemd-fsck

    Editando el principal grub archivo de configuración:

    sudoedit /etc/default/grub
    
    GRUB_CMDLINE_LINUX="fsck.mode=force"
    
    sudo update-grub
    sudo reboot
    

    Esto hizo una verificación del sistema de archivos como se verificó con:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    

    Nota: este HIZO un cheque, pero para forzar una corrección también, debe especificar fsck.repair="preen", o fsck.repair="yes".

  2. Utilizando tune2fs para establecer el número de montajes del sistema de archivos antes de realizar una fsck, man tune2fs

    tune2fs' info is kept in the file system superblock
    

    -c switch establece el número de veces que se monta el fs antes de comprobar el fs.

    sudo tune2fs -c 1 /dev/sda1
    

    Verificar con:

    sudo tune2fs -l /dev/sda1
    

    Esta HIZO trabajar según lo verificado con:

    sudo tune2fs -l /dev/sda1 | grep "Last checked"
    

Resumen

Para forzar un fsck en cada arranque en Linux Mint 18.x, use tune2fs, o fsck.mode=force, con opcional fsck.repair=preen / fsck.repair=yes, la línea de comandos del kernel cambia.

Investigación adicional y actualizaciones sobre la respuesta existente

Ahora solo quería comprobar si lo anterior todavía funciona en Sistemas basados ​​en Ubuntu 20.04 LTS (probado directamente en Linux Mint 20 Cinnamon escritorio amd64 y Ubuntu MATE 20.04 escritorio amd64), y descubrí algunas cosas, comencemos con el intervalo de verificación del sistema de archivos (ejecuté todos los comandos como root (como puede notar ~# delante de los comandos):


Intervalo de verificación del sistema de archivos

~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Check interval'

Check interval:           0 (<none>)

Bueno, esto fue inesperado. Pensé que nos habíamos ocupado de ello, pero afortunadamente se puede arreglar muy fácilmente. Tome nota, el número que toma como argumento es por defecto en días, así que asegúrese de usar 1s (1 segundo) en lugar de solo 1, lo que significaría 1 día (86400 segundos):

~# LC_ALL=C tune2fs -i 1s /dev/nvme0n1p2

tune2fs 1.45.5 (07-Jan-2020)
Setting interval between checks to 1 seconds

Ahora, si repetimos la verificación anterior, obtenemos:

Check interval:           1 (0:00:01)

Esto no significa que el sistema de archivos se revisará cada segundo, por supuesto. Más bien, en efecto, forzará la verificación del sistema de archivos en cada montaje del sistema de archivos. (Como no hay forma de arrancar ningún sistema dos veces en un segundo).


Número máximo de montajes del sistema de archivos antes de la verificación

Configuración predeterminada:

~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Maximum mount count'

Maximum mount count:      -1

Esta configuración ajusta la cantidad de montajes necesarios hasta que se comprueba el sistema de archivos. Está bien lo que está escrito en la respuesta original:

~# LC_ALL=C tune2fs -c 1 /dev/nvme0n1p2

tune2fs 1.45.5 (07-Jan-2020)
Setting maximal mount count to 1

Solo asegúrese de no usar 0 o -1, ya que se ignoraría.


Probablemente agregaré más información más adelante … Entonces, sigue revisando (juego de palabras).

Fuentes de información:

  • tune2fs página man
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *