Wird mein System beim Neustart überprüft?

20

... und wie finde ich es heraus?

Angenommen, ich möchte einen Server neu starten. Ich möchte die Ausfallzeit minimieren und überlege mir daher, ob ich den Neustart in einen Alias ​​einbinden soll, der besagt, dass "Moment mal, Kumpel, du wirst beim Booten ein Fsck machen".

Nächste Frage ... wie kann man am besten sagen "Lass es uns das nächste Mal tun?" das letzte Checkdatum setzen?

Ich weiß, dass tune2fs eine Reihe von Parametern einstellen kann, aber wie würde ich sie bekommen?

Tom Newton
quelle
Welches Betriebssystem verwenden Sie und welches Dateisystem?
Alan H
Gute Punkt - Versionen von Linux (hauptsächlich Deb & Derivate) und ext2 oder ext3
Tom Newton

Antworten:

19

Wenn Sie nur ein fsck vermeiden möchten, sollte das Hinzufügen der Option -f zum Herunterfahren hilfreich sein. shutdown -F um fsck zu erzwingen.

tune2fs -l /dev/foo wird Ihnen die interessanten Informationen mitteilen.

Hier ist ein Anfang, um genau das zu extrahieren, was Sie brauchen:

mount -l -t ext3,ext2 | cut -d' ' -f1 | xargs -n1 tune2fs -l | egrep -i 'state|mount|check'

Wenn das Datum "Nächste Prüfung nach" in der Vergangenheit liegt, wird ein Fsck angezeigt.

Wenn der Dateisystemstatus nicht sauber ist, wird ein fsck angezeigt. (Dies kann auch passieren, wenn beim Neustart / Herunterfahren ein Problem mit dem System auftritt, das ein sauberes Abmelden verhindert.)

Wenn die Anzahl der Ladevorgänge die maximale Anzahl der Ladevorgänge erreicht hat, wird ein fsck ausgegeben.

freiheit
quelle
Danke - wenn ich shutdown -f verwende, bekommt der nächste Neustart stattdessen das fsck?
Tom Newton
Angenommen, Ihr System erfüllt derzeit eines der Kriterien für das Abrufen eines fsck. Ja, beim nächsten Neustart wird stattdessen das fsck abgerufen. "shutdown -f" erstellt eine Datei, die den Systemstart anweist, fsck zu überspringen, aber der Systemstart entfernt auch diese Datei.
freiheit
10

Verwenden von tune2fs -l /path/to/device:

  • Wenn "Mount count" größer als "Maximum mount count" ist -c, ändern Sie mit das Maximum oder -Cdie Anzahl
  • Wenn "Zuletzt überprüft" nicht aktuell genug für das "Überprüfungsintervall" ist -i, können Sie das Intervall oder -Tdas zuletzt überprüfte Intervall ändern
Brian-Brazil
quelle
Dies setzt ext2 oder ext3 voraus, ist aber eine ziemlich gute Annahme.
David Pashley
David: die Frage erwähnt tune2fs ...
freiheit
6

Die andere Option ist, dass Sie die fsck-Prüfung beim Booten manuell überspringen können, indem Sie das 6. Feld in Ihrer / etc / fstab aktualisieren:

/dev/sda2  /  ext3  defaults,errors=remount-ro 0       1

Dies ist vergleichbar mit dem, was die meisten fstabs haben. 1 bedeutet, dass es überprüft werden sollte und es sich um ein Root-Dateisystem handelt. 2 bedeutet, dass es überprüft werden sollte, aber parallel zu anderen Dateisystemen ausgeführt wird. 0 bedeutet, dass die Überprüfung übersprungen wird

Dies gilt auch für das Dateisystem

Brendan
quelle
1

Wenn Sie nicht raten möchten, gehen Sie wie folgt vor:

touch / fastboot

und Sie werden sicher sein, langsame Überprüfungen zu vermeiden (oder schlimmer - ein totaler Fehler, wenn eine Überprüfung fehlschlägt und der Neustart angehalten wird)


quelle
1

Ich benutze das folgende Perl-Skript, um zu überprüfen, wann das nächste fsck stattfinden wird:

#!/usr/bin/perl -w

use strict;

my $mountcount = 0;
my $maxmount = 0;
my $dev;
my $mountpoint;
my $fstype;
my $debug = 0;

my $cmd = "mount";

open MOUNT, sprintf ( "%s |", $cmd ) or die sprintf ( "ERROR: Cannot execute %s - %s\n", $cmd, $! );
while ( <MOUNT> ) {
    chomp;
    ( $dev, undef, $mountpoint, undef, $fstype, undef ) = split;
    printf "Found device %s\n", $dev if ( $debug > 0 );

    if ( $fstype =~ /^ext/i ) {
        $cmd = sprintf "dumpe2fs -h %s 2>&1", $dev;
        open DUMPE2FS, sprintf ( "%s |", $cmd ) or die sprintf ( "ERROR: Unable to execute %s - %s\n", $cmd, $! );
        while ( <DUMPE2FS> ) {
            chomp;
            if ( /^Mount count:/ ) {
                ( undef, $mountcount ) = split /:/;
                $mountcount =~ s/\s*//g;
                printf "Mount count = %s\n", $mountcount if ( $debug > 0 );
            }
            if ( /^Maximum mount count:/ ) {
                ( undef, $maxmount ) = split /:/;
                $maxmount =~ s/\s*//g;
                printf "Maximum mount count = %s\n", $maxmount if ( $debug > 0 );
            }
        }
        close DUMPE2FS;

        printf "Filesystem %s, mounted on %s will be checked in %s mounts\n", $dev, $mountpoint, $maxmount - $mountcount;
    }
}
close MOUNT;

Ich habe es in meinem ~ / .bashrc ausgeführt, so dass ich immer weiß, wann meine Dateisysteme überprüft werden, obwohl ich jetzt ext4 verwende, das nicht unter verlängerten fsck-Zeiten leidet, ist es immer noch gut zu wissen.

Typische Ausgabe ist so etwas wie:

Filesystem /dev/sda1, mounted on / will be checked in 5 mounts
user@localhost ~ $
RivieraKid
quelle
Anscheinend wertet Ihr Skript die Attribute "Nächste Prüfung nach:" nicht aus!
Xebeche
0

Ich verwende regelmäßig tunefs, um die Anzahl der Starts und die Zeit vor einem mittäglichen Neustart zurückzusetzen, um fsck zu verhindern. Der Unterschied in der Startzeit ist atemberaubend. Afterwords Ich habe sie zurückgesetzt, damit der nächste Start fsck kann.

kmarsh
quelle
0

Ich dachte darüber nach, wie ich eine Liste von Dateisystemen bequemer bekommen kann:

for D in $(mount -l -t ext3,ext2 | cut -d' ' -f1 ) ; do \
echo --- $D; tune2fs -l $D | egrep -i 'mount (count|time)|check' ; done \
| awk '
  /^--- / { mydev=$2; checked=0 }
  /^Mount count:/ { mycnt=$3 }
  /^Maximum mount count:/ { if (mycnt >= $3) checked=1 }
  /^Next check after:/ {
    cmd=("date +%s -d\"" $4 FS $5 FS $6 FS $7 FS $8"\"");
    cmd | getline mydate; close(cmd);
    if ((mydate <= (systime()+120)) || (checked == 1)) print mydev;
  }
'

Ich denke, es könnte eleganter gemacht werden, aber hier ist es sowieso. Wenn man dies in xargs -r df -heine Pipeline leitet, kann man auch schnell sehen, wie groß die Dateisysteme sind.

Beachten Sie, dass im obigen Code die Zeit für "Nächste Prüfung" mit (JETZT + 120 Sekunden) verglichen wird, vorausgesetzt, es dauert einige Zeit, bis Ihr System wieder hochfährt.

HTH

Xebeche
quelle
0

Hier ist ein Skript, das Ihr Dateisystem auf fsck ( Quelle ) überprüft :

for x in $(df -t ext4 -t ext3 -t ext2 | tr -s ' ' | cut -d " " -f1 | grep -v "^$" | tail -n +2); do mmc=$(tune2fs -l $x | grep 'mount count' | tr -s ' ' | cut -d ' ' -f4) ; mc=$(tune2fs -l $x | grep 'Mount count' | tr -s ' ' | cut -d ' ' -f3) ; if [ `expr $mmc - $mc` -le 0 ] ; then fsck="0" ; else fsck="1"; fi ; CT=`date +%s` ; LCT=`date -d "\`tune2fs -l $x | grep "Last checked" | tr -s ' '| cut -d" " -f3-\`" +%s` ; CI=`tune2fs -l $x | grep "Check interval"| tr -s ' '| cut -d" " -f3` ; if [ `let $CT-$LCT` -gt `let $CI*3600*24` ] && [ $CI -gt 0 ] || [ $fsck -eq 1 ];  then echo "There will be forced fsck for $x"; else echo "There will be no fsck for $x" ; fi ; done
# Alternative script from friend with sed
# mount -t ext2,ext3,ext4|while read i j; do tune2fs -l $i|sed -n '/[Mm]ount count/{s/.*: *//;p}'|(read c; read m; [ $m -gt 0 -a $m -le $c ] && echofsck,count,$i); c="$(tune2fs -l $i|sed -n '/Next check/{s/.*r: *//;p}')"; [ -z "$c" ] || ([ `date +%s` -ge `date -d"$c" +%s` ] && echo fsck,time,$i); done
Avyd
quelle
1
Bitte posten Sie nicht nur Links zu externen Websites - kopieren Sie nützliche Informationen und geben Sie den Link als Referenz an.
Frederik Nielsen