본문 바로가기
[Developer]/Linux,Windows,macOS

ext 파일시스템에 대한 정리(ext4까지)

by 해피빈이 2018. 1. 1.

리눅스에서는 ext포맷을 사용한다.


시스템 파티션에서는 당연히 ext 포맷은 필수이지만, ext 포맷의 장점을 제대로 알아야 추가로 사용하는 파티션에도 FAT나 NTFS, HTFS가 아닌 ext 파티션을 적용할 수 있을 것이다.


그래서 그 차이를 정리해본다.


ext, ext2, ext3, ext4 순서로 기록하였다.



1. ext

- ext는 별도로 ext1이라고 부르진 않는다.
- EXTended file system, 확장 파일 시스템의 줄임말이다.
- 리눅스용 파일 시스템으로 사용된다.
- 만든 사람은 스테펜 트위디(Stephen Tweedie)이다.
- 1992년 4월에 처음 나왔다.
- 오늘날 많은 리눅스 배포판에서 주 파일 시스템으로 사용된다.
- 파일구조는 비트맵(남은공간), 테이블(메타데이터)
- 불량블록 구조: 테이블
- 파일시스템 권한: POSIX
- 암호화는 지원되지 않는다.


2. ext2

- 리눅스 파일 시스템으로 사용된다.
Rémy Card가 ext를 대체하기 위해 고안하였다.

- 리눅스 커널에 있는 ext2fs 파일 시스템 드라이버는 ext2 파일 시스템을 정식으로 구현했다.

- 1993년 1월에 도입되었다.

- 파티션 ID: Apple_UNIX_SVR2(애플 파티션 맵), 0x83(마스터 부트 레코드, MBR), EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)

- 디렉토리 구조는 테이블

- 파일 구조는 비트맵(여유공간), 테이블(메타데이터)

- 불량블록 구조: 테이블

- 최대 파일 크기: 16GB - 2TB

- 최대 파일 수: 

- 최대 파일 이름 길이: 255 바이트

- 최대 볼륨 크기: 2-32TB

- 날짜 사용권한: 수정(mtime), 특성 수정(ctime), 접근(atime)

- 날짜 범위: 1901년 12월 14일 ~ 2038년 1월 18일

- 날짜 정밀도: 1s

- 파일 시스템 권한: POSIX

- 압축은 지원되지 않으나, 패치를 통해 사용 가능하다.

- 암호화는 지원되지 않는다.

- 사용 가능한 운영체제로는 리눅스, BSD, WINDOWS(IFS를 통해), OSX(IFS를 통해)

- 모든 파일이나 디렉토리는 아이노드로 표현된다. 아이노드는 크기, 권한, 소유권, 그리고 파일이나 디렉토리의 디스크의 위치에 대한 데이터를 포함한다.

- 아이노드에서 파일의 데이터를 포함하는 첫 12블록의 포인터가 있다. (블록의 다음 세트에 포인터를 포함하는) 간접 블록에 대한 포인터, (간접 블록에 대한 포인터를 포함하는) 이중 간접 블록에 대한 포인터, 그리고 (이중 간접 블록에 대한 포인터를 포함하는) 삼중-간접 블록에 대한 포인터가 있다.

- e2compr는 리눅스 커널에서 사용자 애플리케이션의 어떤 지원도 없이 파일 시스템에서 파일의 온라인 압축과 압축 해제를 지원하는 ext2 파일 시스템 드라이버의 변형이다.



3. ext3

- 만든 이는 스테펜 트위디(Stephen Tweedie)이다.
- 도입일은 2001년 11월이다.
- 도입 운영체제는 리눅스 2.3.15이다.
- 파티션 ID: 0x83(MBR), EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT)
- 디렉토리 구조: 테이블, Hashed B-tree(dir_index 사용)
- 파일 구조: 비트맵(여유공간), 테이블(메타데이터)
- 불량블록 구조: 테이블
- 최대 파일 크기: 16 GiB - 2 TiB
- 최대 파일 수: 가변, 작성시간에 할당
- 최대 파일이름 길이: 255바이트
- 최대 볼륨 크기: 2 TiB - 16 TiB
- 파일이름 허용 문자: NULL과 '/'를 제외한 모든 바이트 단위 문자

- 날짜 사용권한: 수정(mtime), 특성 수정(ctime), 접근(atime)

- 날짜 범위: 1901년 12월 14일 ~ 2038년 1월 18일

- 날짜 정밀도: 1s

- 특성: No-atime, append-only, synchronous-write, no-dump, h-tree(디렉토리), immutable, journal, secure-delete, top(디렉토리), allow-undelete

- 파일시스템 권한: 유닉스 허가, ACLs, 임의보안 특성(리눅스 6.2 이상)

- 압축은 지원되지 않음

- 암호화는 지원되지 않음(블록장치 수준에서 제공됨)

- 운영체제: 리눅스, BSD, WINDOWS(IFS를 통해 지원)

- 하위디렉토리에 생성될 수 있는 서브디렉토리의 최대 수는 31998개 이다. 이는 아이노드가 32000개의 링크를 지원하기 때문이다. 남은 2개는 ./ 현재폴더, ../ 상위폴더 링크이다.

- 저널링은 Journal(리스크 최소), Ordered(리스크 중간), Writeback(리스크 최고)로 나눠진다.

  ext3 장점

- ext2에서 자료 삭제 및 손실 없이 ext3로 변경할 수 있다.(자료 백업 불필요)
- 저널링
- 온라인 파일 시스템 증대
- 큰 규모의 디렉토리를 위한 Htree(B-tree의 고급판)
- e2fsck가 사라짐(ext2에 존재했던 e2fsck는 시스템 다운 이후 강제로 모든 파일을 대상으로 검사를 수행하는 것이며, 취소 불가능이다.)

  ext3 단점

- JFS, ReiserFS, XFS 등에 비해 낮은 처리 속력
- 파일시스템 레벨에서 사용할 수 있는 조각모임 기능이 없다.
- 저널에 기록할 때 checksum 검사를 하지 않는다.


4. ext4

- 64비트 기억 공간 제한을 없애고 ext3의 성능을 향상시키며, 하위 호환성이 있는 확장 버전으로서, 클러스터 파일 시스템스 사에서 개발되었다. 그러나 다른 커널 개발자들이 ext3사용자에게는 영향을 주지 않으면서 ext3에서 fork하여 ext4로 이름 변경을 제안하여, Theodore Ts'o는 ext4 개발 계획을 발표하였다.

- 영문명은 Fourth extended file system

- 도입일은 안정버전 기준 2008년 10월 21일이며, 불안정 버전 기준으로 2006년 10월 10일이다.

- 도입 운영체제: 리눅스 2.6.28, 2.6.19

- 파티션 ID: 0x83(MBR), EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 (GPT)

- 디렉토리 구조: Linked List, Hashed B-tree

- 파일 구조: Extents/Bitmap

- 불량 블록 구조: 테이블

- 최대 파일 크기: 16 TiB (4k 블록 기준)

- 최대 파일 수: 40억(파일 시스템 작성 시간에 지정됨)

- 최대 파일이름 길이: 256바이트

- 최대 볼륨 크기: 1 EiB

- 날짜 사용권한: 수정(mtime), 특성 수정(ctime), 접근(atime), 삭제(dtime), 작성(crtime)

- 날짜 범위: 1901년 12월 14일 - 2514년 4월 25일

- 날짜 정밀도: nano second

- 포크 스트림: NO

- 특성: 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

- 압축 지원되지 않음

- 암호화 지원되지 않음

- 운영체제: 리눅스, WINDOWS(ext2fsd 이용시)

  ext4 장점

- 대형 파일 시스템: 최대 1 엑사바이트의 볼륨과 최대 16테라바이트의 파일을 지원한다.

- extent: ext2와 ext3에서 쓰이던 전통적인 블록 매핑 방식을 대체하기 위한 것이다.

- 하위 호환성: ext3와 ext2에 대한 하위 호환성이 있어서 ext3와 ext2 파일 시스템을 ext4로 마운트 하는 것이 가능하다. 하지만 ext4의 중요한 새로운 특징인 extents를 사용한다면 ext3로 마운트는 불가능하다.

- 지연된 할당: allocate-on-flush라는 파일 시스템 성능 기술을 사용한다.

- 32000개의 하위 디렉토리 제한 없음, ext4에서는 64000개로 늘어났으며, dir_nlink 기능을 이용한다면 더 큰 개수도 허용한다. H-tree인덱스를 이용하여 지속된 성능을 얻을 수 있다.[각주:1]

  ext4 단점

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




참고 링크: 위키피디아. 위키백과

https://ko.wikipedia.org/wiki/%ED%99%95%EC%9E%A5_%ED%8C%8C%EC%9D%BC_%EC%8B%9C%EC%8A%A4%ED%85%9C

https://ko.wikipedia.org/wiki/Ext2

https://ko.wikipedia.org/wiki/Ext3

https://ko.wikipedia.org/wiki/Ext4



  1. 트리 깊이는 3으로 제한된다. 디렉토리의 해시값만 알면, 트리를 2번만 조회해도 해당 dentry객체를 찾을 수 있으므로 O(1)이라고 볼 수 있다. 최대이름의 길이를 가진 파일 기준으로, 한 디렉토리 안의 갯수는 993814개이고, 최대이름 길이를 가질 가능성은 거의 없기 때문에 색인트리의 제한은 있지만, 그 제한에 걸리는 일은 없다고 보면 된다.(http://aiya.ms.mff.cuni.cz/lfs/doc_html/node6.html) [본문으로]
반응형

댓글