부팅시 fsck를 비 대화식으로 실행하려면 어떻게해야합니까?


19

1500 마일 떨어진 데이터 센터에 헤드리스 Ubuntu 12.04 서버가 있습니다. 시스템을 다시 부팅하면 두 번 fsck가 필요하다고 결정했습니다. 불행히도 우분투는 대화식 모드에서 fsck를 실행했기 때문에 데이터 센터의 누군가에게 가서 콘솔을 연결하고 Y 키를 눌러달라고 요청했습니다. 어떻게와 부팅시 비 대화식 모드에서 그 fsck를 실행 있도록 설정합니까 -y또는 -p(일명 -a) 플래그?

Ubuntu의 부팅 프로세스를 올바르게 이해하면 init는 mountall 을 호출하고 fsck를 호출합니다. 그러나 fsck가 호출되는 방식을 구성 할 방법이 없습니다. 이게 가능해?

(한 가지 제안 tune2fs -i 0 -c 0을하지 않으려면 주기적 fscks를 방지 하는 데 사용할 수 있다는 것을 알고 있습니다 . 약간 도움이 될 수 있지만 정전이 발생한 후 fsck에 대한 실제 이유가 있더라도 시스템을 다시 시작해야합니다. .)

후속 질문에 대한 답변으로, 내 / etc / fstab의 관련 세부 정보는 다음과 같습니다. 나는 우분투가 넣은 것에서 이것을 편집했다고 생각하지 않습니다.

UUID=3515461e-d425-4525-a07d-da986d2d7e04 /               ext4    errors=remount-ro 0       1
UUID=90908358-b147-42e2-8235-38c8119f15a6 /boot           ext4    defaults        0       2
UUID=01f67147-9117-4229-9b98-e97fa526bfc0 none            swap    sw              0       0

1
이 질문과 관련 답변 /etc/default/rcS은 2019 년에는 실제로 유효하지 않으며 Ubuntu 16 및 Ubuntu 18은 이제 systemd를 사용합니다. systemd에 대한 전체 이야기를 모르지만 fsck.repair구성 / 커널 명령 줄 옵션이 관련이있는 것 같습니다. 워드 프로세서는 현재의 기본이라고 preen하는 수단 -p. 또한 설정할 수 있습니다 yes에 대한 -y. /etc/default/grub이것을 설정하는 장소 일 수 있습니다. 더 많은 지식을 가진 사람이 현대적인 체계적인 답변을 제공 할 수 있다면 감사하겠습니다.
넬슨

답변:


29

내가 찾고 오전 설정에 등 / 기본 /하도록 rcS / , FSCKFIX=yes. 이것은 "부팅 중에 불일치가있는 파일 시스템을 자동으로 복구"를 의미하며 -y플래그 와 함께 fsck가 실행되도록합니다 . no우분투 시스템 모두에 설정되었습니다 .

로 설정되어 있어도 no부팅 시간 fsck는 여전히 약간 비대화 형입니다. mountall은의 -a동의어 인 fsck를 사용하여 -p"인간의 개입없이 안전하게 해결할 수있는 모든 파일 시스템 문제를 자동으로 수정합니다"라는 의미입니다. 분명히 -p할 수있는 안전하지 않은 수정 사항이있는 경우 대화 형 모드로 떨어진다. 완전 자동으로 실행하려면 다음이 필요 -y하거나 FSCKFIX=yes.

다음은 mountall.c의 관련 코드입니다.

if (fsck_fix || mnt->fsck_fix) {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-y"));
} else {
  NIH_MUST (nih_str_array_add (&args, NULL, &args_len, "-a"));
}

시스템이 fsck.repair=yesGRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub
설치된

2

Ubuntu 15,16,17+의 경우 FSCKFIX 값 설정은 lib / init / vars.sh에 있습니다.

명령 grep -r FSCKFIX * 2>/dev/null을 사용 하여 찾을 수 있습니다 .


1
감사! 긍정적이지 않지만 해당 파일의 주석은에서 설정을 구성해야한다고 제안합니다 /etc/default/rcS. /lib/init/vars.sh에 대한 기본값이 FSCKFIX있지만 /etc/default/rcS이를 무시할 수있는 소스 가 있습니다. 새로 설치된 Ubuntu 18 시스템에 rcS파일 이 전혀 없었 습니다.
Nelson

1

fstab에이를 일으킬 수있는 플래그가 없는지 확인하고 init 스크립트를 확인하십시오. (사용중인 위치를 찾기 위해 'fsck'에 대한 초기화 스크립을 grep하십시오.) 내 시스템은 비 대화식 fsck를 실행하므로 여기에는 내 fstab의 사본과 / etc / init / mountall 스크립트의 일부가 있습니다.

$ cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    nodev,noexec,nosuid 0       0
UUID=acbe3514-33a3-4170-b1be-df7b8460a49a /               ext4    errors=remount-ro 0       1
UUID=d361f696-7abc-11e1-9043-5711de71ade6 /home           ext4    defaults        0       2
UUID=213e032c-fce9-4e1b-9d64-0779f0db4208 none            swap    sw              0       0

/ etc / init / mountall의 스 니펫

script
    . /etc/default/rcS
    [ -f /forcefsck ] && force_fsck="--force-fsck"
    [ "$FSCKFIX" = "yes" ] && fsck_fix="--fsck-fix"

    # set $LANG so that messages appearing in plymouth are translated
    if [ -r /etc/default/locale ]; then
        . /etc/default/locale
        export LANG LANGUAGE LC_MESSAGES LC_ALL
    fi

    exec mountall --daemon $force_fsck $fsck_fix
end script

1
도와 주셔서 감사합니다. grep FSCKFIX /etc/default/rcS당신의 시스템에 무엇을 말하고 있는지 말씀해 주 시겠습니까?
넬슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.