blog.bartlweb - a technologist's external brain

Filesystem-Checks fsck unter Linux händeln

Wer kennt das Problem nicht: Immer dann wenn der Server-Reboot schnell gehen muss wird wieder eine automatische Überprüfung des Dateisystems durchgeführt - und das kann dauern.

Parameter für den Neustart

Darum gibt es die Möglichkeit über den Shutdown-Befehl die Überprüfung beim Reboot expliziet zu verhindern oder zu erzwingen.

Filesystem-Check verhindern

shutdown -f -r now

Filesystem-Check erzwingen

shutdown -F -r now

Überprüfungsintervall auslesen und anpassen

Die wichtigsten Parameter im Zusammenhang mit der automatischen Überprüfung sind: mount count, maximum mount count, last checked, check interval, next check after. Diese lassen Sich für jede Partition über den folgenden Befehl abrufen:

tune2fs -l /path/to/device

Über diesen Befehl lassen sich die Voreinstellungen der einzelnen Parameter auch ändern.

Skript für den schnellen Überblick

Das folgende Skript liest die wichtigsten Parameter (Anzahl der Mounts, Zeit und Mount-Anzahl bis zum nächsten fsck, etc.) für alle Partitionen aus und stellt diese übersichtlich dar.

#!/usr/bin/perl -w
 
use strict;
 
my $mountcount = 0;
my $maxmount = 0;
my $nextmount = 0;
my $nextmount_str = "";
my $dev;
my $mountpoint = "";
my $fstype = "";
my $lastcheck = "";
my $nextcheck = "";
my $checkinterval = 0;
my $view = "";
 
my $cmd = "mount";
 
if($ARGV[0]){
    $view = $ARGV[0];
}
 
if($view eq '-h') {
    printf "fsck (file system check) status for mounted devices\n";
    printf "\n";
    printf "-l   list more details\n";
    exit;
}
 
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;
 
    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;
            }
            if ( /^Maximum mount count:/ ) {
                ( undef, $maxmount ) = split /:/;
                $maxmount =~ s/\s*//g;
            }
            if ( /^Last mount time:/ ) {
                ( undef, $lastcheck ) = split /Last mount time:/;
                $lastcheck =~ s/^\s*//g;
            }
            if ( /^Next check after:/ ) {
                ( undef, $nextcheck ) = split /Next check after:/;
                $nextcheck =~ s/^\s*//g;
            }
            if ( /^Check interval:/ ) {
                ( undef, $checkinterval ) = split /Check interval:/;
                $checkinterval =~ s/^\s*//g;
            }
        }
        close DUMPE2FS;
 
        $nextmount = $maxmount - $mountcount;
 
        if($view eq '-l') {
            printf "----------------------------------------------------------------\n";
            printf $dev . " (" . $mountpoint . ")\n";
            printf "----------------------------------------------------------------\n";
            printf "device:                      " . $dev . "\n";
            printf "filesystem:                  " . $fstype . "\n";
            printf "mountpoint:                  " . $mountpoint . "\n";
            printf "last checked:                " . $lastcheck . "\n";
            printf "check interval:              " . $checkinterval . "\n";
            printf "actual mounts without check: " . $mountcount . "\n";
            printf "check every x mounts:        " . $maxmount . "\n";
            printf "\n";
            printf "next check after:            " . $nextcheck . "\n";
            printf "check after mounts:          " . $nextmount . "\n";
            printf "\n\n";
        } else {
            if($nextmount < 10) {
                $nextmount_str = " " . $nextmount;
            } else {
                $nextmount_str = $nextmount;
            }
 
            printf "%s will be checked in %s mounts or at least after %s (%s, %s)\n", $dev, $nextmount_str, $nextcheck, $fstype, $mountpoint;
        }
    }
}
close MOUNT;

Dieser Artikel hat dir deinen Tag gerettet?
... und mühevolles Probieren, Recherchieren und damit Stunden an Zeit gespart? ... oder einfach nur dein Problem gelöst?

Dann würde ich mich freuen, wenn Du meine Zeit für die Erstellung dieses Blogartikels mit einer kleinen Spende honorierst:

Kommentare

Noch kein Kommentar vorhanden.
Sei der Erste - ich freue mich über deine Anmerkungen, Kritik und Fragen.

Kommentar schreiben

Deine E-Mailadresse wird nur für Benachrichtigungen und Rückfragen verwendet und wird nicht veröffentlicht.

Benachrichtigungen können jederzeit wieder abbestellt werden.

Bitte tippe die Zahlenkombination "3019" ein, nur dann kann ich deinen Kommentar entgegennehmen.

Bitte fülle dieses Feld nicht aus, nur dann kann ich deinen Kommentar entgegennehmen.