fsck beim Herunterfahren statt beim Starten

7

Wird normalerweise fsckbeim Start nach jedem 30. Neustart oder so automatisch ausgeführt. Manchmal kann es sehr langsam sein und den Start um mehr als eine halbe Stunde verzögern.

Gibt es eine Möglichkeit, stattdessen fsck beim Herunterfahren auszuführen? (Es macht mir nichts aus, wenn das Herunterfahren verzögert wird. Die Startzeit ist wichtiger.)

Ich möchte dies für die Debian- oder Scientific Linux-Distributionen.

Diego Herranz
quelle

Antworten:

5

Während Sie beim Herunterfahren einige Dinge überprüfen können, können Sie fsckIhr Root-Dateisystem nicht effektiv ausführen . Sie sehen, fsckerfordert, dass das Dateisystem nicht gemountet ist, bevor es eine Reparatur versuchen kann. Dies ist nur während des Startvorgangs möglich, während noch ausgeführt wird initramfs.

Dennis Kaarsemaker
quelle
Nein. Es ist schwierig , ein Root-Dateisystem beim Herunterfahren zu reparieren, aber es ist fast sicher möglich. Eine Option könnte sein: Mounten Sie das Dateisystem erneut schreibgeschützt und rufen Sie dann ein benutzerdefiniertes Tool auf, das Sie in C schreiben können. Das Tool kann ausgeführt werden /sbin/fsck, warten Sie, bis es beendet ist, rufen Sie sync()dann auf und rufen Sie dann auf reboot(RB_POWER_OFF)- alles in unmittelbarer Folge. Hinweis: Ich bin kein Kernel-Whiz. Sie sollten einen qualifizierten Experten bezahlen, um diesen Kommentar zu überprüfen, bevor Sie sich darauf verlassen. Weitere Ideen finden Sie unter diesem Link .
unvergesslicheidSupportsMonica
1

Für Debian können Sie AutoFsck verwenden, aber das Paket wird nicht mehr unterstützt (letztes Update 2010). Denken Sie also daran.

Die andere Möglichkeit wäre, ein FSCK / Bash-Skript in Ihr Shutdown-Skript einzufügen. Für SE Linux / Centos usw. würde ich chkconfig Level 0 (Halt) und 6 (Neustart) verwenden. chkconfig --levels 0 rc.local-shutdown onFügen Sie das Skript ein /etc/rc.d/init.d/. (Stufe 6 für Neustart)

Für Debian würde ich die Skripte in /etc/rc6.K00scriptname und /etc/rc0.d/K00scriptname erstellen.

Für das Skript können Sie Folgendes verwenden:

#!/bin/bash
NETFS="nonfs,nosmbfs,nocifs,nocodafs,noncpfs,nosysfs,nousbfs,noshfs,nofuse,nofuseblk"

if (( `tune2fs -l /dev/sda2 | awk '/Mount count/{print $3}'` > `tune2fs -l /dev/sda2 | awk '/Maximum mount count/{print $4-1}' ))
then /sbin/fsck -A -T -C -a -t $NETFS 2>/dev/null
fi

Dieser Code wurde nicht von mir geschrieben, sondern von jemandem in Archlinux- Foren. Ich habe den Code nicht ausprobiert. Denken Sie also auch daran.

Oder Sie können einfach etwas Einfaches wie /sbin/fsck -A -T -C -a -- -fim Skript tun .

Sc0rian
quelle
1

Das Problem mit fsck beim Herunterfahren besteht darin, dass Sie beim Herunterfahren sehen, dass Sie das Dateisystem aushängen. Selbst wenn das fs verschmutzt ist, zwingt das Aushängen eines fs es nicht, seine Integrität zu überprüfen. Während Sie es mounten, führen Sie einen fsck durch, um zu überprüfen, ob die Metadaten für die Daten korrekt sind und ob fs die richtigen Informationen für das fs enthält, wie es meldet. Dies kann stattfinden, während das fs montiert wird. Weil der Code zum Überprüfen der fs-Integrität zum Einsatz kommt, wenn der fs gemountet wird.

Dies ist der Grund, warum wir einen faulen Umount machen können, selbst wenn der fs schmutzig ist, aber es gibt keinen faulen oder erzwungenen Umount, wenn der fs schmutzig ist;)

Normalerweise sollte es nicht lange dauern, bis das Journal erstellt wird, es sei denn, es ist stark verschraubt. xfs_repair ist ziemlich schick und kann online gemacht werden, während btrfs gut ist, eine andere Geschichte.

Soham Chakraborty
quelle