再起動するとシステムはfsckしますか?


20

...そして、どうやって見つけるのですか?

サーバーを再起動しようとしています。ダウンタイムを最小限に抑えたいので、「バディにハングアップして、ブート時にfsckをヒットする」というエイリアスでリブートをラップすることを考えてください。

次の質問..「次回はそれをやろう」と言うのに最適な方法は何ですか?最終確認日を設定しますか?

tune2fsが多数のパラメーターを設定できることを知っていますが、どのようにemを取得しますか


どのOSを実行しており、どのファイルシステムですか?
アランH

良い点-Linuxのバージョン(主にdebと派生物)およびext2またはext3
トムニュートン

回答:


19

fsckを避けたいだけなら、shutdownに-fオプションを追加することで解決できます。shutdown -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が発生します。


感謝-シャットダウン-fを使用した場合、次の再起動では代わりにfsckが取得されますか?
トムニュートン

システムが現在fsckを取得するための基準の1つを満たしていると仮定すると、はい、次の再起動で代わりにfsckが取得されます。「shutdown -f」は、システムの起動にfsckをスキップするように指示するファイルを作成しますが、システムの起動もそのファイルを削除します。
freiheit

10

を使用してtune2fs -l /path/to/device

  • 「マウント数」が「最大マウント数」よりも大きい場合-c、最大値の-C変更またはカウントの変更に使用します
  • 「最後のチェック」が「チェック間隔」に十分に最近ではない場合-i、間隔の-T変更または最後のチェックの変更に使用します

これはext2またはext3を想定していますが、かなり良い仮定です。
デビッドパシュリー

David:質問にはtune2fsが記載されています...
freiheit 2009年

6

もう1つのオプションは、/ etc / fstabの6番目のフィールドを更新することで、ブート時にfsckチェックを手動でスキップできるようにすることです。

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

これは、ほとんどのfstabにあるものと似ています。1はチェックする必要があり、ルートファイルシステムである、2はチェックする必要があるが、他のファイルシステムと並行して実行されることを意味します。

これは、ファイルシステムに関係なく当てはまります


1

推測したくない場合-これを行います:

/ fastbootをタッチします

また、遅いチェック(または、さらに悪いことに、チェックが失敗して再起動が停止した場合の全体的な失敗)を回避することは確実です。


1

次のperlスクリプトを使用して、次のfsckがいつ発生するかを確認します。

#!/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を使用するようになりました。

典型的な出力は次のようなものです:

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

どうやら、スクリプトは「次のチェック後:」属性を評価しません!
xebeche

0

定期的にtunefsを使用して、fsckを防ぐために、昼間のリブートを行う前にブートカウントと時間をリセットします。起動時間の違いは素晴らしいです。あとで、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;
  }
'

もっとエレガントにできると思いますが、とにかくここにあります。これを1つにパイプxargs -r df -hすると、ファイルシステムの大きさもすぐにわかります。

上記のコードでは、「次のチェック」の時間が(NOW + 120秒)と比較されることに注意してください。

HTH


0

ファイルシステムのfsck(source)を確認するスクリプトは次のとおりです。

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
外部サイトへのリンクを投稿しないでください-有用な情報をコピーして、参照用のリンクを提供してください。
フレデリックニールセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.