ext4
ext4
개요
ext4(Extended File System version 4)는 리눅스 커널에서 널리 사용되는 저널링 파일 시스템으로, ext3의 차세대 아키텍처를 기반으로 한다. 2008년 12월 리눅스 커널 2.6.28에 공식적으로 메인스트림으로 병합되었으며, 이후 서버, 데스크톱, 임베디드 환경까지 아우르는 주요 리눅스 배포판의 기본 파일 시스템으로 자리 잡았다. ext4는 기존 ext2/ext3의 구조적 호환성을 유지하면서 대용량 저장 장치와 대규모 파일을 효율적으로 처리할 수 있도록 설계되었으며, 데이터 무결성 보장과 I/O 성능 최적화를 동시에 추구하는 것이 핵심 목표이다.
주요 특징
ext4는 파일 시스템의 안정성, 확장성 및 실시간 성능을 향상시키기 위해 여러 가지 기술적 개선 사항을 도입했다.
저널링(Journaling)
저널링은 파일 시스템 메타데이터와 데이터 변경 사항을 실제 저장소에 쓰기 전에 별도의 로그 영역(저널)에 먼저 기록하는 방식이다. 이는 갑작스러운 전원 차단이나 커널 패닉 시 파일 시스템 손상 위험을 크게 줄여준다. ext4는 세 가지 저널 모드를 지원하여 워크로드 특성에 맞게 설정할 수 있다:
- ordered(기본값): 메타데이터를 저널링하고, 데이터 변경은 메타데이터 쓰기 전에 정렬된 순서로 저장소에 기록한다.
- writeback: 메타데이터만 저널링하며, 데이터 쓰기는 백그라운드에서 비동기적으로 처리된다. 성능이 높으나 시스템 충돌 시 데이터 일관성 위험이 존재할 수 있다.
- journal: 메타데이터와 데이터를 모두 저널에 기록한 후 저장소에 적용한다. 가장 안전하지만 I/O 오버헤드가 크다.
익스텐트(Extents) 기반 블록 매핑
기존 ext3는 인노드(inode) 내에 직접/간접 블록 포인터를 배열하여 파일의 물리적 위치를 관리했다. ext4는 연속된 데이터 블록을 하나의 익스텐트로 묶어 관리하는 방식으로 전환했다. 이는 대용량 파일의 읽기/쓰기 시 탐색 오버헤드를 줄이고, 디스크 단편화 발생 시 블록 재배치 효율성을 크게 향상시킨다.
지연 할당 및 다중 블록 할당
파일 쓰기가 요청될 때 즉시 물리적 블록을 할당하지 않고, 가능한 한 많은 데이터를 메모리 버퍼에 모은 후 최적의 위치와 크기로 일괄 할당하는 방식이다. 이는 디스크 접근 횟수를 최소화하고 단편화를 방지하여 전반적인 쓰기 성능을 향상시킨다.
온라인 디프레그먼테이션 및 체크섬
e4defrag 유틸리티를 통해 파일 시스템을 마운트한 상태에서도 파일의 물리적 배치를 최적화할 수 있다. 또한 메타데이터 변경 사항에 대한 체크섬을 지원하여 데이터 손상을 조기에 감지하며, fsck 실행 시간을 기존 파일 시스템 대비 최대 10배 이상 단축한다.
기술적 구조 및 제한 사항
ext4는 블록 기반 파일 시스템으로, 기본 블록 크기는 일반적으로 1KB~4KB이며 최대 64KB까지 설정할 수 있다. 인노드 구조는 ext3와 하위 호환되지만, 익스텐트 테이블과 여러 확장 필드가 추가되어 대용량 처리 능력이 크게 향상되었다.
| 항목 | 지원 용량 (기본/최대) |
|---|---|
| 파일 시스템 최대 크기 | 1 TiB / ~1 EiB (커널 버전 및 블록 크기에 따라 다름) |
| 단일 파일 최대 크기 | 16 TiB / ~16 EiB |
| 디렉토리 내 최대 파일 수 | 무제한 (해시 트리 기반) |
참고: 위 용량은 리눅스 커널 4.1 이상 및 extent_size, metadata_csum 옵션 활성화 시 적용되는 이론적 한계치입니다.
ext4는 여전히 안정성 측면에서 검증된 시스템이지만, ZFS나 Btrfs와 같은 차세대 파일 시스템에 비해 내장 RAID, 스냅샷, 투명 압축 등 고급 기능은 제한적이다. 또한 구형 커널에서는 64비트 인노드 확장이 비활성화되어 최대 파일 시스템 크기가 16 TiB로 제한될 수 있으므로, 최신 환경에서는 다음 명령어를 통해 관련 기능을 활성화하는 것이 권장된다.
# ext4 고급 기능 확인 및 활성화 예시
tune2fs -O extent,uninit_bg,dir_nlink,huge_file,flex_bg /dev/sdX1
역사 및 채택 현황
ext4는 리눅스 커뮤니티의 핵심 개발자 테오도어 ts'o(Theodore Ts'o)가 주도하여 개발했다. 2008년 커널에 병합된 후, 우분투 10.04 LTS, 레드햇 엔터프라이즈 리눅스 6, 데비안 6 등 주요 배포판이 기본 파일 시스템으로 전환하면서 빠르게 보급되었다. 특히 서버 환경과 임베디드 시스템에서 낮은 오버헤드와 검증된 안정성으로 평가받으며, 안드로이드 운영체제의 내부 저장소 형식으로 오랫동안 사용되었다(최근에는 F2FS 등으로 대체되는 추세).
관련 문서 및 참고 자료
- 리눅스 파일 시스템 아키텍처 개요
- ext3 vs ext4 성능 비교 분석
[e2fsprogs](/doc/%EA%B8%B0%EC%88%A0/%EB%A6%AC%EB%88%85%EC%8A%A4/%EC%8B%9C%EC%8A%A4%ED%85%9C%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0/e2fsprogs)유틸리티 공식 문서- 리눅스 커널 소스 트리 (
Documentation/filesystems/ext4/) - man 5 ext4 (리눅스 매뉴얼 페이지)
본 문서는 리눅스 파일 시스템 기술 문서, 공식 마닐 페이지(man 5 ext4), 및 주요 배포판 기술 백서를 기준으로 작성되었습니다.
이 문서는 AI 모델(qwen3.6-35b-a3b@iq4_xs)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.