지난 글에서 파일 및 파일 관련된 system call에 대하여 간략히 정리하였다. 

이번에는 파일 시스템에 대하여 정리한다. 유닉스 파일시스템은 크게 다섯 부분으로 구성된다고 할 수 있다.

 

1. boot block

  • bootstrap에 필요한 파일들, 즉 bootstrap 프로그램이 위치하며 root 외에 일반 사용자와는 무관한 block이다.
  • 그 프로그램들은 유닉스를 부팅하거나 초기화하는 역할을 한다.

 

2. super block

  • 파일 시스템의 크기, i-node 정보, free block list 등 파일 시스템 관리에 필요한 정보들이 들어있다.
  • super block은 메모리에 적재되어 있으므로 시스템을 중지할 때는 반드시 수동으로 sync하도록 한다.

 

3 실린더 그룹 block

  • 실린더 그룹 내의 유효 block의 bitmap 정보로, 통계 정보가 들어있다.

 

4. i-node 

  • 파일 크기, 디스크 주소, 파일 유형, permisson, 생성시점 등이 기록된다.
  • 즉, 커널의 파일 관리에 있어 핵심이 되는 거의 모든 정보가 들어있다.
  • 하나의 파일이 생성되면 해당 파일은 파일명과 함께 i-node number를 가지고 해당 디렉토리에 저장되기 때문에 디렉토리에서 쉽게 i-node를 찾아 파일의 위치 정보를 알 수 있다.
  • 간혹 이 i-node 공간이 부족하면 파일 시스템 여유 공간이 충분함에도 불구하고 "No space left on device" 메세지가 난다. 이 메세지가 날때 파일을 지우면 다시 정상화될수 있지만 빈번하게 메세지가 난다면 튜닝이 필요하다.
  • mkfs -i 를 이용하여 i-node 수를 조정할 수 있는데 이러한 작업 이전에는 반드시 백업을 해둬야 한다. 예: mkfs -t ext4 -i inode_ratio /dev/...
  • inode_ratio는  /etc/mke4fs.conf 파일에서 확인가능하다.

 

< ls 명령어를 이용하여 특정 파일 혹은 디렉토리의 inode 확인 >

# ls -i java.txt
153603 java.txt
# ls -i web.txt
153577 web.txt
# ls -id oss
156002 oss

 

5. data block

  • 실제 데이터가 저장된다.

 

유닉스 파일 시스템 구조는 목적을 가지고 만들어졌다.

boot 및 최소한의 관리에 필요한 파일들이 위치

/dev

디바이스 파일들이 위치

/bin

시스템 binary 파일들이 위치 

/sbin

Standalone binary 파일들이 위치 (mount, sh, init 등)

/usr

시스템에서 설치한 파일들이나 온라인 매뉴얼들이 위치

/usr/local

사용자가 설치한 파일들이 위치

/usr/lib

아키텍처 의존 파일들이 위치

/usr/share

아키텍처 독립 파일들이 위치

/etc

시스템 관리를 위한 설정 파일들이 위치 (hosts, passwd, shadow 등)

/var

데이터 파일들이 위치