fsck는예상치 못한 시스템 종료시 일어나는 파일시스템의 불일치성을 체크하고 수정하는 그램이다.
- 부적당한 시스템의 셧다운
- Power Failure
- Hardware Failure
fsck는 link count 나 data block 의 값들을 사용해서 디스크의 이상유무를 체크하고 체크하는 항목은 아래와 같다.
super block
파일 크기, inode 수, 사용가능한 data block count, 사용가능한 inode count
cylinder froup block
파일에 의해 선점된 사용가능한 data blocks, 사용가능한 data block count, 사용가능한 inode count
inode 정보
잘못된 디렉토리 항목에 있는 잘못된 link counts , inode 크기와 실제로 참조하는 data block 수와의 불일치, 할당되거나 되지 않은 inodes
파일 시스템 data block
여러개의 inode를 가지고 있는 하나의 data block, 사용중인데 사용가능으로 표시된 data blocks, 사용가능한데 사용 중으로 표시된 data blocks
디렉토리 정보
디렉토리에서 잘못 할당된 inode 번호
Noninterative(preen) mode와 interactive mode 두가지가 있고 preen mode에서 예상치 못한 에러 발생시 시스템이 single-user mode로 되기 때문에 관리자는 interative mode로 실행해야 한다. user가 파일을 read/wirte 할 때 에러로 받아들여 파일을 지울 수 있기 때문에 파일시스템을 언마운트시키든지 single-user mode에서 실행하도록 한다.
fsck 단계
# fsck /dev/dsk/c0t0d0s6
** /dev/rdsk/c0t0d0s6
** Currently Mounted on /data1
** Phase 1 – Check Blocks and Sizes
** Phase 2 – Check Pathnames
** Phase 3 – Check Connectivity
** Phase 4 – Check Reference Counts
** Phase 5 – Check Cyl groups
430 files, 515526 used, 1409945 free (481 frags, 176183 blocks, 0.0% fragmentation)
- 초기 단계
초기단계동안에 명령라인의 문맥이 파싱되고 체크된다. 에러가 없다면 테이블이 설정되고 파일이 열린다.
bad inode number inode-number to gnode
존재하지 않는 inode가 이 내부적인 에러를 만든다. fsck가 종료된다.
Can’t open checklist file : filename /etc/vfstab
파일이 없거나 열 수 없다. fsck가 종료된다. 이 파일이 존재하고 열 수 있는지를 체크
Can’t open filename
이 에러는 파일시스템, filename을 열 수 없기 때문에 발생한다. fsck 가 interactive 모드에서 실행된다면 이 에러는 무시되고 fsck가 계속 진행될 것이다. 이 파일시스템의 raw device 의 읽고 쓰기가 가능한지 체크.
Can’t stat root
이 에러는 fsck가 root 디렉토리 상태에 대한 요청이 무시되어졌을 때 일어나고 fsck가 종료된다. 최근의 백업으로부터 파일시스템을 복구 해야한다.
Can’t stat filename
Can’t make sense out of name filename
이 에러는 파일 시스템, filename 에 대한 요청이 무시되었을 때 일어난다.
그외 메시지
INTERNAL INCONSISTENCY : MAGIC NUMBER WRONG
INTERNAL INCONSISTENCY : SIZE PREPOSTEROUSLY LARGE
INTERNAL INCONSISTENCY : TRASHED VALUES IN SUPER BLOCK
- 단계 1
** Phase 1 – Check Blocks and Sizes
이 단계는 inode의 무결성을 체크한다. inode type, 중복된 블록에 대한 inode block numbers, inode 크기,형식을 체크한다.
block number BAD I=inode-number
이 에러는 inode가 가능한 블록수의 범위를 초가한 블록번호를 참조했기 때문에 일어난다. 이 에러 상태는 너무 많은 블록 번호가 범위를 초가했다면 이 단계 후에EXCESSIVE BAD BLKS 에러메세지를 만든다. 이 에러는 단계 2와 4에서 BAD/DUP 에러 상태를 만든다
block-number DUP I=inode-number
하나 이상의 inode가 같은 data block-number를 사용했다는 것을 가르킨다. 이 에러는 단계 1에서 너무 많은 블록 번호를 가지면 EXCESSIVE DUP BLKS 메시지를 만든다. 이 에러는 단계 1B에서 일어나고 단계 2와 4에서 BAD/DUP 에러 상태를 만든다
EXCESSIVE BAD BLOCKS I=inode-number (CONTINUE)
이 에러는 하나의 inode에 너무 많은 데이터 블록이 파일시스템에 가능한 블록 번호의 범위를 초가했을 때 일어난다. CONTINUE 프롬프트 상에서 y를 선택하는 것이 fsck가 체크를 계속해서 하도록 하지만 fsck가 이 에러메세지가 없어 질 때 까지는 계속해서 진행하지 않는다.
EXCESSIVE DUP BLOCKS I=inode-number (CONTINUE)
이 에러는 inode 또는 사용가능한 inode list를 너무 많이 중복된 data block으로 적용시킨 것을 제외하고 이전 에러 메세지와 유사하다.
CONTINUE 프롬프트 상에서 y를 선택하는 것이 fsck가 체크를 계속해서 하도록 하지만 fsck가 이 에러메세지가 없어 질 때까지 진행하지 않는다.
INCORRECT BLOCK COUNT I=inode-number (number-of-BAD-DUP-or-missing-blocks shoud be number-of-blocks-in-filesystem) (CORRECT)
이 에러는 inode에 의해 사용된 블록 수와 파일시스템에 있는 블록수와 다르기 때문에 일어난다. CONTINUE 프롬프트에서 y를 선택해서 이에러를 바로잡으면 이전의 값으로 대체된다.
UNKNOWN FILE TYPE I=inode-number (CLEAR)
이 에러는 inode에서 데이터 값이 유효한 파일 타입(pipe, 특수문자, 특별한 block, regular, symbolic 링크, FIFO 파일, 디렉토리 등)을 가르키지 않을 때 일어난다.
fsck 가 preen 모드로 실행된다면 이 상태는 고쳐진다. CLEAR 프롬프트에서 y를 선택하면 이 inode를 포함하는 디렉토리에 대해 단계2에서 UNALLOCATED 에러를 일으킬 inode를 수정한다.
- 단계 2
** Phase 2 – Check Pathnames
이전 단계는 디렉토리의 무결성과 관련해서 나쁜 inode를 찾게 된다. 단계 2에서는 이 디렉토리의 무결성을 갖도록 바로 잡는다.
BAD INODE NUMBER FOR ‘.’ I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time
DIR=filename (FIX)
디렉토리 데이터는 파일에 대한 inode를 포함한다. 이것은 자신(.)과 상위 디렉토리(..)에 대한 항목을 포함한다. 이 에러는 디렉토리 inode 번호와 디렉토리의 파일내 inode번호가 다를 때 일어난다. FIX 프롬프트 상에서 y를 선택하면 . inode 번호 항목을 자신의 디렉토리에 있는 inode 번호로 바꾼다.
.. 항목과 실제적인 상위 디렉토리의 inode 사이의 불일성에 대한 에러 상태와 유사하다.
BAD INODE NUMBER FOR ‘..’ I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time
DIR=filename (FIX)
DIRECTORY CORRUPTED I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time
DIR=filename (SALVAGE)
이 에러는 디렉토리의 내부상태가 깨진 상태이자. SALVAGE 프롬프트에서 y를 선택한다면 디렉토리 데이터의 일부분을 잃어버릴 수도 있다. 그러나 디렉토리 테이터가 파일이름과 inode 번호의 mapping과 더 이상 관련이 없기 때문에 이 파일을 참조하는 데이터는 존재하고 단지 참조하지만 않을 뿐이다. 이 참조하지 않는 파일은 단계 3에서 lost+found 디렉토리에 링크되어 수정된다.
DUP/BAD I=inode-number OWNER=O MODE=M SIZE=file-size MTIME=modification-time TYPE=filename (REMOVE)
이 에러는 중복되거나 SKqmS 데이터 블록이 발견될 때 나타난다. PREEN 모드에서 이 중복되거나 잘못된 블록 참조는 제거되거나 REMOVE 프롬프트 상에서 y를 선택하면 똑같이 완성될 것이다.
다음과 유사한 에러이다.
DUP/BAD IN ROOT INODE (REALLOCATE)
이 문제는 root inode(inode number 2)에서 발견된다. REALLOCATE프롬프트 상에서 y를 선택하면 잘못된 inode를 바로 잡고 root에 대해 다른 것을 할당할 것이다. 존재했던 파일은 참조되지 않고 lost+found 디렉토리에 위치한다.
inode-number OUT OF FANGE I=inode-number NAME=filename (REMOVE)
디렉토리에 있는 filename 항목이 inode 리스트에 있는 마지막 번호보다 더 큰 값을 가진 경우이다. REMOVE 프롬프트 상에서 y를 선택하면 손상된 항목을 지운다.
UNALLOCATE I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time type=filename (REMOVE)
디렉토리 항목이 할당되지 않은 inode를 가지고 있는 경우이다. REMOVE프롬프트 상에서 y를 선택하면 이 항목을 지운다.
- 단계 3
** Phase 3 – Check Connectivity
참조하지 않는 디렉토리와 잘못된 lost+found 디렉토리들을 바로 잡는다.
DIR I=inode-number1 CONNECTED. PARENT WAS I=inode-number2
에러상태가 아니라 참고 메시지이다. fsck는 디렉토리가 lost+found 디렉토리에 성공적으로 위치해 있고 이것을반영하는 상위항목을 변하시켰음을 알리고 있는 것이다.
lost+found IS NOT A DIRECTORY (REALLOCATE)
lost+found 디렉토리 항목이 디렉토리가 아님을 가르킨다. REALLOCATE 프롬프트상에 y를 선택하면 디렉토리 inode를 할당할 것이다.
NO lost+found DIRECTORY (CREATE)
파일 시스템의 루트에서 lost+found 디렉토리가 발견되지 않는 경우이다. CREATE 프롬프트 상에서 y를 선택하면 이것을 만들고 디렉토리가 만들 수 없다면 단계 4에서 다시 나타날 것이다.
UNREF DIR I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time type=filename (RECONNECT)
디렉토리 inode가 다른 디렉토리 항목에서 발견되지 않은 경우이다.
RECONNECT 프롬프트에서 y를 선택하면 fsck는 lost+found 디렉토리에 이것을 위치해 놓고 성공했는지를 보여준다. 이 reconnection이 실패하면 UNREF 에러가 단계4에서 일어난다.
- 단계 4
** Phase 4 – Check Reference Counts
inode에서 link count를 바로 잡는다. 참조하지 않은 파일, lost+found 디렉토리, 잘못된 link counts, 잘못되었거나 중복된 data blocks, 사용하지 않는 inode count가 가지고 있는 문제들을 찾는다.
BAD/DUP type I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time (CLEAR)
잘못되었거나 중복된 블록이 단계1에서 발견되어 나타나는 에러이다. CLEAR 프롬프트에서 y를 선택하면 손상된 inode 의 항목을 제로로 하고 그것을 할당하지 않는다.
LINK COUNT I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time COUNT link-count SHOULD BE corrected-link-count (ADJUST)
이 에러는 디렉토리나 파일의 inode에서 link count 가 잘못된 경우 나타난다. ADJUST에서 y를 선택하면 link count를 바로잡는다. preen 모드에서 fsck는 참조하는 수가 증가하지 않는다면 자동으로 바로잡는다. 하드웨어 에러인 경우에 발생하고 적절한 메시지가 보여질 것이다.
UNREF FILE I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time type=filename (RECONNECT)
inode가 디랙토리에 연결되지 않았음이 발견될 때 일어나고 RECONNECT 프롬프트에서 y를 선택하면 fsck가 lost+found 디렉토리에 위치해 놓을 것이다.
UNREF FILE I=inode-number OWNER=UID MODE=file-mode SIZE=file-size MTIME=modification-time type=filename (CLEAR)
CLEAR 프롬프트에서 y를 선택해 inode를 할당하지 않게한다.
- 단계5
** Phase 5 – Check Cyl groups
실린더 그룹에서 사용가능한 블록 map과 사용된 inode map을 체크한다. 사용된 inode 번호 또는 사용가능 데이터 블록의 수가 리스트와 다를 때 문제가 발생한다.
CG charater-for-command-option : BAD MAGIC NUMBER
실린더 그룹 map이 잘못되었을 때 나타난다. preen 모드에서 fsck는 잘못된 map을 만들려고 한다. 이것이 잘못되면 fsck는 종료되고 최근의 것으로 백업하는 것이 바람직하다.
FREE BLK COUNT(S) WRONG IN SUPERBLK (SALVAGE)
수퍼블럭에 있는 사용가능한 블록 count가 실제 data block 수와 같지 않을 때 발생한다. SALVAGE 프롬프트 상에서y를 선택해서 fsck가 누퍼블럭에 올바른 값을 쓰게 한다. 수퍼블럭에서 잘못된 요약정보를 가르키는 다음 에러메세지와 유사하다.
SUMMARY INFORMATION BAD (SALVAGE)
- Cleanup 단계
파일시스템이 체크된다. fsck 내부적인 처리 구조를 정리하고 상태 메시지를 보여준다.
***FILE SYSTEM WAS MODIFIED ****
fsck 가 이 파일 시스템을 수정했음을 나타내고 파일시스템이 마운트되어지거나 root이면 시스템이 재부팅을 요청한다.
filename FILE SYSTEM STATE SET TO OKAY
파일 시스템이 안정됨을 나타낸다. fsck를 다시 실행시켜야하는지를 옵션 m을 사용해서 결정해라
filename FILE SYSTEM STATE NOT SET TO OKAY
파일시스템이 불안정함을 나타내고 fsck를 다시 실행시켜야하는지를 옵션 m을 사용해서 결정해라