개요

파일 시스템은 컴퓨터에서 파일이나 자료를 쉽게 발견 및 접근할 수 있도록 보관 또는 조직하는 체제를 가리키는 말이다. 디스크는 여러개의 논리적인 파티션으로 구별되며 이러한 파티션은 다시 논리적인 파일 시스템으로 구성되게 된다. 파일시스템은 boot block + super block + files로 구성되어 있다. 유닉스에서는 각각의 파일을 inode를 구조체를 사용하여 저장하고 관리하고 있다.

파일 시스템에서 다루는 중요한 관점 두가지는, 속도와 정보의 표현이다. 과연 어떻게 정보를 파일에 구조적으로 저장할 지와, 그러한 방법의 속도는 어떻게 하여야 증가시킬수 있을까가 중요한 연구 분야가 된다. 특히 Storage는 느리며, 정보의 손실의 위험도 있기 때문에 파일시스템은 이러한 Storage의 한계를 극복시키는 방법을 제공하여야 한다.

FileSystem은 File Offset을 Physical block number로 Mapping 시키는 함수를 포함하여야 한다. 이러한 Mapping은 linear byte address로 주로 표현되는데, 이를 Block-Oriented(4K)로 바꾸는 과정을 표함한다. 파일 시스템은 속도의 문제 때문에 한번에 4KB의 Block의 단위로 데이터를 저장하고 읽어오기 때문이다.

또한 많은 파일시스템은 Journaling을 이용하여 Stroage의 Volatile을 극복하여 Atomic한 저장을 지원하며, Dram Buffer Cache를 이용하여 CPU대비 매우 느린 Storage의 속도를 완충시키고자 한다.

특징

  1. 대부분의 파일은 매우 작은 파일이다.
  2. 파일시스템 용량의 대부분은 소수의 큰 파일이 차지한다.
  3. 대부분의 Access는 Sequential 이다.
  4. 특정 프로세스는 파일 시스템을 Random으로 사용한다.
  5. 대부분의 I/O Access는 Read이다.

UNIX의 파일시스템

File Properties

파일은 각각 아이노드에 저장될때 접근 권한과 같은 meta까지 저장된다. 이러한 메타 정보는 보안 / 접근 / 실행과 같은 여러 부분에서 유용하게 참조되며 사용되게 된다.

type-permissions-owner-group-size-date-name
drwxr-xr--x 3 apache:apache 4096 Nov 20 10:45 server.properties
Ordinary Files
  1. text, data, program으로 구성된다.
  2. 다른 파일이나 Directory를 포함하지 못한다.
  3. Filename은 name과 directory로 구성되어 있다.
  4. 256 character의 최대 길이로 저장될 수 있다.
Directory File 

다른 파일이나 디렉터리의 리스트를 가지는 파일이다. 디렉토리는 하드링크를 통해서 구현되어 있으며, 디렉토리의 각각의 구성은 file name을 inode로 연결하는 하드링크 맵핑이다. 하나의 아이노드에 여러개의 링크를 가질수 있으며, 하드링크는 파일을 직접 아이노드를 가르킴으로써 저장하는 것을 말한다. 다른 예는 소프트 링크로서 파일을 경로를 통해서 가르킨다.

I/O Device

Device에 쉽게 접근 할 수 있도록 device는 파일로 취급 받는다. network socket과 같은 것이 좋은 예시이다.

LINKS 
  1. 다른 파일에 대한 포인터
  2. 직접 링크를 거는 Hard Link와 간접적으로 링크를 거는 Soft Link로 나뉜다.

종류

  1. ext2/3/4
  2. ZFS
  3. FAT32/64