7. File System

1. 파일 시스템의 역할 #

  • 데이터를 저장하고, 탐색하고, 보호하는 계층
  • 저장 장치(HDD, SSD 등)의 추상화 계층을 제공
  • 운영체제는 파일 시스템을 통해 파일/디렉토리를 관리함

2. inode와 디렉터리 구조 #

inode (Index Node) #

  • 파일의 metadata를 저장하는 구조체
  • 각 파일은 고유한 inode 번호를 가짐 (inode table에 저장)
포함 정보예시
파일 크기512KB
생성/수정/접근 시간stat 명령으로 확인
접근 권한rwxr-xr–
링크 수hard link 개수
디스크 블록 위치 정보직접/간접 블록 주소 포함

=> inode는 filename은 저장하지 않음 -> directory entry가 filename과 inode 번호를 매핑

디렉터리 구조 #

  • 디렉터리 = (파일명 <-> inode 번호)의 목록
  • 계층적 트리 구조 (/, /home, /home/user/file.txt)

3. 파일 할당 방식 #

1) 연속 할당 (Continguous Allocation) #

연속된 디스크 블록에 파일 저장

장점단점
빠른 접근파일 크기 변경 어려움, 외부 단편화

-> CD-ROM 등 읽기 전용 미디어에 적합

2) 연결 할당 (Linked Allocation) #

  • 각 블록이 다음 블록의 포인터를 포함
    장점단점
    파일 크기 동적 변경 가능임의 접근 속도 느림 (랜덤 액세스 불가)

-> FAT (File Allocation Table)이 대표적인 예

3) 인덱스 할당 (Indexed Allocation) #

  • 별도의 인덱스 블록에 모든 데이터 블록 주소 저장
    장점단점
    빠른 임의 접근인덱스 블록의 크기 제한 있음

-> Unix 파일 시스템이 대표적 (inode 내부가 인덱스 역할)

Unix inode 구조 - 직접/간접 블록 #

블록설명
직접 블록 (0~11)바로 데이터 블록 주소
단일 간접 블록포인터 → 데이터 블록 주소들
이중 간접 블록포인터 → 포인터 → 데이터 블록
삼중 간접 블록포인터 ×3 → 매우 큰 파일 지원

📌 수백 MB ~ 수십 GB 크기 파일도 확장 가능

4. 파일 접근 권한 및 접근 제어 #

Unix 퍼미션 구조 (rwx) #

  • 세 그룹으로 분리: 소유자 / 그룹 / 기타 사용자
  • 각 그룹에 대해 read(r), write(w), execute(x) 권한 부여
    예시의미
    -rwxr-xr–소유자: rwx, 그룹: r-x, 기타: r–
    chmod 755 filerwxr-xr-x 권한 설정

접근 제어 확장 (ACL, Capability) #

  • ACL: 파일별로 사용자마다 세밀한 권한 설정
  • Capabilities: 커널에서 수행할 수 있는 동작 단위 권한화

5. 실무 예시 #

시스템특징
ext4 (Linux)inode 기반, 저널링 지원, 성숙한 안정성
FAT32 (USB 등)연결 할당 방식, 단순하지만 한계 있음
NTFS (Windows)인덱스 + ACL 기반, 대용량/보안 지원
ZFS / BtrfsCopy-on-Write, 스냅샷, 체크섬 포함

6. 자주 묻는 면접 질문 #

Q1. inode는 어떤 정보를 가지고 있나요?

A.

  • 파일의 메타데이터(크기, 생성/수정 시각, 권한, 링크 수, 디스크 블록 위치)를 저장하며, 파일명은 포함되지 않습니다. 파일명은 디렉토리 엔트리에서 inode 번호와 매핑됩니다.

Q2. 연속/연결/인덱스 할당의 차이를 설명해주세요.

A.

방식접근 성능파일 크기 유연성단편화
연속빠름 (임의 접근 가능)낮음외부 단편화
연결느림 (순차 접근만)높음없음
인덱스빠름 (임의 접근 가능)높음거의 없음

Q3. 대용량 파일을 inode로 어떻게 저장하나요?

A.

  • Unix inode는 직접 블록으로 시작하여, 단일 → 이중 → 삼중 간접 블록으로 확장할 수 있으며, 이를 통해 수십 GB까지의 대용량 파일을 관리할 수 있습니다.

Q4. 파일 시스템에서 ‘파일명’은 어디에 저장되나요?

A.

  • 디렉토리 엔트리에 저장됩니다. 디렉토리는 (파일명 → inode 번호) 매핑 테이블이며, 실제 파일 정보는 해당 inode에 있음.