ext4(extended file system 4 , 확장된 파일 시스템 4)는 리눅스저널링 파일 시스템 중 하나로, ext3 파일 시스템의 향상된 버전이다.

ext4
개발사Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh 등
정식 명칭4차 확장 파일 시스템
Fourth extended file system
도입안정판: 2008-10-21
불안정판: 2006-10-10 - 리눅스 2.6.28, 2.6.19
파티션 식별자0x83 (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)
구조
디렉터리 내용링크드 리스트, hashed B-tree
파일 할당Extents/Bitmap
불량 블록테이블
제약사항
최대 볼륨 크기1 EiB
최대 파일 크기16 TiB (4k 블록 파일 시스템 기준)
최대 파일 수40억 (파일시스템 작성 시간에 지정됨)
최대 파일 이름 길이256 바이트
파일 이름 내 허용 문자NUL ('\0') 및 '/'을 제외한 모든 바이트
기능
날짜 사용 권한수정 (mtime), 특성 수정 (ctime), 접근 (atime), 삭제 (dtime), 작성 (crtime)
날짜 범위1901년 12월 14일 - 2514년 4월 25일
날짜 정밀도나노초
포크아니오
특성extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev
파일 시스템 권한POSIX
투명한 압축아니오
투명한 암호화아니오
데이터 중복 제거아니오
기타
지원 운영 체제리눅스
윈도우 (ext2fsd 이용시)

역사 편집

64비트 기억 공간 제한을 없애고 ext3의 성능을 향상시키며, 하위 호환성이 있는 확장 버전으로서, 많은 부분이 본래, 러스터 파일시스템을 위해 클러스터 파일 시스템스사에서 개발되었다.[1] 그러나 다른 커널 개발자들은 안정성을 이유로 이를 반대했으며, 모든 개발에서 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 크기의 블록으로 구분된다.[1] 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 이상의 커널에서는 자동으로 이런 경우를 알아차리고 이전의 동작으로 되돌린다.

참고 자료 편집

  1. Mathur, Avantika; Cao, MingMing; Bhattacharya, Suparna; Dilger, Andreas; Tomas, Alex; Vivier, Laurent (2007). “The new ext4 filesystem: current status and future plans” (PDF). 《Proceedings of the Linux Symposium》. Ottawa, ON, CA: Red Hat. 2010년 7월 6일에 원본 문서 (PDF)에서 보존된 문서. 2008년 1월 15일에 확인함.