Appearance
파일 시스템(File System)
파일 시스템은 저장장치 위에 있는 데이터를 파일과 디렉터리 형태로 조직하고, 이름을 붙이고, 보호하고, 영속적으로 보관하는 방법이다.
즉, 단순히 "파일을 찾기 쉽게 만드는 것"만이 아니라 다음 문제를 함께 해결한다.
- 어디에 저장할지
- 어떤 이름으로 접근할지
- 누가 읽고 쓸 수 있는지
- 장애가 나도 어떻게 일관성을 유지할지
특징
- 대부분 커널 안에서 동작하지만, FUSE처럼 사용자 공간 파일 시스템도 존재한다.
- 계층적 디렉터리 구조를 제공한다.
- 보통 블록 장치 위에 구축되지만, 한 파일 시스템이 여러 장치를 묶어 사용할 수도 있다.
역할
- 파일과 디렉터리 관리
- 공간 할당 및 회수
- 메타데이터 관리
- 접근 권한과 공유 제어
- 무결성 및 장애 복구 지원
주된 목적
- 데이터를 영속적으로 저장
- 이름 기반 접근 제공
- 공간을 효율적으로 배치
- 권한과 일관성을 관리
파일 시스템 자체의 1차 목적이 "메모리와 디스크 속도 차이를 줄이는 것"은 아니다. 다만 운영체제는 page cache / buffer cache 를 함께 사용해 성능을 높인다.
구조
- 메타데이터 영역: superblock, inode, 디렉터리 엔트리, 할당 비트맵 등
- 데이터 영역: 실제 파일 내용이 저장되는 블록
- 파일 시스템에 따라 journal 또는 copy-on-write 메커니즘이 추가되기도 한다
접근 방법
순차 접근(Sequential Access)
처음부터 순서대로 읽고 쓰는 방식
로그 파일, 스트리밍 데이터처럼 앞에서 뒤로 읽는 패턴에 잘 맞는다.
직접 접근(Direct Access)
임의의 오프셋으로 바로 이동해 읽고 쓰는 방식
현대 파일 API의 기본 모델에 가깝다. 데이터베이스나 대용량 파일 처리에서 중요하다.
색인 기반 접근(Indexed Access)
별도 색인 구조를 두고 원하는 레코드나 블록을 빠르게 찾는 방식
데이터베이스, 검색 시스템, 일부 파일 시스템 내부 구조에서 많이 사용된다.
디렉터리와 디스크 구조
1단계 디렉터리
모든 파일이 한 디렉터리에 있는 가장 단순한 구조
구현은 쉽지만 이름 충돌이 심하고 사용자 수가 늘면 관리가 어렵다.
2단계 디렉터리
사용자별 디렉터리를 두는 구조
서로 다른 사용자가 같은 파일 이름을 써도 충돌을 줄일 수 있다.
트리 구조 디렉터리
오늘날 가장 일반적인 다단계 구조
디렉터리 아래에 하위 디렉터리를 둘 수 있어 계층적 관리가 가능하다.
그래프 구조 디렉터리
링크를 통해 하나의 파일이나 디렉터리를 여러 경로에서 참조할 수 있는 구조
하드 링크와 심볼릭 링크가 대표 예시다. 다만 순환 참조가 생기면 탐색이 어려워질 수 있으므로, 실제 시스템은 보통 디렉터리 하드 링크를 제한하거나 심볼릭 링크 해석 깊이를 제한한다.