Unter SysV-Init konnte durch Anlegen der Datei /forcefsck ein Check des Dateisystems beim nächsten Boot erzwungen werden, wobei dann die Datei /forcefsck automatisch entfernt wurde. Mit systemd muss man diesen Wunsch der Kernel-Appendzeile hinzufügen. Hierbei stehen folgende Optionen zur Verfügung:

  • fsck.mode=
    • auto: Standard; Das Dateisystem wird nach Voreinstellungen wie Zahl der bisherigen Mounts etc. gecheckt.
    • force: Das Dateisystem wird unabhängig anderen Vorgaben auf jeden Fall gecheckt.
    • skip: Ein eigentlich anstehender Check wird übersprungen.
  • fsck.repair=
    • preen: Standard; Unproblematische Fehler im Dateisystem werden automatisch repariert.
    • yes: Alle Dateisystemfehler werden ohne Rückfrage repariert.
    • no: Dateisystemfehler, die im manuellen Modus bestätigt werden müssten, werden nicht korrigiert.

Führt man einen Dateisystemcheck auf der Kommandozeile durch, muss der Anwender über die Behebung (bestimmter) Fehler entscheiden, wobei nach meiner Erfahrung man in der Regel dies bejahen wird, denn die Materie ist zu komplex, um selbst eine Entscheidung zu treffen. Beim Boot, insbesondere auf einem Headless-Server, wird man daher möglicherweise eher „fsck.repair=yes“ wählen.

Da ein Check gemounteter Dateisysteme nicht möglich ist, muss man ansonsten ein Live-Linux-System wie z. B. systemrescuecd booten, um ein defektes Dateisystem zu reparieren.

Dauerhaft die Art des Dateisystemchecks beim Boot ändern

Die Standardeinstellung für den Dateisystemcheck beim Boot ist fsck.mode=auto fsck.repair=preen. Davon abweichendes Verhalten ist in der Datei /boot/extlinux/extlinux.conf in der APPEND-Zeile des zu ändernden Boot-Labels anzugeben, z. B.:

LABEL eis
    MENU LABEL eis
    KERNEL ../kernel
    INITRD ../initrd.gz
    APPEND root=UUID=12345678-1234-1234-1234-123456789012 consoleblank=600 vga=769 fsck.mode=force fsck.repair=yes

Einmaligen Dateisystemcheck beim Boot aktivieren

Üblicherweise wird man sich aber einen einmaligen Check wünschen, wenn ein Verdacht auf Inkonsistenzen im Dateisystem besteht.

Eine Möglichkeit besteht nun darin, beim Reboot im Bootmenü einen Booteintrag auszuwählen und dann dort die gewünschten Optionen z. B. fsck.mode=force fsck.repair=yes manuell hinzuzufügen. Sie werden dann genau für diesen Boot aktiv. Es sei aber auch darauf hingewiesen, einen Check durch Booten eines Live-Linux-Systems durchzuführen.

Falls der Server headless betrieben wird, besteht natürlich keine Möglichkeit, die gewünschten fsck-Optionen im Bootmenü einmalig zu ergänzen. Es bliebe, dies, wie im Vorabschnitt beschrieben, direkt in die Datei /boot/extlinux/extlinux.conf einzufügen und nach dem Boot wieder zu entfernen.

Ich beschreibe hier einen kernelupdatefesten Weg, einen weiteren Booteintrag der Datei /boot/extlinux/extlinux.conf hinzuzufügen, der dann für einen folgenden Boot gezielt aktiviert werden kann.

Ausgangspunkt ist die folgende /boot/extlinux/extlinux.conf Datei:

[...]
LABEL eis
    MENU LABEL eis
    KERNEL ../kernel
    INITRD ../initrd.gz
    APPEND root=UUID=12345678-1234-1234-1234-123456789012 consoleblank=600 vga=769

LABEL 5.15.145-VIRT
    MENU LABEL 5.15.145-VIRT
    KERNEL ../kernel-5.15.145-eisfair-64-VIRT
    INITRD ../initrd-5.15.145-eisfair-64-VIRT.gz
    APPEND root=UUID=12345678-1234-1234-1234-123456789012 consoleblank=600 vga=769

In /boot/ wird ein Verzeichnis namens fsckcheckonboot angelegt und eine Kopie der normalen extlinux.conf erzeugt:

mkdir /boot/fsckcheckonboot
cp /boot/extlinux/extlinux.conf /boot/fsckcheckonboot/extlinux.conf.fsck

Nun wird die Datei /boot/fsckcheckonboot/extlinux.conf.fsck derart bearbeitet, dass nur noch der Block „Label eis“ erhalten bleibt, dem Label ein neuer Namen gegeben wird und dann die gewünschten Checkoptionen hinzugefügt werden, dabei ist aus optischen Gründen günstig, vor der ersten LABEL-Zeile eine Leerzeile einzufügen:

LABEL mitcheck
    MENU LABEL mitcheck
    KERNEL ../kernel
    INITRD ../initrd.gz
    APPEND root=UUID=12345678-1234-1234-1234-123456789012 consoleblank=600 vga=769 fsck.mode=force fsck.repair=yes

Nun muss nur noch dafür gesorgt werden, dass die Eintrag auch der normalen /boot/extlinux/extlinux.conf-Datei hinzugefügt wird und dieser neue Booteintrag für den folgenden Boot aktiv wird. Letzteres ermöglicht extlinux auf sehr einfache Weise:

extlinux --once=mitcheck /boot/extlinux

Einmalig wird damit nicht der Standardbooteintrag eis, sondern eben nun einmalig mitcheck gebootet.

Das folgende Skript, welches man auch gut in /boot/fsckcheckonboot z. B. mit Namen bootwithcheck ablegen kann, erledigt nun alle notwendigen Dinge:

  • Hinzufügen des Booteintrages in die Datei /boot/extlinux/extlinux.conf sofern fehlend (z. B. nach Kernelupdate)
  • Aktivieren dieses Booteintrages für den nächsten Boot
  • Auslösen des Reboots.
#/bin/sh

if ! grep -q "^LABEL mitcheck$" /boot/extlinux/extlinux.conf
then
    echo Adding boot entry for mitcheck
    cat /boot/fsckcheckonboot/extlinux.conf.fsck >> /boot/extlinux/extlinux.conf
fi

if grep -q "^LABEL mitcheck$" /boot/extlinux/extlinux.conf
then
    extlinux --once=mitcheck /boot/extlinux
    reboot
else
    echo Boot label mitcheck not found; aborted!
fi

Nach dem Erstellen des Skriptes ist dieses noch ausführbar zu machen:

chmod 0700 /boot/fsckcheckonboot/bootwithcheck

Startet man nun dieses Skript

/boot/fsckonboot/bootwithcheck

rebootet das System mit dem Bootlabel mitcheck.