개요

시스템 유틸리티 fsck(file system consistency check의 준말)는 유닉스, 유닉스 계열 운영 체제(예: 리눅스, macOS, FreeBSD)의 파일 시스템의 무결성을 검사하기 위한 도구이다. fsck를 파일 시스템의 무결성을 보장하기 위해서 많은 연산을 수행하기 때문에 매우 느리다. 디스크 볼륨의 크기가 커질수록 이러한 체킹은 수분에서 수시간까지도 늘어날 수 있다. 특히 RAID와 같은 경우에는 시스템 부팅만을 위해서 몇시간이 소요될 수도 있다. 따라서 이러한 한계를 극복하기 위해서 최신의 운영체제는 저널링을 이용하여 파일 시스템을 복구한다.

작동 방식

  1. super block: Fsck는 우선 superblock을 검사하여, superblock이 오염되지 않았음을 확인하게 된다. 만약 문제가 발생한다면 superblock의 백업 카피본을 이용하여 복구를 시도하거나, 무결성 검사를 진행하여 복구할 수 있는 경우 superblock을 복구하게 된다.
  2. free blocks: 이후 inode, indirect / single / double / triple blocks를 순환하며, 데이터시스템에 잘못 할당된 블럭이 있는지를 파악한다. 이러한 방식으로 block bitmap과 free blocks간의 inconsistency를 극복한다.
  3. inode state: inode의 각각의 field들이 제대로 할당 되어 있는지 확인 한다.
  4. inode link: inode의 link_count가 적절하게 되어 있는지 확인한다. 이는 fsck가 모든 파일 시스템을 iterate하면서 각각의 파일이 어떻게 참고 되고 있는지를 모두 확인한후 link_count와 비교함으로써 무결성을 검사한다. 만약 이 과정중에, link_count가 0이지만 (이 아이노드를 가르키는 곳이 없는 아이노드) 존재하는 아이노드가 발견되면 lost+found 디렉토리가 이 아이노드를 가르키게 한다.
  5. Duplicates: fsck는 중복 포인터를 검사한다. 즉 하나의 블럭에 대한 중복된 inode를 검사한다.
  6. Bad blocks: 할당할 수 있는 범위를 벗어난 블럭이 있는지, 아니면 할당 되지 않은 블럭이 bitmap에 마킹되어 있는지 와 같은 것들을 검사하여 고치게 된다.
  7. Directory checks: 디렉터리에 ., .. 기 포함되어 있는지, 아니면 각각의 디렉토리의 field가 적절하게 되어 있는지와 같은 것들을 검사하여 dentry의 무결성을 보장한다.

사용법

fsck [-lsAVRTMNP] [-r [fd]] [-C [fd]] [-t fstype] [filesystem...] [--] [fs-specific-options]