Linux의 fsck(8) 맨페이지에는 다음과 같은 종료 코드 표가 포함되어 있습니다.
The exit code returned by fsck is the sum of the following conditions:
0 No errors
1 Filesystem errors corrected
2 System should be rebooted
4 Filesystem errors left uncorrected
8 Operational error
16 Usage or syntax error
32 Checking canceled by user request
128 Shared-library error
종료 코드 2는 "시스템을 다시 시작해야 합니다"에 할당되어 있으므로 어떤 용도로 사용된다고 가정할 수 있습니다. 그러나 원칙적으로 fsck
시스템 작동에 전혀 중요하지 않은 일종의 외부 썸 드라이브를 확인한 후 이 종료 코드를 반환하는 것이 가능합니다. 이와 같이 필수적이지 않은 파일 시스템의 오류로 인해 재부팅이 필요하다는 것은 말도 안되는 것 같습니다. 특히 파일 시스템이 fsck
.
"시스템을 다시 시작해야 합니다" 종료 코드는 무엇을 의미합니까?실제로의미는?
답변1
이는 검사를 수행할 때 문제의 파일 시스템이 마운트되었고, fsck
오류를 수정하려면 디스크의 데이터를 실제로 수정해야 하며, 시스템을 다시 시작하지 않으면 파일 시스템을 수동으로 다시 마운트할 수 없음을 의미합니다.
주요 상황은 루트 파일 시스템에서 오류가 발견(및 수정)되는 경우입니다. 파일 시스템을 검사하기 위한 매우 멋진 initramfs 또는 복구 환경이 없다면 검사할 때 루트 파일 시스템을 실행하게 됩니다(따라서 읽기 전용으로 마운트됩니다).
성능상의 이유로 커널은 마운트된 파일 시스템의 캐시된 메타데이터를 재검증하지 않습니다( fsck
마운트된 파일 시스템의 커널을 제외하고 디스크의 데이터는 아무것도 변경하지 않기 때문입니다). 따라서 fsck
이 메타데이터 중 일부를 수정해야 하는 경우 커널은 커널(대부분의 UNIX 시스템에서는 불가능) 또는 사용자에게 파일 시스템을 마운트 해제한 다음 다시 마운트하여 커널이 수정된 메타데이터를 선택할 수 있도록 지시합니다. 루트 파일 시스템은 실제로 시스템 자체를 재부팅합니다.
답변2
이는 시스템을 다시 시작해야 함을 의미합니다.
fsck
구현에서는 일반적으로 필요한 경우에만 이 코드를 반환하도록 주의합니다. 예를 들어 e2fsck
마운트 시 루트 파일 시스템의 오류가 수정된 경우(보통 확인될 때까지 읽기 전용으로 마운트됨). 외장 드라이브에 넣으면 안됩니다.
사용 중인 특정 검사기에 대한 설명서를 확인해야 합니다. 예를 들어, fsck.fat
동일한 종료 코드를 사용하지 않고 맹목적으로 종료 코드를 2로 가정하면 다시 시작하면 예기치 않은 결과가 발생할 수 있습니다.