리눅스는 다양한 파일 시스템을 지원한다. 몇몇은 다른 운영체제를 위해 개발된 네트워크 파일 시스템이나 파일 시스템에 특화되어 있다. 하지만 놀랍게도 많은 파일 시스템이 리눅스 전용 파일 시스템으로 쓰인다. 루트(/
)와 시스템 디렉터리는 전용 파일 시스템에 위치한다. 현재 이런 부류에 속하는 전용 파일 시스템은 ext2, ext3, ReiserFS, XFS, JFS(Journaled File System) 등이 있다. 하지만 파일 시스템 설계와 개발이 계속 진행중이며, 새로운 파일 시스템이 수평선에서 속속 고개를 내밀고 있다.
아마도 현재 개발 중인 가장 중요한 리눅스 전용 파일 시스템은 ext4로, 리눅스 전용으로 개발되었던 원래 파일 시스템(ext 또는 extfs)의 네 번째 개정판이다. 전통을 이어받아 ext4는 그다지 머지 않은 장래에 리눅스를 위한 (어쩌면 독보적일지도 모르는) 중요한 표준 파일 시스템이 될 가능성이 높아 보인다.
네 번째 확장 파일 시스템(ext4 또는 ext4fs)은 개발자들이 새로운 첨단 기능을 ext3에 추가하기 위해 개발을 시작했다. 이 과정에서 다음과 같은 여러 가지 문제점이 드러났다.
- 몇몇 새로운 기능은 과거 하위 호환성을 깨버린다.
- ext3 코드는 점점 더 복잡해지고 유지보수가 어려워진다.
- 변경 내역은 아주 안정적인 ext3를 안정하지 못한 상태로 만들어버릴지도 모른다.
이런 이유로 인해, 개발자들은 2006년 6월에 ext4 개발을 ext3에서 분리하기로 결정했다. 분리 시점 이후로 ext4는 계속해서 작업이 진행되었지만, 일부 리눅스 애호가와 관리자 이외의 사용자에게는 거의 모습을 드러내지 않았다. 2006년 11월에 커널 2.6.19가 발표되면서, ext4는 처음으로 주류 커널에 모습을 드러냈다. 물론 여전히 실험적(experimental)이라는 딱지가 붙어있지만 대다수 사람은 이런 사실에 신경쓰지 않는다.
커널 2.6.24.4에 들어와서도 ext4가 계속해서 개발 중이기 때문에 기능 목록은 유동적이다. ext3와 비교해 이 글을 쓰는 현재까지 공개되었으며 앞으로 예상되는 개선 기능을 표 1에 정리했다.
ext4는 현재 한창 개발중이며, 이런 기능 목록은 바뀔 가능성이 있다. 이런 기능 중 몇몇을 사용할 경우, ext3에 대한 하위 호환성을 깨버린다. 다시 말해, ext4 파일 시스템은 ext3 파일 시스템 유형으로 마운트가 불가능할지도 모른다. ext4는 물론 상위 호환성을 유지한다. 다시 말해 ext3 파일 시스템을 마치 ext4 파일 시스템인양 마운트할 수 있다.
ext4에서 가장 눈에 띄는 개선 사항은 파일과 파일 시스템 크기다. 따라서 ext4가 필요한 사용자는 디스크 공간을 테라바이트 이상 사용하는 관리자일 가능성이 높다. 표 1에 나열한 기능 목록은 눈에 띄는 색다른 개선 사항을 보여준다. 예를 들어, 디렉터리 아래에 하위 디렉터리가 많거나 타임스탬프 정밀도가 1초 미만이 되어야 할 경우 ext4가 필요할 가능성이 높다.
아직 ext4는 실험 단계이므로, 아마 틀림없이 커널 재컴파일을 해야만 사용이 가능하다. 이런 과정이 부담스러우면 ext4를 사용하다가 문제를 겪을 가능성이 높다. 실제로 실험적인 ext4 특성은 개발에 기여하기를 원하거나 이런 몇 가지 기능이 꼭 필요할 경우에만 사용해야 함을 의미한다. 안정적인 ext4 출시에 앞서 안정적인 대규모 디스크 지원이 필요하다면, XFS나 JFS를 대안으로 고려하자.
물론 ext4가 항상 실험 단계로 남아있지는 않을 것이다. 언젠가는 ext4가 안정적인 파일 시스템으로 탈바꿈할 것이다. 이렇게 되면, 거의 모든 사람이 보기에 ext4가 ext3만큼 좋은 선택이 되리라. 물론 몇 가지 주의 사항이 있다. 먼저 ext4에만 해당하는 버그가 있을지도 모르므로, ext4가 안정화되었다고 이야기를 들을 때까지 신중하게 접근해야 한다. 다음으로 ext4 사용은 디스크에 접근하는 옛날 도구를 사용하지 못하도록 방해한다. 이런 상황은 응급 복구 도구에 영향을 미치므로, 판올림 전에 ext4를 지원하는 손에 익은 도구가 나올 때까지 기다릴 필요가 있다. 물론 장점도 있다. ext3에서 ext4로 넘어가는 과정은 파일 손실이 없으므로, 보존이 필요한 현재 자료를 손상없이 쉽게 이주할 수 있다.
ext4 지원을 위한 컴파일과 활성화 작업
여기까지 읽었다면, ext4로 실험을 해볼 마음이 들지도 모르겠다. 실험을 하려면 필요한 지원 기능을 추가하기 위해 커널 재컴파일이 필요하다. 최신 커널(이 기사를 번역할 무렵에 나온 최신 커널은 2.6.26이다)로 시작하면 좋겠다. 커널 원시 코드를 풀어서 수동으로 모든 옵션을 선택하거나 예전 커널을 빌드할 때 사용한 .config 파일을 복사하고 나서 make oldconfig로 예전 설정을 복사한 다음에 (make xconfig와 같이) 좋아하는 환경 설정 명령어를 입력해 커널 옵션을 살펴본다. File Systems 영역에 Ext4dev/ext4 extended fs support development (EXPERIMENTAL)라는 ext4 옵션이 나온다(특히
ext4가 안정화되면 나중에 이름이 바뀔 가능성이 높다). 참고로 ext4 옵션을 보기 위해서는 General 영역에 있는 Prompt for development and/or incomplete code/drivers 옵션을 켜야 한다.
ext4 지원을 선택한 다음에 커널 변경을 저장하고 make를 입력해 커널을 컴파일하고 root 권한으로 make modules_install을 입력해서 모듈을 설치한다. 그러고 나서 컴파일된 커널(arch/i386/boot나 다른 디렉터리)을 적절한 위치(/boot)로 복사하고, GRUB이나 LILO 설정을 편집해 커널을 추가한 다음 컴퓨터를 다시 시작하자. 램 디스크로 부팅한다면 mkinitrd 유틸리티로 이미지를 준비해야 한다.
커널 모듈에 이어 ext4 파일 시스템 기능을 지원하는 e2fsprogs 버전을 살펴보기를 원할 것이다. tar 파일을 내려받거나(참고자료 절을 살펴서 적절한 사이트를 선택하자), Listing 1에 나오듯이 git를 사용하면 된다.
Listing 1. git
를 사용해 최신 e2fsprogs
를 내려받는 명령어
$ git clone git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git
$ cd e2fsprogs
$ git checkout -b pu
Switched to a new branch "pu"
$ git branch
master
* pu
$ git pull git://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git pu
|
배포판 패키지 관리자를 사용해 git
를 설치할 필요가 있을지도 모르겠다. 여기서 소개하는 도구는 아직 테스트를 많이 수행하지 못했기에, 실제 운영 시스템에서 사용하도록 권하지는 않는다. 지금까지는 ext4 사용에 진짜 필요한 여러 가지 내용을 추가하지 않은 듯이 보인다. 따라서 배포판에 따라오는 표준 e2fsprogs
패키지를 그대로 사용하는 방식이 바람직하다.
e2fsprogs
컴파일 과정은 표준을 그대로 따른다. 패키지를 풀고, cd
로 디렉터리에 들어가 ./configure
명령을 입력하고 make
명령을 입력하고 (root
로) make install
명령을 내리면 된다. 이런 과정은 여러분 배포판에 따라오는 표준 e2fsprogs
패키지를 겹쳐쓸지 모르므로, (불안정하지만) 최신 버전을 설치하고 싶을 때만 이런 과정을 밟자.
ext4 지원 커널로 컴퓨터를 시동했다면 새로운 파일 시스템을 사용할 준비가 끝났다. 이렇게 하려면 파티션을 마련하고, RAID 장비나 다른 저장 공간을 확보하자. ext4 파일 시스템을 사용하기 시작했다면, 파일 시스템 옵션을 미세 조정해야 한다.
처음부터 새로 시작하기를 원한다면, 과거/최신 e2fsprogs
패키지에 들어있는 mkfs.ext3
나 mkfs.ext4
라는 도구를 사용해 파티션을 포맷해야 한다. 예를 들어, mkfs.ext4 -j /dev/sda6
는 /dev/sda6
파티션을 포맷한다. mkfs.ext4
는 좀 더 ext4에 밀접한 기능을 활성화해 파일 시스템을 만들어낸다.
현재 e2fsprogs
프로그램은 커널 파일 시스템 변경을 완전히 따라가지 못한다. 다행히도, 대다수 커널 드라이버 기능은 mkfs.ext4
나 다른 유틸리티에 특별한 준비를 요구하지 않는다. ext4 기능은 파일 시스템을 마운트할 때 활성화된다. 대규모 매체에 ext4를 사용하기를 원하면, 남들이 가지 않은 길을 걷기 위해 신발끈을 동여매야 한다. 여기서 발생하는 문제를 문서로 만들어 보고하자!
현존하는 ext2나 ext3 파일 시스템을 ext4 파일 시스템처럼 사용할 수도 있다. 간단하게 디바이스를 마운트하면 된다. 하지만 extents와 같은 새로운 기능을 사용한다면 예전으로 돌아가서 ext2나 ext3 드라이버로 파일 시스템을 다시 마운트하지 못한다.
ext4 파일 시스템으로 디바이스를 사용하려면, ext4dev
파일 시스템 유형 코드로 마운트해야 한다(ext4가 안정화되면 파일 시스템 유형 코드는 ext4
로 바뀔 것이다). 예를 들어, mount -t ext4dev /dev/sda6 /mnt/point
명령을 내리면 /dev/sda6
를 ext4 파일 시스템으로 /mnt/point
에 마운트한다. 기본적인 ext4 용법은 이게 전부다. 기본 마운트 옵션은 extents를 활성화한다는 사실에 주의하자. 일단 extents를 사용하고 나면 ext3 파일 시스템으로 돌아가지 못한다. ext4를 시도해보고 싶지만 ext3로 돌아가는 옵션을 보존하려면 -o noextents
옵션을 붙여 extents 사용을 피하자.
실제로 ext4를 마운트해 사용하기 시작하면 다른 파일 시스템과 똑같이 동작한다. 파일을 복사하고 직접 생성하는 작업이 가능하다. 버그가 생기거나 벤치마크 테스트를 하지 않는 이상 차이점을 느끼지 못할 것이다.
tune2fs
프로그램을 사용해 ext2나 ext3 파일 시스템을 조율하듯이 동일한 방법으로 ext4 파일 시스템을 조율할 수 있다. 현재, tune2fs
는 ext4 관련 옵션을 하나도 제공하지 않지만, 표준 -O
매개변수로 extents
와 같은 ext4 옵션을 설정할 수 있다.
ext4로 파일 시스템을 마운트할 때, 커널은 extents와 같이 파일 시스템에 밀접한 기능을 사용하기 시작한다. 이렇게 되면 이리저리 묘기를 부리지 않는 이상 ext3 파일 시스템으로 다시 돌아가서 마운트하지 못하도록 막아버린다.
ext3 파일 시스템을 ext4로 마운트하면 ext4 관련 기능을 활성화하지만, 마운트 자체만으로는 과거 자료 구조를 새로운 형식으로 변환하지 않는다. 예를 들어, 현존하는 파일은 extents 대신에 block-for-block 방식으로 할당된다. 따라서 예전 파일은 새로운 기능이 제공하는 장점을 활용하지 못한다. 하지만 ext4 개발자는 이런 점을 고려해 앞으로 전진할 방법을 제공한다. (다음에 설명할 아주 실험적인) e4defrag
도구는 extents를 사용해 할당하도록 변환 작업을 수행한다. 또 다른 새로운 도구(아직 공개되지 않았지만)는 새로운 형식에 맞춰 아이노드 크기를 변경하는 기능을 제공할 예정이다.
표준 e2fsprogs
도구를 사용해 ext4 파일 시스템을 관리할 수 있다. 예를 들어, 파일 시스템을 생성한 다음에 옵션을 조정하려면 tune2fs
를 사용하고, 파일 시스템을 점검하려면 fsck.ext4
를 사용한다. 이런 프로그램은 ext3와 비교해 ext4에 들어와서도 그다지 바뀌지 않았다. 하지만 직전에 언급했듯이 ext4는 fsck
성능을 향상시키기 위한 몇몇 개선 사항을 포함하고 있다.
이런 도구 이외에도, 새롭게 등장한 도구인
e4defrag
에 관심을 기울일 필요가 있다. 이 프로그램은 마운트된 ext4 파일 시스템을 대상으로 조각 모음을 실행한다. 이런 작업은 특히 파일 시스템이 거의 가득 찼을 경우에 성능을 향상시킬 수 있다. 또한 ext2/3 스타일 할당을 ext4 스타일 extents 기반 할당으로 변경하는 장점이 있으므로, ext3 파일 시스템으로 사용했을 경우와 비교해 성능을 높여준다. 불행하게도
e4defrag
는 아직 표준
e2fsprogs
패키지에 들어있지 않으므로, "원본 파일"을 구하기 위해 인터넷을 뒤져야 한다(
참고자료 절에 링크를 달아 놓았다).