Dateisystemcheck beim Boot erzwingen
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.