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
- The Universal Name: 모든 저장소를 '파일'이라는 하나의 추상화 전선으로 묶는 법을 배웁니다.
- Metadata Skeleton: 파일의 주민등록증(inode)과 마을 지도(superblock)의 하드웨어 배치를 익힙니다.
- The Search Engine: 문자로 된 경로명을 따라가며 실제 디스크 섹터 번호로 변환하는 물리 길찾기를 수행합니다.
- 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객체의 메모리 사상
- Common Interface: 모든 FS가 구현해야 하는
- How to Learn:
mount명령을 사용하여 서로 다른 유형의 장치(USB, HDD, Network)를 하나의 트리 구조로 묶어보는 물리 배치 실습- 커널 내의 'File Pointer'가 실제 물리적 파일 오프셋을 어떻게 추적하는지 상태 전이 확인
- Implement: 현재 마운트된 모든 파일 시스템의 유형과 물리 장치 경로를 출력하는 리포트
Recommended
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
8. References
Primary
- [P2] SWEBOK v4.0 - Software Construction / Runtime Efficiency (Storage Management) — Performance context.
- [P1] CS2023 - OS/Operating System Principles (File Systems) — Core requirements.
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'의 원인을 기술하고 해결 절차를 마련할 수 있는 가?