ext4 파일 시스템 특징

며칠 후면 발표될 우분투 9.04부터는 ext4 파일시스템을 사용할 수 있다고 한다. 얼마전 발표된 페도라 11 테스트 버전에는 디폴트 파일시스템으로 ext4를 사용하고 있다. 이제 리눅스 진영에서는 ext4를 기본 파일시스템으로 사용하는 것이 더욱 늘어날 전망인데, ext4의 특징에 대해서 한번 알아보고자한다.

큰 용량의 파일시스템 지원
ext4 파일시스템은 볼륨의 크기를 1 exabyte 까지 지원한다. 또 하나의 파일의 크기를 16 terabyte 까지 지원한다.
exa는 EB로 표시한고, 십진수로는 1000의 6제곱, 10의 18 제곱 이고 이진수로는 1024의 6제곱 또는 2의 60 제곱이다.
참 고로 엑사바이트가 어느 정도인지를 가늠하기 위해서 몇 가지 알아보면, 1 엑사바이트는 50,000 년 분량의 DVD 품질의 비디오 데이터의 크기와 같다. 2008년 12월 전세계에서 사용한 월간 인터넷 트래픽의 양이 5 ~ 8 엑사바이트 정도라는 통계가 있다.

계산을 쉽게하기 위해서 1시간짜리 DVD 영화는 4GB 용량을 차지한다고 생각하면,
4GB 영화를 바이트로 계산하면, 4 * 1024 * 1024 * 1024 = 4294967296 byte
1 엑사바이트를 바이트로 계산하면, 1 exabye =
1152921504606846976 byte
이를 나누어보면 268435456 (시간)이 나온다.
다시 하루는 24시간이므로 24로 나누면, 11184810 (일)이 나오고,
다시 1년은 365일이므로 365로 나누면, 30643 (년)이 나온다.

ext4를 사용하면, 하나의 디스크 볼륨으로 이정도 용량을 사용할 수 있게된다는 얘기다.

Extents 사용
extents 는 ext2/ext3 파일시스템에서 사용되던 블록매핑 스킴을 대체하여 도입되었다. 익스텐츠는 한 범위의 연속된 물리적 블록으로 큰 파일에 대한 성능을 향상시키고 조각화를 줄인다. ext4에서 하나의 단일 익스텐츠는 4KB 블록크기의 연속 공간으로 128MB까지 맵핑할 수 있다. inode에는 4개의 익스텐츠를 저장할 수 있다. 4 익스텐츠보다 큰 파일에 대해서는 나머지 익스텐츠를 Htree에 인덱스한다.

과거 파일시스템과 호환성 유지
ext4 파일시스템은 ext3, ext2와 호환성을 유지한다. 이로써 ext3, ext2 파일시스템을 ext4로 마운트할 수 있다. 이점은 새로운 블록 할당 알고리즘 등 ext4의 새로운 특성을 ext3이나 ext2에 사용할 수 있다는 점때문에 약간의 성능 향상을 기대할 수 있는 부분이다.
ext3 파일시스템은 부분적으로 ext4와 미래 호환성을 갖는다. 즉 ext4 파일시스템은 ext3 파티션으로 마운트할 수 있다.(마운트할 때 ext3 파일시스템으로 인식된다.) 그러나 ext4 파티션에서 extents를 사용한다면, ext3 파일시스템으로 마운트할 수 없을 것이다.

Persistent pre-allocation
ext4 파일시스템은 파일에 대하여 디스크상의 pre-allocation을 고려한다. 이에 대한 현재 방법론은 대부분의 파일시스템이 파일이 생성될 때 0에서부터 확보한 공간만큼 파일의 전체를 쓰는 것이다. 이 방법은 이제 ext4에서는 사용하지 않는다. 대신 ext4와 XFS를 포함한 이러한 기능을 가진 파일시스템을 위한 fallocate() 시스템 함수가 리눅스 커널에 추가되었다. 이는 미디어 스트리밍, 데이터베이스 등의 어플리케이션에 유용한 기능이 될 것이다.

Delayed allocation
ext4 는 allocate-on-flush라고 알려진, 다른 말로 delayed allocation이라고도 부르는 파일시스템 성능 향상 기술을 사용한다. 이는 다른 파일시스템이 데이터가 디스크에 쓰여지기 전에 필요한 블록을 할당하는 것과는 달리, 데이터가 디스크에 쓰여질 때까지 블록 할당이 지연되는 기술이다. 이는 성능 향상을 가져오고 실제 파일 크기에 기초하여 블록 할당을 수행하므로 조각화를 방지한다.

32,000개의 서브디렉토리 제한이 없어짐
ext3 에서는 하나의 디렉토리에 생성할 수 있는 서브디렉토리는 32,000개로 제한이 있었다. ext4에서는 64,000개로 늘어났다. 그리고 "dir_nlink" 특성으로 이 제한을 넘어설 수도 있다. 지속적인 성능향상을 위하여 충분히 큰 디렉토리 ext4에서는 htree 인덱스를 기본으로 사용하도록 되어있다. 이 특징은 리눅스 커널 2.6.23부터 포함되어있다. htree는 dir_index 기능을 사용한다면 ext3에서도 사용할 수 있다.

Journal checksumming
ext4 는 신뢰성을 위해서 저널에서 체크섬을 사용한다. 저널이 가장 많이 사용되는 디스크 파일중 하나이기 때문이다. 이 특징은 저널링 프로세스 기간동안 디스크 I/O를 피하는 이득을 제공하여 약간의 성능 향상을 가져온다. 저널 체크섬 기술은 위스콘신 대학의 IRON File Systems라는 연구에서 영감을 얻었다.

온라인 조각모음
온라인 조각모음에 대한 몇 가지 제안이 있지만, 아직 커널에 포함되지는 않고 있다. 조각화를 방지하기 위해 사용되는 유명한 기술이라도 오래 사용하다보면 조각화된다. ext4는 개별 파일에 대한 조각모음 또는 전체 파일시스템에 대한 조각모음 툴을 제공할 계획이다.

빠른 파일시스템 검사
ext4 에서는 할당되지않은 블록 그룹과 inode 테이블 섹션에 대해서는 할당되지않은 것으로 표시한다. 이는 e2fsck가 파일시스템을 검사할 때 무시하도록하여 검사 시간을 크게 단축시킨다. 이 기능은 리눅스 커널 2.6.24에 구현되어있다.

다중블록 할당
ext4 는 한번에 파일을 위해서 다중블록을 할당한다. 이는 디스크에서 연속된 블록을 할당할 수 있게되어 조각화를 줄인다. 다중블록 할당은 O_DIRECT를 사용할 때 또는 지연할당이 활성화되었을 때 활성화된다. 파일에 대하여 많은 블록이 동시에 쓰여질 수 있도록 한다. 현재 커널에서는 파일시스템에 각 블록은 별도로 할당받도록 되어있다.

타임스탬프의 향상

컴 퓨터가 더 빨라지고 리눅스가 미션크리티컬한 어플리케이션에 많이 사용됨에따라 초 단위의 타임스탬프로는 충분하지 않게 되었다. 이를 해결하기 위해서 ext4는 나노초 단위의 타임스탬프를 제공한다. 또 타임스탬프 필드를  2 bit 확장하여 2038년 문제를 500년 연장시켰다.