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;