개요

ext2(second extended filesystem, 이차 확장 파일 시스템)는 리눅스 파일 시스템 중 하나다. Rémy Card가 ext(extended file system, 확장 파일 시스템)를 대체하기 위해 고안하였다.

리눅스 커널에 있는 ext2fs 파일시스템 드라이버는 ext2 파일 시스템을 정식으로 구현했다. 다른 곳에서는 GNU 허드, 미닉스 3, OS X(서드파티), 다윈(검증 안 된 OS X와 같은 서드파티), 일부 BSD 커널, 아타리 민트, 그리고 마이크로소프트 윈도우 드라이버의 서드파티에 (다양한 품질과 완성도로) 구현되었다.

ext2는 ext2와 완전히 호환 가능한 저널링 시스템인 ext3로 대신할 때까지 데비안, 레드햇 리눅스를 포함한 몇몇 리눅스 배포판의 기본이었다. ext2는 여전히 플래시 기반의 저장 매체(SD카드, USB 플래시 드라이브)에서 선택하는 파일 시스템인데, 이는 저널이 쓰기 횟수를 최소화하는 능력이 부족하고 플래시 장치는 쓰기 횟수 주기가 제한되었기 때문이다. 그러나 최근 커널은 ext4의 많은 장점을 살리며 ext4의 저널-부족 모드를 지원한다.

역사

리눅스의 초기 개발은 미닉스 운영 체제의 교차 개발로 만들어졌다. 당연히 미닉스 파일 시스템이 리눅스의 첫 번째 파일 시스템이 되었다. 미닉스 파일 시스템은 대부분 버그가 없었으나, 16비트 오프셋을 사용했기 때문에 최대 크기가 64 메가바이트로 제한되었다. 또한 파일명을 14자밖에 쓸 수 없었다. 이런 제한 때문에, 기존 파일 시스템을 리눅스를 위한 파일 시스템으로 대체하는 작업이 시작되었다.

새 파일 시스템의 추가를 완화하고 일반 파일 API를 제공하기 위해 VFS, 즉 가상 파일 시스템 레이어가 리눅스 커널에 추가되었다. 확장 파일 시스템(ext)는 1992년 4월에 VFS API를 사용한 파일 시스템으로 처음 발표되었고 리눅스 버전 0.96c에 포함되었다. ext 파일 시스템은 미닉스 파일 시스템의 두 가지의 주요 문제(최대 파티션 크기와 파일 이름 14자 제한)를 해결하였으며, 2 기가바이트의 데이터와 255자의 파일명 제한을 허용하였다. 그렇지만 여전히 파일 접근에 대한 타임 스탬프, 아이노드 수정, 그리고 데이터 수정을 지원하지 않는 문제가 있었다.

그 문제의 해결 방법으로, 1993년 1월에 새로운 두 파일 시스템 xiafs와 버클리 고속 파일 시스템으로부터 많은 아이디어를 통합하여 확장 파일 시스템을 재검토하는 이차 확장 파일 시스템(ext2, seconday extended file system)이 개발되었다. ext2는 또한 다음 버전에서 사용할 많은 디스크상 데이터의 남은 공간에 대한 확장성을 염두에 두고 설계되었다.

그 때부터, ext2는 VFS API에 여러 가지 새 확장에 대한 테스트베드를 해 왔다. POSIX 접근 제어 목록과 확장 속성은 보통 ext2에 먼저 구현되었는데, 이는 ext2가 상대적으로 확장이 단순하였고 그 내부 구조가 이해하기 쉽게 되어있었기 때문이다.

2.6.17 이전의 리눅스 커널에서 ext2 파일 시스템에 대한 블록 드라이버 크기 제한이 최대 2 테라바이트였다.

ext2는 여전히 부팅 가능한 USB 플래시 드라이브와 다른 솔리드 스테이트 드라이브에서 저널링 파일 시스템 이상을 권장하고 있다. ext2는 저널링을 쓸 필요가 없기 때문에 ext3보다 적은 쓰기를 수행한다. 플래시 칩이 노화되는 주요 원인은 지우기 사이클의 개수이며, 이는 쓰기를 할 때 빈번히 나타나고, 감소된 쓰기작업은 솔리드 스테이트 디바이스의 수명을 증가시킨다.[2] 같은 이유로, 플래시 장치상의 파일 시스템에 대해서는 noatime 마운트 옵션을 사용하는 것이 좋다.

데이터 구조

ext2 공간은 블록으로 나뉘어 있다. 이 블록은 블록 그룹으로 나뉘는데, 이는 유닉스 파일 시스템의 실린더 그룹과 비슷하다. 일반적으로 거대한 파일 시스템에 수천개의 블록이 있다. 주어진 파일의 데이터는 가능한 한 하나의 블록 그룹 내에 포함되어 있다. 이것은 외부 단편화를 줄이고 연속된 대량의 데이터를 읽을 때 디스크 탐색을 최소화시킨다.

각각의 블록 그룹은 블록 그룹 서술자 테이블과 슈퍼블록의 복사본을 포함하고 있으며, 모든 블록 그룹은 블록 비트맵, 아이노드 비트맵, 아이노드 테이블을 포함하고 있고, 마지막으로 실제 데이터 블록을 포함한다. 슈퍼블록은 매우 중요한 운영 체제 부팅, 즉 파일 시스템 내 여러 블록 그룹에서 만들어진 백업한 복사본과 같은 중요한 정보를 포함한다. 그러나, 일반적으로 파일 시스템의 첫 번째 블록에서 찾을 수 있는 첫 번째 복사본만 부팅에 쓰인다.

그룹 서술자는 블록 비트맵, 아이노드 비트맵과 모든 블록 그룹의 아이노드 테이블의 시작점의 위치에 저장되며 이들은 차례로 그룹 서술자 테이블에 저장된다.

참고

  1. https://ko.wikipedia.org/wiki/Ext2
  2. https://students.mimuw.edu.pl/ZSO/Wyklady/11_extXfs/extXfs.pdf