जब मैं रिबूट करूंगा तो क्या मेरा सिस्टम fsck करेगा?


20

... और मुझे कैसे पता चलेगा?

कहें कि मैं एक सर्वर को रिबूट करने वाला हूं। मैं डाउनटाइम को कम करना चाहूंगा, इसलिए रिबूट को एक उपनाम में लपेटने के बारे में सोचता हूं जो कहता है कि "दोस्त पर लटकाओ, आप बूट पर एक हिट मारने जा रहे हैं"।

अगला सवाल .. यह कहने का सबसे अच्छा तरीका क्या है "अगली बार करने दें?" अंतिम चेक तिथि निर्धारित करें?

मुझे पता है कि ट्यून 2 एफए मापदंडों का एक समूह सेट कर सकता है, लेकिन मैं उन्हें कैसे प्राप्त करूंगा?


आप किस OS पर चल रहे हैं, और कौन सी फाइलसिस्टम?
एलन एच।

अच्छा बिंदु - लिनक्स के संस्करण (मुख्य रूप से डिब और डेरिवेटिव) और ext2 या ext3
टॉम न्यूटन

जवाबों:


19

यदि आप सब करना चाहते हैं, तो एक fsck से बचें, शटडाउन के लिए -f विकल्प जोड़कर उस के साथ मदद करनी चाहिए। शटडाउन -F को मजबूर करने के लिए fsck।

tune2fs -l /dev/foo आपको जानकारी के दिलचस्प बिट्स बताएगा।

यहाँ केवल आपकी जरूरत के हिसाब से एक शुरुआत है:

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

यदि "अगली जांच के बाद" तारीख अतीत में है, तो एक फेक होगा।

यदि फ़ाइल सिस्टम स्थिति साफ नहीं है, तो fsck होगा। (यह भी हो सकता है अगर रिबूट / शटडाउन के दौरान सिस्टम के साथ कोई समस्या है जो एक स्वच्छ अनमाउंट को रोकता है)

यदि माउंट की गिनती अधिकतम माउंट काउंट तक पहुंच गई है, तो एक फस्क होगा।


धन्यवाद - अगर मैं शटडाउन को बंद कर दूं, तो क्या अगला रिबूट बदले में fsck मिलेगा?
टॉम न्यूटन

आपके सिस्टम को वर्तमान में एक fsck प्राप्त करने के लिए मापदंड में से एक मानते हैं, हाँ, अगले रिबूट के बजाय fsck मिल जाएगा। "शटडाउन -f" एक फाइल बनाता है जो सिस्टम स्टार्टअप को fsck को छोड़ने के लिए कहता है, लेकिन सिस्टम स्टार्टअप उस फाइल को भी हटा देता है।
Freiheit

10

का उपयोग कर tune2fs -l /path/to/device:

  • यदि "माउंट काउंट" "अधिकतम माउंट काउंट" से अधिक होगा, तो -cअधिकतम बदलने के लिए या -Cगिनती को बदलने के लिए उपयोग करें
  • यदि "अंतिम जाँच" -iअंतराल -Tको बदलने या अंतिम जाँच को बदलने के लिए "चेक अंतराल" उपयोग के लिए हाल ही में पर्याप्त नहीं है

यह ext2 या ext3 मान लेता है, लेकिन एक बहुत अच्छा विस्फोट है।
डेविड पशले

डेविड: प्रश्न उल्लेख tune2fs ... करता है
Freiheit

6

दूसरा विकल्प यह है कि आप मैन्युअल रूप से अपने / etc / fstab में छठे क्षेत्र को अपडेट करके बूट पर fsck चेक को छोड़ सकते हैं:

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

यह उसी तरह है जैसा कि अधिकांश fstabs में 1 का अर्थ होगा कि इसे जांचा जाना चाहिए और यह रूट फाइल सिस्टम है, 2 का अर्थ है कि इसे चेक किया जाना चाहिए लेकिन अन्य फाइल सिस्टम के साथ समानांतर में किया जाएगा और 0 का मतलब है कि चेकिंग छोड़ें

यह भी सच है कोई फर्क नहीं पड़ता फ़ाइल सिस्टम


1

यदि आप अनुमान नहीं लगाना चाहते हैं - ऐसा करें:

टच / फास्टबूट

और आप धीमे चेक से बचने के लिए निश्चित होंगे (या इससे भी बदतर - अगर एक चेक विफल हो जाता है और रिबूट रुक जाता है तो कुल असफलता)


1

मैं अगले पर्ल स्क्रिप्ट की जाँच करने के लिए निम्न पर्ल स्क्रिप्ट का उपयोग करता हूँ:

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

मैंने इसे अपने ~ / .bashrc में चलाया है इसलिए मुझे हमेशा पता है कि मेरे फाइलसिस्टम की जाँच कब होगी, हालांकि मैं अब ext4 का उपयोग करता हूं जो विस्तारित fsck समय से ग्रस्त नहीं है, यह जानना अभी भी अच्छा है।

विशिष्ट उत्पादन कुछ इस तरह है:

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

जाहिरा तौर पर, आपकी स्क्रिप्ट "अगली जाँच के बाद:" गुण का मूल्यांकन नहीं करती है!
xebeche

0

मैं नियमित रूप से बूट काउंट को रीसेट करने के लिए और मिड-डे रिबूट करने से पहले समय का उपयोग करता हूं, ताकि फॉक्स को रोका जा सके। बूट समय में अंतर आश्चर्यजनक है। बाद में मैंने उन्हें अगले बूट को fsck की अनुमति देने के लिए रीसेट कर दिया।


0

मैंने सोचा कि कैसे अधिक आराम से फाइल सिस्टम की सूची प्राप्त की जाए:

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

मुझे लगता है कि यह अधिक भव्य तरीके से किया जा सकता है, लेकिन वैसे भी यहां यह है। अगर एक में यह पाइप xargs -r df -hभी जल्दी से देख सकते हैं कि filesystem कितने बड़े हैं।

ध्यान दें कि "अगली जांच" के समय से ऊपर कोड में (अब + 120 सेकंड) की तुलना में यह माना जाता है कि आपके सिस्टम के फिर से उठने तक कुछ समय लगता है।

HTH


0

यहाँ एक स्क्रिप्ट है जो fsck ( स्रोत ) के लिए आपके फाइल सिस्टम की जाँच करती है :

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
कृपया बाहरी साइटों के लिंक न पोस्ट करें - उपयोगी जानकारी कॉपी करें और संदर्भ के लिए लिंक प्रदान करें।
फ्रेडरिक नीलसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.