Yeniden başlattığımda sistemim fsck yapacak mı?


20

... ve nasıl öğrenebilirim?

Bir sunucuyu yeniden başlatmak üzereyim. Arıza süresini en aza indirmek istiyorum, bu yüzden "dostum, asmak bir fsck vuracaksınız" yazan bir takma adda yeniden başlatmayı düşünmek istiyorum.

Sonraki soru .. "bir dahaki sefere yapalım" demenin en iyi yolu nedir? son kontrol tarihi belirlensin mi?

Tune2fs bir grup parametre ayarlayabileceğini biliyorum, ama nasıl alabilirim?


Hangi işletim sistemini ve hangi dosya sistemini kullanıyorsunuz?
Alan H

İyi bir nokta - Linux (çoğunlukla deb ve türevleri) ve ext2 veya ext3'ün sürümleri
Tom Newton

Yanıtlar:


19

Yapmak istediğiniz tek şey bir fsck'den kaçınmaksa, -f seçeneğinin kapatılması buna yardımcı olacaktır. fsck'i zorlamak için kapatma -F.

tune2fs -l /dev/foo ilginç bilgi parçaları söyleyecektir.

İşte ihtiyacınız olanı çıkarmaya başlamanız:

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

"Sonradan sonraki kontrol" tarihi geçmişse, bir fsck olacaktır.

Dosya sistemi durumu temiz değilse, bir fsck olacaktır. (yeniden başlatma / kapatma sırasında sistemde temiz bir bağlantıyı kesmeyi önleyen bir sorun varsa da olabilir)

Montaj sayısı maksimum montaj sayısına ulaştıysa, bir fsck olacaktır.


Teşekkürler - Eğer kapatma -f ussue eğer, sonraki yeniden başlatma yerine fsck alacak?
Tom Newton

Sisteminizin şu anda bir fsck almak için ölçütlerden birini karşıladığını varsayarsak, evet, bir sonraki yeniden başlatma fsck'i alır. "shutdown -f", sistem başlangıcında fsck'i atlamasını söyleyen bir dosya oluşturur, ancak sistem başlangıcı da bu dosyayı kaldırır.
freiheit

10

Kullanma tune2fs -l /path/to/device:

  • "Montaj sayısı", "Maksimum montaj sayısı" dan büyükse -c, maksimumu -Cdeğiştirmek veya sayıyı değiştirmek için
  • "Son Kontrol Edildi", "Kontrol aralığı" için yeterince yeni değilse -i, aralığı -Tdeğiştirmek veya son kontrol edileni değiştirmek için kullanın

Bu ext2 veya ext3 olduğunu varsayar, ancak oldukça iyi bir varsayımdır.
David Pashley

David: soru tune2fs bahsediyor ...
freiheit

6

diğer seçenek, / etc / fstab öğenizdeki 6. alanı güncelleyerek önyükleme sırasında fsck kontrollerini atlamasını manuel olarak yapabilirsiniz:

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

Bu, çoğu fstabın sahip olacağı şeye benzer 1 kontrol edilmesi gerektiği anlamına gelir ve bir kök dosya sistemi, 2 kontrol edilmesi gerekir, ancak diğer dosya sistemlerine paralel olarak yapılır ve 0, atlama kontrolü anlamına gelir

dosya sistemi ne olursa olsun bu da doğrudur


1

Tahmin etmek istemiyorsanız - bunu yapın:

dokunmatik / hızlı açılış

ve yavaş kontrollerden (veya daha kötüsü - bir kontrol başarısız olursa ve yeniden başlatma durursa toplam başarısızlık) kaçınacağınızdan emin olabilirsiniz.


1

Bir sonraki fsck ne zaman olacağını kontrol etmek için aşağıdaki perl komut dosyası kullanın:

#!/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;

Ben benim ~ / .bashrc içinde çalıştırmak var, bu yüzden her zaman benim dosya sistemleri ne zaman kontrol olacağını biliyorum, ama şimdi uzatılmış fsck süreleri muzdarip değil ext4 kullanmak rağmen, hala bilmek güzel.

Tipik çıktı şuna benzer:

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

Görünüşe göre, komut dosyanız "Sonra kontrol et: özellikleri" değerlendirmez!
xebeche

0

Fsck'i önlemek için gün ortasında yeniden başlatmadan önce önyükleme sayılarını ve sürelerini sıfırlamak için düzenli olarak tunikler kullanıyorum. Önyükleme süresindeki fark çarpıcı. Afterwords Ben onları bir sonraki önyükleme fsck izin vermek için sıfırlayın.


0

Dosya sistemlerinin bir listesini daha rahat bir şekilde nasıl alacağımı düşündüm:

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;
  }
'

Sanırım daha zarif yapılabilirdi ama yine de burada. İçine bir boru bu takdirde xargs -r df -hbirine de hızla dosya sistemleri ne kadar büyük görebiliyordu.

Yukarıdaki kodda "Sonraki kontrol" zamanının (ŞİMDİ + 120 saniye) ile karşılaştırıldığını ve sisteminizin yeniden kalkmasının biraz zaman alacağını varsayalım.

HTH


0

Dosya sistemlerinizi fsck ( kaynak ) için kontrol eden bir komut dosyası aşağıdadır :

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

1
Lütfen harici sitelere bağlantılar göndermeyin - faydalı bilgileri kopyalayın ve referans için bağlantı sağlayın.
Frederik Nielsen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.