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 이용시) |
ext4(extended file system 4 , 확장된 파일 시스템 4)는 리눅스의 저널링 파일 시스템 중 하나로, ext3 파일 시스템의 향상된 버전이다.
역사
[편집]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 이상의 커널에서는 자동으로 이런 경우를 알아차리고 이전의 동작으로 되돌린다.
같이 보기
[편집]각주
[편집]- ↑ 가 나 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일에 확인함.