재부팅 할 때 시스템이 fsck됩니까?


20

... 어떻게 알 수 있습니까?

서버를 재부팅하려고한다고 가정 해 봅시다. 가동 중지 시간을 최소화하고 싶습니다. "친구에게 전화를 걸면 부팅시 fsck에 도달하게됩니다"라는 별칭으로 재부팅을 래핑하는 것에 대해 생각합니다.

다음 질문입니다. "다음에하자"라고 말하는 가장 좋은 방법은 무엇입니까? 마지막 확인 날짜를 설정 하시겠습니까?

tune2fs가 많은 매개 변수를 설정할 수 있다는 것을 알고 있지만 어떻게 얻을 수 있습니까?


어떤 OS를 실행하고 어떤 파일 시스템을 사용하고 있습니까?
Alan H

좋은 점-Linux 버전 (주로 deb & 파생 상품) 및 ext2 또는 ext3
Tom Newton

답변:


19

fsck를 피하기 만하면 종료에 -f 옵션을 추가하면 도움이됩니다. fsck를 강제 종료하려면 shutdown -F를 종료하십시오.

tune2fs -l /dev/foo 흥미로운 정보를 알려줄 것입니다.

필요한 것을 추출하는 시작은 다음과 같습니다.

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

"다음 점검 후"날짜가 과거 인 경우 fsck가 있습니다.

파일 시스템 상태가 깨끗하지 않으면 fsck가 있습니다. (재부트 해제를 방해하는 재부팅 / 종료시 시스템에 문제가있는 경우에도 발생할 수 있습니다)

마운트 수가 최대 마운트 수에 도달하면 fsck가 있습니다.


감사합니다-shutdown -f를 사용하면 다음에 다시 부팅 할 때 fsck가 표시됩니까?
Tom Newton

시스템이 현재 fsck를 얻는 기준 중 하나를 충족한다고 가정하면, 다음에 재부팅하면 fsck가 대신 사용됩니다. "shutdown -f"는 시스템 시작시 fsck를 건너 뛰도록 지시하는 파일을 작성하지만 시스템 시작에서도 해당 파일을 제거합니다.
freiheit 2016 년

10

사용 tune2fs -l /path/to/device:

  • "Mount count"가 "Maximum mount counts"보다 큰 경우 -cmax -C를 변경하거나 count를 변경하는 데 사용하십시오.
  • "마지막 확인"이 "간격 확인"에 충분하지 않은 -i경우 간격 -T을 변경하거나 마지막으로 확인한 변경을 사용하십시오.

이것은 ext2 또는 ext3을 가정하지만 상당히 좋은 가정입니다.
David Pashley

David :이 질문은 tune2fs를 언급합니다 ...
freiheit

6

다른 옵션은 / etc / fstab에서 6 번째 필드를 업데이트하여 부팅시 fsck 검사를 생략하도록 수동으로 설정할 수 있다는 것입니다.

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

이것은 대부분의 fstab이 가진 것과 유사합니다. 1은 점검해야하고 루트 파일 시스템임을 의미하고, 2는 점검해야하지만 다른 파일 시스템과 병렬로 수행되고 0은 점검 건너 뛰기를 의미합니다.

파일 시스템에 관계없이 마찬가지입니다.


1

추측하지 않으려면 다음을 수행하십시오.

/ fastboot를 터치합니다

느린 검사를 피할 것입니다 (또는 검사가 실패하고 재부팅이 중단되면 총 실패).


1

다음 fsck가 언제 발생하는지 확인하기 위해 다음 perl 스크립트를 사용합니다.

#!/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에서 실행하므로 파일 시스템을 언제 확인할지 항상 알 수 있습니다. 확장 된 fsck 시간으로 고통받지 않는 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;
  }
'

나는 그것이 더 우아하게 이루어질 수 있다고 생각하지만 어쨌든 여기 있습니다. 하나를 파이프로 연결 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
외부 사이트에 대한 링크를 게시하지 마십시오. 유용한 정보를 복사하여 참조 할 수있는 링크를 제공하십시오.
Frederik Nielsen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.