재부팅 할 때 시스템이 fsck됩니까? 해 봅시다.

… 어떻게 알 수 있습니까?

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

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

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



답변

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가 있습니다.


답변

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

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

답변

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

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

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

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


답변

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

/ fastboot를 터치합니다

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


답변

다음 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 ~ $


답변

정기적으로 tunefs를 사용하여 정오 재부팅 전에 부팅 횟수와 시간을 재설정하여 fsck를 방지합니다. 부팅 시간의 차이는 놀랍습니다. 다음 단어는 fsck로 부팅 할 수 있도록 재설정했습니다.


답변

파일 시스템 목록을 더 편안하게 얻는 방법에 대해 생각했습니다.

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