콘텐츠로 바로가기

VFS & Filesystem Internals

서로 다른 수많은 파일 시스템을 하나의 표준 방식으로 다룰 수 있게 해주는 가상 파일 시스템(VFS) 계층과, 인덱스 노드(inode) 및 물리적 저장 구조를 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

가상 파일 시스템 및 파일 시스템 내부(VFS & Filesystem Internals, VFI)는 운영체제가 복잡한 물리 저장 장치의 '섹터와 블록'을 인간이 이해할 수 있는 '파일과 폴더'라는 논리적 이름표로 변환해주는 지능형 행정 체계입니다.

하드디스크에는 수조 개의 비트가 흩어져 있습니다. 학습자는 어떤 장치나 포맷(ext4, NTFS, FAT32)이라도 동일한 open(), read() 함수로 접근할 수 있게 만드는 **VFS (Virtual File System)**의 추상화 물리 구조를 배웁니다. 또한, 파일의 이름 대신 실제 물리 위치 정보를 담고 있는 핵심 사물함인 **인덱스 노드(inode)**의 구조와, 디렉터리가 파일 이름을 inode 번호에 연결하는 **디렉터리 엔트리(dentry)**의 물리적 매핑 메커니즘을 심도 있게 다룹니다. 이를 통해 '데이터가 저장되는 물리적 영속성'의 하부 지도 설계 능력을 확보합니다.

2. Scope & Boundaries

In-Scope

  • VFS Abstraction: 함수 포인터를 통한 운영체제-파일시스템 간의 물리적 인터페이스(VFS Object)
  • Metadata Internals: inode, superblock, dentry의 정의와 물리 메모리 상주 구조
  • Pathname Resolution: /usr/bin/python과 같은 경로를 따라가며 물리 주소를 찾는 과정
  • Filesystem Types: 블록 파일시스템(ext4), 네트워크 파일시스템(NFS), 가상 파일시스템(procfs, sysfs)의 물리 분류

Out-of-Scope

  • 개별 파일 시스템(예: ext4)의 상세 저널링 알고리즘 (03-03-04 노드에서 분담)
  • 데이터베이스 고유의 인덱싱(B-Tree 등) 상세 (06. Data Management 영역으로 위임)

Boundaries

  • VFI vs. Page Cache: Page Cache가 '파일의 내용 데이터'를 관리한다면, VFI는 '파일의 정체성(이름, 권한, 위치)'을 관리하는 메타데이터 물리계층에 집중합니다.

3. Counterexample

  • 단순히 "파일을 저장하는 곳"이라 설명하는 것은 VFI 학습이 아닙니다. 같은 파일이라도 서로 다른 디렉터리에서 **하드 링크(Hard Link)**를 통해 참조될 때, 왜 물리적인 inode는 하나만 존재하는지 입증할 수 있어야 하며, 리눅스의 /proc 폴더 내 파일들이 왜 용량이 0 byte이면서도 읽을 때마다 값이 변하는지 '가상 물리 인터페이스(Virtual Interface)' 관점에서 설명하지 못한다면 VFI의 본질을 이해하지 못한 것입니다.

4. Prerequisites

  • Direct Memory Access (DMA) Mechanics (Basic): 장치-메모리 간 전송 기초가 필수입니다. (02-05-02 DMM)
  • Page Cache & I-O Stack (Recommended): 입출력 경로의 전반적 흐름 이해가 권장됩니다. (03-03-02 PCI)

5. Learning Map

  1. The Universal Name: 모든 저장소를 '파일'이라는 하나의 추상화 전선으로 묶는 법을 배웁니다.
  2. Metadata Skeleton: 파일의 주민등록증(inode)과 마을 지도(superblock)의 하드웨어 배치를 익힙니다.
  3. The Search Engine: 문자로 된 경로명을 따라가며 실제 디스크 섹터 번호로 변환하는 물리 길찾기를 수행합니다.
  4. Pseudo Physics: 실제 저장 장치 없이 커널 정보만으로 파일을 흉내 내는 가상 파일시스템을 완성합니다.

6. Learning Topics

Basic

Core: 파일 시스템 추상화와 VFS (VFS Foundations)

  • Why to Learn: 프로그램이 특정 하드웨어 제조사에 의존하지 않고 어디서나 파일을 읽고 쓰게 하기 위함입니다.
  • What to Learn:
    • Common Interface: 모든 FS가 구현해야 하는 file_operations 물리 인터페이스
    • Superblock: 파일 시스템 전체의 물리적 특성(블록 크기, 마운트 정보) 보관
    • VFS Objects: file, dentry, inode 객체의 메모리 사상
  • How to Learn:
    • mount 명령을 사용하여 서로 다른 유형의 장치(USB, HDD, Network)를 하나의 트리 구조로 묶어보는 물리 배치 실습
    • 커널 내의 'File Pointer'가 실제 물리적 파일 오프셋을 어떻게 추적하는지 상태 전이 확인
  • Implement: 현재 마운트된 모든 파일 시스템의 유형과 물리 장치 경로를 출력하는 리포트

Core: 인덱스 노드와 디렉터리 물리 (inode & Directory)

  • Why to Learn: 파일 이름이 바뀌어도 데이터가 유지되는지, 권한 제어가 어떻게 하드웨어적으로 보호되는지 알기 위해서입니다.
  • What to Learn:
    • inode Internals: 파일 소유자, 권한, 생성 시간, 데이터 블록 포인터 집합
    • Dentry Mechanics: 파일 이름을 inode 번호로 빠르게 사상하기 위한 커널 캐시 물리
    • Direct/Indirect Blocks: 계층적 포인터를 통한 대용량 파일의 물리적 주소 지정
  • How to Learn:
    • ls -i 명령으로 파일명과 inode 번호의 관계를 확인하고, 'Hard Link' 생성 시 번호 변화 관찰 실습
    • inode가 가득 찼을 때(Disk Space는 남았음에도 불구하고) 파일 생성이 실패하는 물리적 한계점 분석
  • Implement: 특정 파일의 inode 정보를 읽어와 권한 정보를 수리적으로 해석하는 툴

Practical

Core: 경로 분석과 파일 열기 로직 (Pathname Resolution)

  • Why to Learn: /a/b/c를 찾을 때 운영체제가 디스크를 몇 번이나 긁어야 하는지 그 성능 물리 비용을 계산하기 위함입니다.
  • What to Learn:
    • Step-by-Step Resolution: 각 경로 세그먼트마다 dentry와 inode를 번갈아 찾는 물리 시퀀스
    • Mount Point Transition: 한 파일 시스템에서 다른 파일 시스템으로 경로가 넘어갈 때의 트랩 물리
    • Symbolic Link Physics: 경로 분석 도중 새로운 경로를 만나 재시작하는 가상 점프 과정
  • How to Learn:
    • 매우 깊은 디렉터리 구조에서 파일을 열 때의 시스템 호출 지연 시간(Latency) 측정 실습
    • 경로 캐시(dcache)가 히트(Hit)했을 때와 미스(Miss)했을 때의 물리적 연산량 비교 대조
  • Implement: 주어진 절대 경로를 따라가며 각 단계별 inode 번호를 추적하는 경로 분석 로직

Advanced

Core: 특수 파일 시스템과 커널 인터페이스 (Procfs & Sysfs)

  • Why to Learn: 커널의 속마음(상태 정보)을 엿보거나 물리 설정을 파일 쓰기 한 번으로 바꾸는 고수준 제어 기술을 확보하기 위함입니다.
  • What to Learn:
    • procfs: 실행 중인 프로세스와 커널 실행 정보의 가상 물리 파일 사상
    • sysfs: 시스템에 연결된 물리 하드웨어 계층 구조의 실시간 맵
    • Interface Callbacks: 파일 읽기 요청 시 커널 함수를 즉시 가동하는 동적 물리 데이터 생성
  • How to Learn:
    • /proc/cpuinfo 파일을 읽었을 때, 왜 이 파일이 실제 디스크를 점유하지 않는지 물리적 휘발성 증명 실습
    • /sys 하위의 전원 관리 파일을 수정하여 하드웨어의 클록 주파수를 물리적으로 바꾸는 제어 시연
  • Implement: 커널의 특정 메모리 변수 값을 텍스트 형태로 노출하는 자신만의 작은 가상 파일 시스템 스켈레톤

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
VFS 다수의 물리 파일 시스템 위에 공통 인터페이스를 씌워 앱에게 표준 API를 제공하는 추상화 계층입니다. 기본 추상화 엔진 Interface / Driver Syscall 특정 FS 이름이 아님 P1:CS2023 core
inode (아이노드) 파일의 실제 데이터가 아닌 파일 자체의 속성 정보와 물리 위치를 담고 있는 고유 관리 블록입니다. 기본 메타데이터 핵 Metadata / Link File Name 파일 이름을 포함하지 않음 P1:CS2023 core
Mount (마운트) 특정 물리 장치를 운영체제의 전체 파일 계층 트리(VFS) 중 한 지점에 결합하는 물리적 행정 절차입니다. 추천 장치 결합 Root / Path Attach '단순 연결' 이상의 논리 결합 Industry Unix core
procfs 커널 내부의 데이터나 프로세스 정보를 일반 파일처럼 읽고 쓰게 해주는 램 기반의 가상 파일시스템입니다. 실무 동적 정보 노출 sysfs / Debug Disk FS 디스크 공간을 점유하지 않음 Industry Internals core

8. References

Primary

Secondary

  • [Understanding the Linux Kernel] Bovet & Cesati — Detailed VFS implementation.
  • [Operating Systems: Three Easy Pieces] Remzi — The File System Abstraction.

Industry

  • [Kernel.org: Overview of the Virtual File System] — Official Linux documentation.
  • [Microsoft: Windows File System Architecture] — NTFS and Filter Drivers.

9. Final Checklist

Primary

  • '모든 저장소는 파일이다(Everything is a file)'라는 철학이 VFS를 통해 어떻게 물리적 호출 구조로 완성되는지 설명 가능한가? (P1)
  • 'inode'가 가지고 있는 정보 중 왜 '파일 이름'은 제외되는지, 디렉터리와의 물리적 관계를 통해 입증할 수 있는 가? (P1)

Secondary

  • '심볼릭 링크'와 '하드 링크'가 수정되었을 때 디스크 상의 inode 참조 카운트와 데이터 물리 상태의 차이를 소통 가능한가?
  • 대용량 파일 시스템 탐색 시, 왜 dentry 캐시가 시스템 전체의 UI 응답 속도를 좌우하는지 물리적 인과관계를 도출할 수 있는 가?

Industry

  • 임베디드 리눅스 시스템 구축 시, /proc/sys를 활용하여 장치 드라이버의 물리적 상태를 실시간 모니터링하는 방안을 제안할 수 있는 가? (SFIA)
  • 루트 파일시스템(Root FS)이 마운트되지 않았을 때 커널이 부팅 과정에서 겪게 되는 물리적 'Panic'의 원인을 기술하고 해결 절차를 마련할 수 있는 가?