GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa devo fare per forzare il controllo del filesystem di root (e facoltativamente una correzione) all'avvio?

ext4 controllo del filesystem durante l'avvio

Testato su sistema operativo:Linux Mint 18.x in una macchina virtuale

Informazioni di base

/etc/fstab ha il fsck ordina come ultima (sesta) colonna, ad esempio:

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

FSCKFIX=yes variabile in /etc/default/rcS

Questo cambierà fsck in correzione automatica, ma non forza un controllo fsck.

Da 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.

Da man tune2fs

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

Inizia con

Impostare quanto segue

FSCKFIX=yes

nel file

/etc/default/rcS

Controlla e annota l'ultima volta che fs è stato controllato:

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

Queste due opzioni NON hanno funzionato

  1. Superando -F (forza fsck al riavvio) argomento a shutdown :

    shutdown -rF now
    

    No; vedi:man shutdown .

  2. Aggiunta del /forcefsck file vuoto con:

    touch /forcefsck
    

    Questi script sembrano utilizzare questo:

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

    NON funzionano al riavvio, ma il file è stato eliminato.

    Verificato da:

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

    Questi sembrano essere i log per il init script.

Ripeto, queste due opzioni NON hanno funzionato!

Entrambi questi metodi hanno funzionato

  1. switch di avvio del kernel systemd-fsck

    Modifica del grub principale file di configurazione:

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

    Questo ha fatto un controllo del file system come verificato con:

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

    Nota:questo DID un controllo, ma per forzare anche una correzione, devi specificare fsck.repair="preen" o fsck.repair="yes" .

  2. Utilizzando tune2fs per impostare il numero di montaggi del file system prima di eseguire un fsck , man tune2fs

    tune2fs' info is kept in the file system superblock
    

    -c switch imposta il numero di volte per montare fs prima di controllare fs.

    sudo tune2fs -c 1 /dev/sda1
    

    Verifica con:

    sudo tune2fs -l /dev/sda1
    

    Questo DID funziona come verificato con:

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

Riepilogo

Per forzare un fsck ad ogni avvio su Linux Mint 18.x, usa tune2fs o fsck.mode=force , con fsck.repair=preen facoltativo / fsck.repair=yes , la riga di comando del kernel cambia.


Ulteriori indagini e aggiornamenti sulla risposta esistente

Ora volevo solo verificare se quanto sopra funziona ancora su sistemi basati su Ubuntu 20.04 LTS (testato direttamente su Linux Mint 20 Cinnamon e Ubuntu MATE 20.04 ), e ho scoperto alcune cose, iniziamo con l'intervallo di controllo del file system (ho eseguito tutti i comandi come root (come potresti notare ~# davanti ai comandi):

Intervallo di controllo del file system

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

Check interval:           0 (<none>)

Bene, questo è stato inaspettato. Pensavo che ce ne fossimo occupati, ma per fortuna può essere risolto molto facilmente. Prendi nota, il numero che prende come argomento è di default in giorni, quindi assicurati di usare 1s (1 secondo) invece di solo 1 che significherebbe 1 giorno (86400 secondi):

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

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

Ora, se ripetiamo il controllo precedente, otteniamo:

Check interval:           1 (0:00:01)

Ciò non significa che il file system verrà controllato ogni secondo, ovviamente. Piuttosto, in effetti forzerà il controllo del file system su ogni montaggio del file system. (Poiché non c'è modo di avviare un sistema due volte in un secondo.)

Numero massimo di montaggi del file system prima del controllo

Impostazione predefinita:

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

Maximum mount count:      -1

Questa impostazione regola il numero di montaggi necessari prima che il file system venga controllato. Va bene ciò che è scritto nella risposta originale:

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

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

Assicurati solo di non utilizzare 0 o -1 in quanto verrebbe ignorato.

Probabilmente aggiungerò altre informazioni in seguito... Quindi, continua a controllare (gioco di parole).

Fonti di informazioni:

  • tune2fs pagina man

Linux
  1. 10 esempi di comandi Linux Fsck per controllare e riparare il filesystem

  2. Qual è la differenza nel reindirizzare un output usando >, &>, >&e 2&>?

  3. Qual è la differenza tra la scrittura su un file e una memoria mappata?

  4. Qual è la differenza tra sezione e segmento nel formato di file ELF

  5. Quali sono le differenze tra `chattr +i FILE` e `chmod -w FILE`?

Come forzare il controllo del file system "FSCK" su Ubuntu

Cosa significa l'attributo "s" nelle autorizzazioni dei file??

Controlla e ripara gli errori del filesystem con il comando fsck in Linux

Cos'è la funzionalità della community di ONLYOFFICE e perché dovresti usarla?

Cos'è il file system NSFS?

Qual è il comando per copiare, leggere e rimuovere file in Linux