지난 글에서 파일 및 파일 관련된 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
데이터 파일들이 위치