리눅스 운영 체제의 파일시스템.
ext는 ext1으로도 불리며, 리눅스 운영 체제를 목표로 만들어진 첫 번째 파일 시스템이다. Extended File System을 줄여 extfs 또는 ext로 쓴다. ext는 Rémy Card가 MFS(MINIX File System)의 한계를 극복하기 위해 만들었으며, 1992년 4월에 구현되어 Linux 0.96c에 추가되었다.
MFS는 파일 시스템의 최대 크기가 64MB였지만, ext에서는 2GB로 늘어나며, 파일 이름 최대 길이도 MFS는 14byte1 또는 30byte였지만 ext는 255byte까지 지원한다. 하지만 분리 접근, 아이노드(inode) 수정, 자료 수정 타임스탬프2 등의 기능을 지원하지 않으며, 프리 블록과 아이노드의 트랙을 다루기 위해 연결 리스트를 사용했기 때문에 사용하면 할수록 리스트가 뒤죽박죽이 되고 파일 시스템이 조각화된다는 단점이 있었다.
ext2는 Rémy Card가 1993년 1월에 알파 버전을 공개한 파일 시스템이다. 정식 이름은 Second Extended File System이다. 이 파일 시스템은 ext의 문제를 해결하기 위해 나온 파일 시스템이다.
ext2 파일 시스템은 ext 파일 시스템 코드를 바탕으로 했으며, 많은 재구성과 개선이 있었다. ext2 파일 시스템은 나중에 있을 개선도 고려해 만들어진 파일 시스템이었다. ext2 파일 시스템은 점점 많이 쓰이게 되면서 버그도 고쳐지고 계속해서 새로운 기능이 추가되어, 현재 아주 안정한 파일 시스템이 되었다.
ext2 파일 시스템은 255자까지의 긴 파일 이름을 지원한다. ext2 파일 시스템은 세 타임 스탬프3를 지원하며, 확장이 쉽다. 그리고 ext에 있었던 여러 단점(분리 접근, 아이노트 수정 등 지원 안 함)도 개선되었다. 파일 시스템의 최대 크기는 블록 사이즈에 따라 2 TiB ~ 32 TiB이며, 서브 디렉토리 개수 제한은 32768개이다.
Block 크기 | 파일 크기 제한 | 파일 시스템 크기 제한 |
---|---|---|
8 KiB | 65568 GiB (약 64 TiB) | 32768 GiB (32 TiB) |
ext3는 Stephan Tweedie가 개발하여 2001년 11월에 Linux 2.4.15에 추가되었다. ext2에 저널링, 온라인 파일 시스템 증대, 큰 디렉토리를 위한 HTree4 인덱싱 등의 기능이 추가되었다. ext3 파일 시스템은 ext2 파일 시스템을 바탕으로 만들었기 때문에, ext2 파일 시스템을 자료 손실 없이 ext3 파일 시스템으로 바꿀 수 있다.
저널링은 주 파일 시스템을 수정하기 전에 저널에 수정 사항을 먼저 기록해 놓는다. 이렇게 함으로써, 전원이 갑자기 나가거나 시스템 충돌이 일어났을 때 데이터 손실 가능성을 줄일 수 있다.
ext3 파일 시스템은 ext2 파일 시스템과의 호환을 목표로 설계되었기 때문에 많은 구조가 ext2 파일 시스템과 비슷하다. 그래서 아이노드의 동적 할당, 다양한 블록 크기 등과 같은 기능이 부족하다. 또한 extends 기능도 지원하지 않다. 또 다른 ext3의 단점은 온라인 조각모음 프로그램이 없다는 것이다. 오프라인 조각모음 프로그램이 있기는 하지만, 이를 사용하기 위해서는 ext2파일 시스템으로 변환시켜야 하며, ext3에서 ext2로 변환 후 조각모음을 하면 조각모음 프로그램이 ext3의 새로 추가된 기능을 인식하지 못해 자료가 손상될 수 있다. ext3가 조각모음이 필요 없다는 주장이 있는데, FAT 시스템보다는 덜 조각화되기는 하지만 계속된 사용으로 인해 ext3도 조각화 될 수 있다. 이는 ext4에서 다시 조각모음 프로그램이 만들어지는 계기가 된다. ext3 파일 시스템은 또한 저널링을 할 때 체크섬을 검사하지 않는다. 한 디렉토리 당 서브 디렉토리 개수 제한은 31998개이다.
Block 크기 | 파일 크기 제한 | 파일 시스템 크기 제한 |
---|---|---|
1 KiB | 16 GiB | < 2 TiB |
2 KiB | 256 GiB | < 4 TiB |
4 KiB | 2 TiB | < 8 TiB |
8 KiB | 2 TiB | < 16 TiB |
ext4는 Mingming Cao, Andreas Dilger, Alex Tomas, Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh와 그 외 여러 사람에 의해 ext3를 바탕으로 하여 개발되었다. 2006년 8월 10일 리눅스 2.6.19에서 Unstable 버전이 공개되었으며, 2008년 8월 21일에 Stable 버전이 공개되었다. 주요 특징은 다음과 같다.