본문 바로가기
Miscellaneous

UNIX (4) - FILE SYSTEM

열린기술자·2014년 7월 17일·조회 3,085

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

이번에는 파일 시스템에 대하여 정리한다. 유닉스 계열 파일 시스템은 구현 방식에 따라 세부 구조가 다르지만, 전통적으로 다음과 같은 영역으로 나누어 설명할 수 있다.

유닉스 파일 시스템의 주요 구성 요소

1. boot block

  • 부트스트랩에 필요한 코드, 즉 bootstrap 프로그램이 위치하는 영역이다.
  • 그 프로그램들은 유닉스를 부팅하거나 초기화하는 역할을 하며, 일반 사용자가 직접 다루는 파일 영역과는 구분된다.

2. super block

  • 파일 시스템의 크기, i-node 정보, free block list 등 파일 시스템 관리에 필요한 정보가 들어 있다.
  • super block의 정보는 메모리에 적재되어 사용되므로, 시스템을 중지하거나 파일 시스템을 언마운트하기 전에는 데이터가 디스크에 반영되도록 주의해야 한다. 필요하면 sync 명령으로 버퍼의 내용을 디스크에 기록할 수 있다.

3. cylinder group block

  • 실린더 그룹 내의 유효 block에 대한 bitmap 정보와 통계 정보가 들어 있다.
  • 이 구조는 파일과 i-node, data block을 가능한 한 가까운 위치에 배치하여 디스크 접근 비용을 줄이기 위한 목적으로 사용된다.

4. i-node

  • 파일 크기, 디스크 주소, 파일 유형, permission, 생성 시점 등이 기록된다.
  • 즉, 커널의 파일 관리에 있어 핵심이 되는 거의 모든 메타데이터가 들어 있다. 단, 파일명 자체는 i-node가 아니라 디렉터리 엔트리에 저장된다.
  • 하나의 파일이 생성되면 해당 파일은 파일명과 함께 i-node number를 가지고 해당 디렉터리에 저장되기 때문에, 디렉터리에서 i-node를 찾아 파일의 위치 정보를 알 수 있다.
  • 간혹 i-node 공간이 부족하면 파일 시스템의 여유 공간이 충분함에도 불구하고 No space left on device 메시지가 나타난다. 이 메시지가 날 때 파일을 지우면 다시 정상화될 수 있지만, 빈번하게 발생한다면 파일 시스템 생성 시의 i-node 비율을 점검하는 등의 튜닝이 필요하다.
  • mkfs 계열 명령의 -i 옵션을 이용하여 i-node 수와 관련된 비율을 조정할 수 있다. 이러한 작업은 기존 파일 시스템을 새로 만드는 작업이므로, 실행 전에는 반드시 백업을 해두어야 한다. 예: mkfs -t ext4 -i inode_ratio /dev/...
  • inode_ratio의 기본값은 환경에 따라 다르며, ext 계열 파일 시스템에서는 보통 /etc/mke2fs.conf에서 관련 설정을 확인할 수 있다.

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

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

위 예시에서 파일명 앞에 출력되는 숫자가 inode number이다. 디렉터리도 파일의 한 종류이므로 ls -id처럼 확인할 수 있다.

5. data block

  • 실제 데이터가 저장되는 영역이다.
  • 일반 파일의 내용뿐 아니라 디렉터리의 엔트리 정보도 data block에 저장된다.

주요 디렉터리 구조

유닉스 파일 시스템 구조는 목적을 가지고 만들어졌다. 아래는 대표적인 디렉터리와 그 역할이다.

/

최상위 디렉터리이며, 부팅 및 최소한의 관리에 필요한 파일과 디렉터리들이 위치한다.

/dev

디바이스 파일들이 위치한다.

/bin

기본 사용자 명령에 해당하는 binary 파일들이 위치한다.

/sbin

시스템 관리에 필요한 standalone binary 파일들이 위치한다. 예를 들면 mount, init 등이 있다.

/usr

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

/usr/local

사용자가 직접 설치한 파일들이 위치한다.

/usr/lib

라이브러리 등 아키텍처 의존 파일들이 위치한다.

/usr/share

문서, 매뉴얼, 공통 리소스처럼 아키텍처에 독립적인 파일들이 위치한다.

/etc

시스템 관리를 위한 설정 파일들이 위치한다. 예를 들면 hosts, passwd, shadow 등이 있다.

/var

로그, 캐시, 스풀처럼 실행 중에 크기나 내용이 자주 변하는 데이터 파일들이 위치한다.

관련 글

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.