Frage Wird mein System beim Neustart fsck?


... und wie finde ich heraus?

Angenommen, ich möchte gerade einen Server neustarten. Ich möchte die Ausfallzeit minimieren, also denke ich daran, den Neustart in einen Alias ​​umzuwandeln, der besagt: "Bleib dran, mein Freund, du wirst beim Booten einen fsck machen".

Nächste Frage ... Was ist der beste Weg zu sagen "lass es uns das nächste Mal machen?" das letzte Überprüfungsdatum einstellen?

Ich weiß, dass tune2fs eine Menge Parameter einstellen kann, aber wie würde ich sie bekommen?


20
2018-06-18 20:37


Ursprung


Welches Betriebssystem läuft und welches Dateisystem? - Alan H
Guter Punkt - Versionen von Linux (hauptsächlich deb & Derivate) und ext2 oder ext3 - Tom Newton


Antworten:


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

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

Hier erfahren Sie, was Sie benötigen:

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

Wenn das Datum "Next check after" in der Vergangenheit liegt, wird ein fsck angezeigt.

Wenn der Dateisystemzustand nicht sauber ist, wird es ein fsck geben. (Dies kann auch passieren, wenn während des Neustarts / Herunterfahrens ein Problem mit dem System auftritt, das ein sauberes Unmounten verhindert)

Wenn die Mount-Anzahl die maximale Mount-Anzahl erreicht hat, wird ein Fsck angezeigt.


19
2018-06-18 20:58



Danke - wenn ich den Shutdown -f benötige, wird der nächste reboot stattdessen den fsck bekommen? - Tom Newton
Angenommen, Ihr System erfüllt derzeit eines der Kriterien, um einen fsck zu erhalten, ja, der nächste Neustart würde stattdessen den fsck bekommen. "shutdown -f" erstellt eine Datei, die den Systemstart anweist, fsck zu überspringen, aber der Systemstart entfernt auch diese Datei. - freiheit


Verwenden tune2fs -l /path/to/device:

  • Wenn "Mount count" größer als "Maximum mount counts" ist, verwenden Sie -c um den max oder zu ändern -C um die Anzahl zu ändern
  • Wenn "Zuletzt überprüft" nicht neu genug ist, um das "Prüfintervall" zu verwenden -i um das Intervall zu ändern oder -T um das letzte überprüfte zu ändern

10
2018-06-18 20:52



Dies nimmt ext2 oder ext3 an, ist aber eine ziemlich gute Annahme. - David Pashley
David: Die Frage erwähnt tune2fs ... - freiheit


Die andere Option ist, dass Sie es 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 ähnlich wie bei den meisten fstabs 1 bedeutet, dass es überprüft werden sollte und ist ein Root-Dateisystem, 2 bedeutet, dass es überprüft werden sollte, wird aber parallel mit anderen Dateisystemen durchgeführt und 0 bedeutet überspringen Überprüfung

Dies gilt auch für das Dateisystem


6
2018-06-19 03:30





Wenn Sie nicht raten wollen - tun Sie das:

Berühren / Schnellboot

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


1
2018-04-15 14:00





Ich verwende das folgende Perl-Skript, um zu überprüfen, wann der nächste Fsck auftritt:

#!/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 laufen, so dass ich immer weiß, wenn meine Dateisysteme überprüft werden, obwohl ich jetzt ext4 benutze, das nicht von erweiterten fsck-Zeiten leidet, ist es immer noch schön zu wissen.

Typische Ausgabe ist etwas wie:

Filesystem /dev/sda1, mounted on / will be checked in 5 mounts
user@localhost ~ $

1
2018-04-19 09:34



Anscheinend wertet Ihr Skript die Attribute "Next check after:" nicht aus! - xebeche


Ich benutze regelmäßig Tunefs, um Boot-Anzahl und Zeit vor einem Mid-Day-Neustart neu zu setzen, um FSCK zu verhindern. Der Unterschied in der Boot-Zeit ist atemberaubend. Danach setze ich sie zurück, damit der nächste Bootvorgang gestartet werden kann.


0
2017-07-08 18:30





Ich habe darüber nachgedacht, 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 wie auch immer, hier ist es. Wenn man das reinleitet xargs -r df -h Man könnte auch schnell sehen, wie groß die Dateisysteme sind.

Beachten Sie, dass im obigen Code die Zeit von "Nächste Überprüfung" mit (JETZT + 120 Sekunden) verglichen wird, vorausgesetzt, dass es einige Zeit braucht, bis Ihr System wieder aufsteht.

HTH


0
2017-10-24 20:16





Hier ist ein Skript, das Ihre Dateisysteme auf fsck überprüft (Quelle):

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

0
2017-10-16 15:13



Bitte poste nicht nur Links zu externen Seiten - kopiere nützliche Informationen und stelle den Link als Referenz zur Verfügung. - Frederik Nielsen