본문 바로가기

보안/파일시스템

EXT4 (Extended File System 4)의 소개



0. Extended File System의 약사


Linux를 지원하는 최초의 파일 시스템은 Minix 파일 시스템이었지만 이 파일 시스템에는 몇 가지 심각한 성능 문제가 있었기 때문에 Extended File System이라는 파일 시스템이 Linux를 위해 특별히 개발되었다. 


ext 파일 시스템은 0.96c 커널에 구현된 VFS(Virtual File System) 스위치를 최초로 사용했으며 최대 2GB 크기의 파일 시스템을 지원했다.


ext2 파일 시스템은 Berkeley FFS(Fast File System)와 같은 당시의 다른 파일 시스템의 발전된 아이디어를 채택했다. Ext2에서는 지원되는 파일 시스템의 크기가 2TB로 확장되었으며 2.6 커널에서는 ext2 파일 시스템의 최대 크기가 32TB로 확장되었다.


세 번째 ext3 파일 시스템에서는 예기치 않게 시스템이 중단되었을 때 파일 시스템의 신뢰성을 높여 주는 저널링 개념이 도입되었다.


현재, 네 번째 ext4이 발표되었다. Ext4에는 성능, 확장성 및 신뢰성을 향상시킨 수많은 새 기능이 도입되었다. 가장 눈에 띄는 특징은 ext4가 1EB(exabyte)의 파일 시스템을 지원한다는 것이다. 



1. 기능성


 - 이전 버전 및 후속 버전과의 호환성


Ext4는 ext3 파일 시스템을 ext4 파일 시스템으로 마운트할 수 있도록 후속 버전으로의 호환성을 제공한다. ext4를 충분히 활용하려면 파일 시스템 마이그레이션을 수행하여 새로운 ext4 형식으로 변환한 후 사용해야 한다. 옮기지 않은 기존 파일을 기존 ext3 형식으로 유지하면서 새 파일(또는 복사한 기존 파일)을 새로운 ext4 데이터 구조로 관리할 수 있다. 이러한 방법을 통해 온라인으로 ext3 파일 시스템을 ext4 파일 시스템으로 마이그레이션할 수 있다.


 - 시간 소인 정밀도 및 범위 향상


ext4 이전의 Extended File System에서는 초 단위의 시간 소인을 사용하고 있다. 프로세서의 처리 속도가 빨라지고 통합 기능(멀티 코어 프로세서)이 향상되었을 뿐만 아니라 고성능 컴퓨팅과 같은 다른 애플리케이션 도메인에서 Linux가 사용되면서 그 한계가 드러나고 있다. Ext4의 시간 소인은 기본적으로 나노초 LSB로 확장되어 후속 버전과의 호환성을 보장한다. 또한 두 개의 추가 비트를 통해 시간 범위도 500년 이후까지 사용할 수 있도록 확장되었다.



2. 확장성


 - 파일 시스템 제한 확장


ext4의 첫 번째 가시적인 차이점은 파일 시스템 볼륨, 파일 크기 및 서브디렉토리 제한에 대한 지원이 향상되었다는 것이다. Ext4는 최대 1EB(1000PB)의 파일 시스템을 지원한다. ext4에서 허용되는 최대 파일 크기는 16TB(4KB 블록 가정)이며, 이는 ext3의 최대 파일 크기의 8배에 해당한다.


마지막으로 ext4에서는 서브디렉토리 제한도 32KB 디렉토리 깊이에서 거의 무한대로 확장되었다. 디렉토리 인덱싱도 해시된 B 트리 형태의 구조로 최적화되었다. 따라서 제한이 크게 확장되었음에도 불구하고 ext4에서는 매우 빠른 조회가 가능하다.



 - 익스텐트


ext3의 주요 단점 중 하나는 할당 방법에 있었다. 여유 공간에 대한 비트 맵을 통해 파일이 할당되었는데 이 방법은 빠르지도 않고 확장성도 좋지 않았다. Ext3의 형식은 작은 파일에 매우 효율적이지만 큰 파일에는 비효율적이다. Ext4에서는 할당 기능을 향상시키고 더욱 효율적인 스토리지 구조를 지원하기 위해 ext3의 메커니즘을 익스텐트로 대체했다. 익스텐트는 연속되는 블록 시퀀스를 나타낸다. 이처럼 익스텐트를 사용하게 되면 블록의 저장 위치에 대한 정보를 유지하는 대신 연속 블록으로 구성된 긴 목록의 저장 위치에 대한 정보가 유지되기 때문에 저장되는 전체 메타데이터의 용량이 줄어든다.


ext4의 익스텐트는 계층화된 접근 방법을 통해 작은 파일을 효율적으로 나타내며 익스텐트 트리를 사용하여 대용량 파일을 효율적으로 나타낸다. 예를 들어, 단일 ext4 inode에는 4개의 익스텐트를 참조할 수 있는 공간이 있으며, 이 경우 각 익스텐트는 연속 블록 세트를 나타낸다. 대용량 파일(조각화된 파일 포함)의 경우, inode는 인덱스 노드를 참조할 수 있으며, 각각의 인덱스 노드는 여러 익스텐트를 참조하는 리프 노드를 참조할 수 있다. 이 고정 깊이 익스텐트 트리는 대용량 스파스 파일에 대한 효과적인 표현 스키마를 제공한다. 또한 노드에는 파일 시스템 손상을 방지하기 위한 자동 검사 메커니즘이 있다.



3. 성능


 - 파일 레벨 사전 할당


데이터베이스 또는 컨텐츠 스트리밍과 같은 특정 애플리케이션에서는 드라이브에 대한 순차 블록 읽기 최적화를 사용하고 블록에 대한 읽기 명령 비율을 최대화하기 위해 연속 블록에 저장되는 파일을 사용한다. Ext4에서는 지정된 크기의 파일을 사전 할당 및 초기화하는 새로운 시스템 호출을 통해 이 기술이 구현되었다. 그런 다음 필요한 데이터를 기록한 후 데이터에 대한 제한적인 읽기 성능을 제공할 수 있다.


 - 블록 할당 지연


할당 지연은 파일 크기를 기반으로 하는 또 하나의 최적화 방법이다. 이 성능 최적화 방법은 블록을 디스크에 강제로 기록할 때까지 디스크의 물리적 블록을 할당하지 않고 기다린다. 이 최적화 방법의 핵심은 디스크에 기록할 필요가 있을 때까지 물리적 블록의 할당이 지연되기 때문에 더 많은 블록을 연속 블록에 할당 및 기록할 수 있다는 것이다. 이 방법은 파일 시스템에서 작업이 자동으로 수행된다는 점을 제외하면 지속적인 사전 할당과 유사하다. 하지만 파일 크기가 미리 알려져 있는 경우에는 지속적인 사전 할당이 가장 효과적인 방법이다.


 - 멀티 블록 할당

ext3의 경우 블록 할당자는 한 번에 하나의 블록을 할당하는 방식으로 작동한다. 여러 개의 블록이 필요한 경우 연속 데이터를 연속되지 않은 블록에서 찾을 수 있었다. Ext4에서는 디스크에 연속되어 있을 수 있도록 여러 블록을 동시에 할당하는 블록 할당자를 사용하여 이 문제를 해결했다. 이전 최적화와 마찬가지로 이 최적화에서도 순차 읽기 최적화를 위해 디스크에서 최적화할 관련 데이터를 수집한다.


 한 번에 하나의 블록만을 할당하는 가장 단순한 형태의 방법을 사용하는 ext3의 경우에는 블록 할당을 수행하기 위해 블록마다 한 번의 호출이 필요했다. 하지만 여러 블록을 동시에 할당하는 경우에는 블록 할당자에 대한 호출 횟수가 많이 줄어들기 때문에 할당 속도가 빨라지고 필요한 처리 리소스의 양도 줄어든다.



4. 신뢰성


 - 파일 시스템 저널에 대한 체크섬 검사


ext3과 마찬가지로 ext4도 저널링 파일 시스템이다. 저널링은 저널(디스크의 연속된 영역에 있는 전용 순환 로그)을 통해 파일 시스템의 변경 사항을 기록하는 프로세스이다. 그런 다음 로그에 기록된 변경 사항에 따라 물리적 스토리지에 실제 변경 사항이 적용된다. 좀 더 안정적으로 변경 사항을 구현할 수 있으며 작업 중에 시스템 오류 또는 전원 문제가 발생하더라도 일관성을 유지할 수 있다. 결과적으로 파일 시스템의 손상 가능성이 줄어드는 효과를 얻을 수 있다.


저널링을 사용하더라도 올바르지 않은 항목이 저널에 있다면 손상 가능성은 여전히 존재한다. 이 문제를 해결하기 위해 ext4에서는 저널에 대한 체크섬 기능을 구현하여 올바른 변경 사항만 기본 파일 시스템에 적용되도록 보장한다. Ext4는 사용자의 필요에 따라 여러 가지 모드의 저널링을 지원한다. 


 - 온라인 조각 모음


ext4에는 파일 시스템 내의 조각을 줄여 주는 기능(순차 블록 할당을 위한 익스텐트)이 통합되어 있기는 하지만 파일 시스템을 장기간 사용할 경우에는 어느 정도의 조각이 발생하는 것은 피할 수가 없다. 이 문제를 해결하여 성능을 향상시키기 위해 파일 시스템 및 개별 파일에 대한 조각 모음을 수행하는 온라인 조각 모음 도구가 제공된다. 온라인 조각 모음 도구는 인접한 익스텐트를 참조하는 새 ext4 inode에 파일을 복사하는 단순한 도구이다.


온라인 조각 모음의 또 다른 특징은 파일 시스템 검사(fsck)에 필요한 시간이 짧다는 것이다. Ext4에서는 inode 테이블에 있는 블록 그룹 중 사용되지 않고 있는 블록 그룹이 구별되기 때문에 fsck는 해당 블록 그룹 전체를 생략하여 빠르게 검사 프로세스를 수행할 수 있다. 


 - 다양한 저널링 모드


- Writeback 모드 : 메타데이터만 저널링되는 모드 


메타자료만 저널에 기록되며, 자료 블록은 디스크 해당 위치에 직접 기록된다. 이렇게 하면 파일 시스템 구조를 보존해 손상을 방지하지만, 자료 손상이 일어나기 마련이다. 예를 들어, 메타자료를 저장하고 나서 자료 블록 기록 전에 시스템이 비정상 종료를 일으킬 때 발생한다.


- Ordered 모드 : 메타데이터가 저널링된 후 저널을 바탕으로 메타데이터가 기록될 때 데이터가 기록되는 모드 


이런 문제를 해결하는 데 순서 모드를 사용할 수 있다. 순서 모드는 자료를 기록한 다음에야 메타자료를 저널에 기록한다. 이런 방식으로 복구 이후에 자료와 파일 시스템 일관성을 보장한다,


- Journal 모드 : 메타데이터와 데이터가 모두 저널링되는 가장 안정적인 모드를 지원한다. 


Journal 모드는 파일 시스템의 일관성을 보장하는 가장 좋은 방법이기는 하지만 모든 데이터가 저널을 통과하기 때문에 가장 느린 방법이기도 하다. 메타자료와 자료가 모두 저널에 기록된다.파일 시스템 손상과 자료 손실에 대한 가장 강력한 방어 기법이지만 성능 저하 문제가 생긴다. 음에는 저널에, 다음으로 디스크에 모든 자료가 두 번에 걸쳐 기록되기 때문이다.



5. 참고한 웹사이트 : 


http://www.ibm.com/developerworks/kr/library/l-anatomy-ext4/


http://blog.daum.net/sychomad/2523213

'보안 > 파일시스템' 카테고리의 다른 글

NTFS 파일 시스템  (0) 2015.03.19
FAT  (0) 2014.02.06