{{위키데이터 속성 추적}}
{{각주 부족|날짜=2024-05-17}}
{{소문자}}
{{파일 시스템 정보
| name                    = ext4
| full_name               = 4차 확장 파일 시스템<br />Fourth extended file system
| developer               = Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, [[:en:Theodore Ts'o|Theodore Ts'o]], Eric Sandeen, Sam Naghshineh 등
| introduction_os         = [[리눅스]] 2.6.28, 2.6.19
| introduction_date       = '''안정판:''' 2008-10-21<br />'''불안정판:''' 2006-10-10
| partition_id            = 0x83 ([[마스터 부트 레코드|MBR]])<br />[[기본 데이터 파티션|EBD0A0A2-B9E5-4433-87C0-68B6B72699C7]] ([[GUID 파티션 테이블|GPT]])
| directory_struct        = [[링크드 리스트]], [http://ext2.sourceforge.net/2005-ols/paper-html/node3.html hashed B-tree]
| file_struct             = Extents/Bitmap
| bad_blocks_struct       = 테이블
| max_filename_size       = 256 바이트
| max_files_no            = 40억 (파일시스템 작성 시간에 지정됨)
| max_volume_size         = 1 [[엑스비바이트|EiB]]
| max_file_size           = 16 [[테비바이트|TiB]] (4k 블록 파일 시스템 기준)
| filename_character_set  = NUL ('\0') 및 '/'을 제외한 모든 바이트
| dates_recorded          = 수정 (mtime), 특성 수정 (ctime), 접근 (atime), 삭제 (dtime), 작성 (crtime)
| date_range              = 1901년 12월 14일 - 2514년 4월 25일
| date_resolution         = 나노초
| forks_streams           = 아니오
| attributes              = extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, [[Orlov block allocator|orlov]], oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
| file_system_permissions = [[POSIX]]
| compression             = 아니오
| encryption              = 아니오
| single_instance_storage = 아니오
| OS                      = [[리눅스]]<br />[[마이크로소프트 윈도우|윈도우]] (ext2fsd 이용시)
}}
'''ext4'''('''ext'''ended file system '''4''' , 확장된 파일 시스템 4)는 [[리눅스]]의 [[저널링 파일 시스템]] 중 하나로, ext3 파일 시스템의 향상된 버전이다.

== 역사 ==
64비트 기억 공간 제한을 없애고 ext3의 성능을 향상시키며, [[하위 호환성]]이 있는 확장 버전으로서, 많은 부분이 본래, [[러스터 (파일 시스템)|러스터]] 파일시스템을 위해 [[클러스터 파일 시스템스]]사에서 개발되었다.<ref name="Mathur">{{웹 인용
 |제목       = The new ext4 filesystem: current status and future plans
 |publisher    = Red Hat
 |location     = Ottawa, ON, CA
 |year         = 2007
 |work         = Proceedings of the Linux Symposium
 |url          = http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf
 |accessdate   = 2008-01-15
 |format       = PDF
 |last         = Mathur
 |first        = Avantika
 |last2        = Cao
 |first2       = MingMing
 |last3        = Bhattacharya
 |first3       = Suparna
 |last4        = Dilger
 |first4       = Andreas
 |last5        = Tomas
 |first5       = Alex
 |last6        = Vivier
 |first6       = Laurent
 |보존url    = https://web.archive.org/web/20100706040230/http://www.linuxsymposium.org/archives/OLS/Reprints-2007/mathur-Reprint.pdf
 |보존날짜 = 2010-07-06
 |url-status = dead
}}</ref> 그러나 다른 커널 개발자들은 안정성을 이유로 이를 반대했으며, 모든 개발에서 ext3 사용자에게는 영향을 주지 않으면서 ext3에서 fork하여 ext4로 이름을 변경하기를 제안했다. 이 제안이 받아들어져 [[2006년]] [[6월 28일]] ext3를 유지 보수하던 [[Theodore Ts'o]]는 새로운 ext 개발 계획을 발표하였다.

ext4의 초기 버전은 리눅스 커널 버전 2.6.19에 포함되었다. 2008년 10월 11일, ext4는 안정화된 코드로 리눅스 2.6.28 소스 코드 저장소에 추가되었고, 개발 과정 종료의 조짐과 ext4 채택 권장이 있었다. ext4 [[파일 시스템]]을 포함하는 커널 2.6.28은 마침내 2008년 12월 25일에 공개되었다. 2010년 1월 15일, 구글은 자사의 스토리지 인프라를 ext2에서 ext4로 업그레이드한다고 발표했다.

== 특징 ==
; 대형 파일 시스템
: 최대 1[[엑사바이트]]의 볼륨과 최대 16[[테라바이트]]의 파일을 지원한다. 현재 e2fsprogs는 16 테라바이트의 파일 시스템만 다룰 수 있지만, 보다 큰 드라이브를 지원하기 위한 개발이 진행 중이다.

;Extent
:Extent는 ext2와 ext3에서 쓰이던 전통적인 [[블록 매핑]](block mapping) 방식을 대체하기 위한 것이다. Extent는 인접한 물리적 블록의 묶음으로, 대용량 파일 접근 성능을 향상시키고 단편화를 줄인다. ext4에서 하나의 extent는 최대 128 [[MiB]]의 연속적인 공간에 매핑될 수 있으며, 그 공간은 4 [[KiB]] 크기의 블록으로 구분된다.<ref name = "Mathur" /> [[inode]]에는 4개의 extent가 존재할 수 있다. 하나의 파일에 extent가 4개 이상 할당되는 경우에는, 나머지 extent들이 [[Htree]]에 인덱스된다.

; [[하위 호환성]]
: ext3과 ext2에 대한 하위 호환성이 있어서 ext3과 ext2 파일 시스템을 ext4로 마운트하는 것이 가능하다. 이는 성능을 조금 향상시킬 수 있는데, ext4의 새 기능 중 새로운 블록 할당 알고리즘과 같은 것은 ext3과 ext2에서도 사용될 수 있기 때문이다. ext3은 ext4 파일 시스템을 마운트할 수 있는, ext4에 대한 부분적인 [[상위 호환성]]이 있다. 하지만 ext4 파티션이 ext4의 중요한 새 특징인 Extents를 사용한다면, ext3으로 마운트는 불가능하다.

; 지연된 할당
: ext는 지연된 할당이라고도 알려진, allocate-on-flush라는 파일 시스템 성능 기술을 사용한다. 이는 데이터가 디스크에 쓰여지기도 전에 블록을 할당하는 다른 파일 시스템과는 다르게, 데이터가 디스크에 쓰여지기 전까지 블록 할당을 지연시킨다. 따라서 실제 파일 크기에 기반하여 블록 할당을 결정함으로 인해 향상된 블록 할당이 가능하게 되어 하나의 파일에 대한 블록이 여러 곳으로 분산되는 현상을 막는다. 이는 다시 디스크 이동을 최소화 시킴으로써 성능을 향상 시킨다.

; 32,000개의 하위 디렉터리 제한 없음
: ext3에서 하위 디렉터리의 수는 32,000개로 제한되어 있다. 이 제한은 ext4에서 64,000개로 늘어났으며, "dir_nlink" 기능은 이보다 더 큰 개수도 허용한다. (비록 부모의 링크 수가 더 이상 증가하지 않게 되더라도). 더 큰 디렉터리를 가능하게 하면서도 지속된 성능을 얻기 위해서, Htree 인덱스 (B-tree의 특별한 버전)은 기본적으로 사용된다. 이 기능은 커널 2.6.23에서 구현되었다. Htree는 ext3에서도 "dir_index" 기능이 켜져있으면 사용 가능하다.

== 단점 ==
=== 지연된 할당과 데이터 유실 가능성 ===
지연된 할당은 프로그래머가 ext3에서 의도했던 동작을 변경하기 때문에, 이 특성은 모든 데이터가 디스크에 기록되기 전에 발생한 시스템 [[충돌 (컴퓨팅)|충돌]]이나 전원 차단 시 추가적인 데이터 유실 위험을 야기한다. 그래서 2.6.30 이상의 커널에서는 자동으로 이런 경우를 알아차리고 이전의 동작으로 되돌린다.

== 같이 보기 ==
* [[Btrfs]]
* [[확장 파일 속성]]
* [[파일 시스템 목록]]
* [[XFS]]
* [[ZFS]]
== 각주 ==
<references/>

{{파일 시스템}}
{{자유-오픈 소스 소프트웨어}}

[[분류:파일 시스템]]
[[분류:자유 소프트웨어]]
[[분류:파일 시스템]]
[[분류:2008년 소프트웨어]]