GNU/Linux >> Znalost Linux >  >> Linux

Co mám udělat, abych vynutil kontrolu kořenového souborového systému (a volitelně opravu) při bootování?

ext4 kontrola souborového systému během bootování

Testováno na OS:Linux Mint 18.x ve virtuálním počítači

Základní informace

/etc/fstabfsck pořadí jako poslední (6.) sloupec, například:

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

FSCKFIX=yes proměnná v /etc/default/rcS

Tím se změní fsck na automatickou opravu, ale ne vynutit kontrolu fsck.

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

Od man tune2fs

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

Začít s

Nastavení následujícího

FSCKFIX=yes

v souboru

/etc/default/rcS

Zkontrolujte a poznamenejte si poslední kontrolu fs:

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

Tyto dvě možnosti NEFUNGOVALY

  1. Absolvování -F (vynutit fsck při restartu) argument na shutdown :

    shutdown -rF now
    

    Ani náhodou; viz:man shutdown .

  2. Přidání /forcefsck prázdný soubor s:

    touch /forcefsck
    

    Zdá se, že tyto skripty používají toto:

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

    NE pracovat na restartu, ale soubor byl smazán.

    Ověřeno:

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

    Zdá se, že toto jsou protokoly pro init skripty.

Opakuji, tyto dvě možnosti NEFUNGOVALY!

Obě tyto metody fungovaly

  1. systemd-fsck spouštěcí přepínače jádra

    Úprava hlavního grub konfigurační soubor:

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

    To provedlo kontrolu souborového systému ověřenou pomocí:

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

    Poznámka:Toto DÍLO kontrola, ale chcete-li také vynutit opravu, musíte zadat fsck.repair="preen" nebo fsck.repair="yes" .

  2. Pomocí tune2fs pro nastavení počtu připojení systému souborů před provedením fsck , man tune2fs

    tune2fs' info is kept in the file system superblock
    

    -c přepínač nastavuje počet připojení fs před kontrolou fs.

    sudo tune2fs -c 1 /dev/sda1
    

    Ověřte pomocí:

    sudo tune2fs -l /dev/sda1
    

    Toto DÍLO pracovat jako ověřeno s:

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

Shrnutí

Chcete-li vynutit fsck při každém spuštění na Linux Mint 18.x použijte buď tune2fs nebo fsck.mode=force , s volitelným fsck.repair=preen / fsck.repair=yes , přepne se příkazový řádek jádra.


Další šetření a aktualizace stávající odpovědi

Nyní jsem jen chtěl zkontrolovat, zda výše uvedené stále funguje na systémech založených na Ubuntu 20.04 LTS (přímo testováno na Linux Mint 20 Cinnamon a Ubuntu MATE 20.04 ), a zjistil jsem pár věcí, začněme intervalem kontroly souborového systému (všechny příkazy jsem spouštěl jako root (jak jste si mohli všimnout ~# před příkazy):

Interval kontroly systému souborů

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

Check interval:           0 (<none>)

No, tohle bylo nečekané. Myslel jsem, že jsme se o to postarali, ale dá se to naštěstí velmi snadno opravit. Všimněte si, že číslo, které se používá jako argument, je ve výchozím nastavení ve dnech, takže nezapomeňte použít 1 s (1 sekundy) místo pouhé 1, což by znamenalo 1 den (86 400 sekund):

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

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

Nyní, když zopakujeme výše uvedenou kontrolu, dostaneme:

Check interval:           1 (0:00:01)

To samozřejmě neznamená, že souborový systém bude kontrolován každou sekundu. Spíše ve skutečnosti vynutí kontrolu souborového systému při každém připojení souborového systému. (Protože neexistuje způsob, jak zavést systém dvakrát za sekundu.)

Maximální počet připojení systému souborů před kontrolou

Výchozí nastavení:

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

Maximum mount count:      -1

Toto nastavení upravuje, kolik připojení je potřeba ke kontrole systému souborů. Je v pořádku, co je napsáno v původní odpovědi:

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

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

Jen se ujistěte, že nepoužíváte 0 nebo -1, protože by to bylo ignorováno.

Pravděpodobně přidám více informací později... Takže pokračujte v kontrole (zamýšlená slovní hříčka).

Informační zdroje:

  • tune2fs manuálová stránka

Linux
  1. Linux – Jak vynutit kontrolu kořenového souborového systému (a případně opravu) při spouštění?

  2. Co znamená atribut „s“ v oprávněních k souboru?

  3. 10 Příklady příkazů Linux Fsck ke kontrole a opravě souborového systému

  1. Jaký je rozdíl v přesměrování výstupu pomocí >, &>, >&a 2&>?

  2. Jaký je rozdíl mezi sekcemi a segmenty ve formátu souboru ELF

  3. Jaký je rozdíl mezi `chattr +i FILE` a `chmod -w FILE`?

  1. Jaký je rozdíl mezi fsck a e2fsck?

  2. Jaký je rozdíl mezi přidáním uživatele do sudoers a kořenové skupiny?

  3. Jaké jsou minimální aplikace kořenového souborového systému, které jsou nutné k úplnému zavedení linuxu?