난이도 : 초급 Daniel Robbins, President/CEO, Gentoo Technologies, Inc
2001 년 8 월 01 일 Linux 2.4 기반의 ReiserFS 시스템 설치 과정을 상세히 설명한다.
2.4 시리즈 커널에서 ReiserFS를 실행시키는 방법을 설명하겠다. ReiserFS의 퍼포먼스를 고려하여 가장 적합한 커널(2.4)
정보도 제공할 것이다. 설치하기 전에 이 글을 끝까지 읽고 완벽히 이해하기 바란다.
적합한 커널 찾기
ReiserFS를 실행하기 위해서는 우선 적합한 커널을 찾아야 한다. 2.4.6-pre2 버전까지 발표되었지만(이 글을 쓸 당시),
2.4.4 (표준 Linus kernel)나 2.4.4-ac9 (약간 향상된 Alan Cox 커널)을 사용을 권장하고 싶다.
테스트를 해 본 결과, 2.4.5은 생산 환경에는 사용하지 않는 것이 좋겠다.
ReiserFS 시스템에 2.4.4나 2.4.4-ac9 커널 이외에 다른 것을 사용하고 싶다면, ReiserFS가(그리고,
커널이) 안정적인지를 반드시 확인하라. 물론, 테스트 서버에 ReiserFS를 설치할 수 있고 각자가 선호하는 커널에 사용할
수 있다. 단, 중요한 데이터가 아닐 경우에 한해서 이다.
커널과 ReiserFS 안정성을 고려해야만 하는 이유가 있다. ReiserFS는 "실험" 커널이라는 특징이 있기 때문에 새로운
커널의 ReiserFS가 더욱 완벽하게 작동할 것이라는 생각은 버려야 한다. 또 다른 이유는, 2.4 커널 배포판과 패치 대부분은
기반이 튼튼하지 않기 때문에 당분간은 조심스럽게 다져가야 한다. 이론적으로는 모든 2.4 배포판들이 생산환경에 쓰일 수 있어야
한다. 하지만 현실에서는 그다지 안정적이지 않다. 또한 테스트가 되지 않은 새로운 커널에 대해서는 세심한 주의를 기울여야 한다.
이런 정보를 주는 이유는 ReiserFS나 Linux 2.4를 사용하지 못하도록 하려는 의도는 아니다. 다만, 모험적 성격이
강한 사람들을 위해서 주의를 환기시키려는 목적이다. 최신 커널이라고 해서 무조건 선호하지는 말라. 입증되지 않은 커널을 사용할
때, 시스템 'lock-up'의 위험만 있는 것은 아니다. 데이터 손실, 파일시스템 오염(corruption)등의 위험도 감수해야
한다. ReiserFS가 그 자체로 견고하더라도 커널의 다른 부분의 주요 버그가 파일시스템 손상을 유발할 가능성도 매우 크다.
커널 안정성과 관련한 최신 정보는 'Linux Weekly News' (참고자료)를
정기적으로 참조하기 바란다. 중요한 커널 문제에 대해 수시로 업데이트 되어있다. (매주 목요일 업데이트 된다) 이제, 모험심이
가득한 독자들도 ReiserFS를 설정할 때 2.4.4나 2.4.4-ac9를 사용할 것이라는 믿음이 생겼으니 본론으로 들어가보자.
표준 커널
이제, ReiserFS를 실행시키기 위한 세 가지 옵션을 살펴보도록 하자. 첫 번째는 2.4.4 Linux 커널을 사용하는 것이다.
두 번째는 ReiserFS bigpatch와 함께 2.4.4 kernel을 사용하는 것이다. 세 번째는 ac9 패치(2.4.4-ac9)와
함께 2.4.4 커널을 사용하는 것이다. bigpatch는 있어도 되고 없어도 된다. bigpatch가 있는 2.4.4-ac9를
사용 할 것을 권장한다. bigpatch는 부작용이 없으며 여러분에게도 필요하다. 그리고 ac9는 표준 kernel 보다 퍼포먼스가
뛰어나다. 하지만, ac 커널에 반감을 갖고 있다면, 표준 2.4.4도 무방하다. 이제부터 bigpatch와 함께 2.4.4-ac9을
설치하는 과정을 설명할 것이다. 하지만 이 패치 중 한 두개 정도를 설치하지 않아도 된다면 특정 단계를 무시해도 좋다.
우선 kernel.org에서 2.4.4
커널 소스를 다운로드 하여 /usr/src 디렉토리로 들어간다. 기존 linux 디렉토리나 symlink를 이름을 바꾸거나(디렉토리일
경우) 삭제(symlink일 경우)하여 이동시킨다 :
# cd /usr/src
# cat /path/to/linx-2.4.4.tar.bz2 | bzip2 -d | tar xvf -
|
ac9 patch & bigpatch
표준 2.4.4를 사용할 계획이라면, 이미 필요한 모든 소스가 있기 때문에 나머지 패치는 스킵해도 된다. 하지만 ac와 bigpatch
패치를 계속적으로 사용하기 바란다.
ac9 패치를 사용하려면 kernel.org에서 Alan
Cox ac9 patch 를 다운로드 하라:
# cd /usr/src/linux
# bzip2 -dc /path/to/patch-2.4.4-ac9.bz2 | patch -p1
|
표준 커널이 준비되면 DiCE에서
DiCE의 ReiserFS
bigpatch를 다운로드 한다. 다시 한번 말하지만 이번 단계는 선택적인 것이고 권장사항은 아니다. 특히 시스템에 NFS
서버를 실행한다거나 quota가 필요한 경우도 마찬가지이다. bigpatch를 사용하는 방법은 다음과 같다:
# cd /usr/src/linux
# bzip2 -dc /path/to/bigpatch-2.4.4.diff.bz2 | patch -p1
|
선택적인 픽스와 bigpatch가 적용되면 ReiserFS를 위한 커널 설정 준비가 된 것이다.
주의: Linux 커널의 컴파일 방법에 대한 자세한 정보는 developerWorks의 Compiling
the Linux kernel (무료 튜토리얼)을 참조하기 바란다. 다음은 요약 내용이다.
커널 설정은 매우 쉽다. 우선 "make menuconfig"를 타이핑한다. "Code maturity level options"
섹션 아래에서 "Prompt for development and/or incomplete code/drivers" 옵션이 사용
가능한지 확인한다. 그런 다음 "File systems" 섹션으로 가서 "ReiserFS support"를 작동시킨다. ReiserFS
지원이 커널에서 직접 컴파일 되도록 설정해야 한다. (모듈로서가 아니다). 또한 "Have reiserFS do extra internal
checking" 옵션을 작동시키는 것도 좋은 생각은 아니다. 이제 세팅을 저장하고 커널을 컴파일 하라. ("make dep;
make bzImage; make modules; make modules_install"). boot loader를 설정하여
새로운 ReiserFS 커널을 로딩한다.
ReiserFS 사용하기
툴 설치
재부팅 하기 전에 "reiserfsprogs" 툴을 설치해야 한다. 여기에는 "mkreiserfs", "resize_reiserfs"
(useful for LVM users), "fsck.reiserfs"가 포함되어 있다. Namesys.com
download page에서 최신 버전의 "reiserfsprogs"를 다운로드 하라. 일단 툴을 다운로드 한 후 다음과
같이 컴파일 및 설치할 수 있다:
# cd /tmp
# tar xzvf reiserfsprogs-3.x.0j.tar.gz
# cd reiserfsprogs-3.x.0j
# ./configure
./configure output will appear here
# make
make output will appear here
# make install
make install output will appear here
|
툴이 설치되었기 때문에 필요한 경우 새로운 파티션이나 ("fdisk" 또는 "cfdisk" 사용) LVM 논리적 볼륨 ("lvcreate"
사용)을 만들고 시스템을 재부팅 한다. 표준 파티션을 만든다면 파티션에 "Linux native file system" (83)이라고
레이블링(labeling)한다.
파일시스템 생성 및 마운트
재부팅 되면 비어있는 파티션에 다음과 같이 ReiserFS 파일시스템을 만들 수 있다:
위 예제에서 /dev/hdxy 는 비어있는 파티션에 해당하는 디바이스 노드가 된다. 마운트는 다른 파일시스템 방식과 같다:
# mount /dev/
hdxy
/mnt/reiser
|
ReiserFS 파일시스템을 /etc/fstab 파일에 추가하고 싶다면 "freq"과 "passno" 필드를 "0"으로 설정한다:
/dev/hdc1 /home reiserfs defaults 0 0
|
이제부터 ReiserFS 파일시스템은 ext2 와 동일하게 작동할 것이다. 긴 "fsck"에 대해서 걱정하지 않아도 된다 전체적인
퍼포먼스도 훨씬 향상될 것이다. 특히 작은 파일에 대한 퍼포먼스가 향상된다.
ReiserFS 특징
파일시스템 안정성
나는 몇 개월에 걸쳐 cvs.gentoo.org 개발 서버에 2.4.4의 ReiserFS를 사용했었다. 손상(corruption)
문제가 전혀 없었다. 2.4.4와 2.4.4-ac9는 매우 안정적이다. 서버는 상당량의 디스크 IO를 수행해 냈다. cvs 의
메인 저장소, "dev-wiki", gentoo.org의
메일 서버, mailman 기반의 메일링 리스트 등의 역할을 훌륭히 소화해 냈다.
ReiserFS 한계
ReiserFS이 거의 모든 애플리케이션에 있어서 ext2 파일시스템 보다 뛰어나지만 그렇지 못한 부분도 있다. 다행히 이러한
문제들은 실제로 ReiserFS에 심각한 제한 요소로 작용하지 않는다.
No dump/restore
사실이다. ReiserFS는 아직까지 "dump"와 "restore" 프로그램이 없다. 실제로, 논의의 대상이 될 수가 없다.
왜냐하면 2.4 커널은 "dump"/"restore"와 호환되지 않기 때문이다. "dump/kernel 2.4 비호환(incompatibility)"
에 대해서 Linus Torvalds (참고자료 참조)는 다음과 같은 말을 했다;
"Dump는 바보같은 프로그램이다. 무시하라."
퍼포먼스
ReiserFS가 일반적으로 ext2보다는 우수하지만, 몇 가지 퍼포먼스 취약점도 지니고 있다. 첫번째는 파일 퍼포먼스이다.
ReiserFS의 파일 퍼포먼스는 ext2보다 상당히 약하다. 현재로서는 ext2가 더 나은 솔루션을 제공한다.
또 다른 문제로는 많은 파일에 대해 수행되는 stat() 호출 문제가 있다. 퍼포먼스의 약점을 유발하는 애플리케이션은 "mutt"
메일러 (참고자료 참조)이다. 이것이 큰 maildir 스타일의 메일박스를 읽기위해
사용될 때 퍼포먼스가 약해진다. (2.4 커널의 ReiserFS 애플리케이션에만 존재). mutt 는 각각의 메일을 두번씩 "stat"
한다. 이는 퍼포먼스에 심각한 손상을 끼친다. ReiserFS 개발팀은 이러한 특별한 문제를 인식하고 있고 원인을 규명해왔다
ReiserFS 4에서 솔루션이 개발되기를 기대해본다.
퍼포먼스 향상
다행스럽게도 이러한 문제들의 심각성을 완화시키기 위해 사용할 수 있는 일반적인 방법이 있다. 첫째는 "noatime" 마운트
옵션으로 ReiserFS를 마운트하는 것이다. 여러분도 잘 알고 있듯이 UNIX 시스템은 파일이 읽혀질 때마다 업데이트 된 파일
시스템상의 각 객체에 대해 atime 또는 access time을 기록한다. 대부분의 사람들에게 atime 스탬프는 유용하지도
않고, 어떤 애플리케이션도 중요한 태스크에 atime을 의존하지 않는다. 이러한 이유로 '안전하게' 제거하여 전체 퍼포먼스 향상에
기여할 수 있다. atime 지원의 필요성을 구체적으로 인식하지 않는 한 noatime 옵션으로 파일시스템을 마운트해야 한다.
/etc/fstab 엔트리를 사용한다:
/dev/hdc1 /home reiserfs noatime 0 0
|
ReiserFS에는 "tail packing"이라는 특별한 기능이 있다고 설명했다.(part
1 참조) ReiserFS 용어에서 "tail"은 파일시스템 블록(4k) 보다 작은 파일이나 파일시스템 블록을 다 채우지
못한 파일의 나머지 부분을 뜻한다. ReiserFS는 작은 파일에 있어서 매우 탁월한 퍼포먼스를 보인다. 왜냐하면 이러한 tail들을
b*tree (주요한 조직적 데이터 구조)로 만들어서 stat-data (ReiserFS의 i-node 같은 것)와 유사해지도록
하기 때문이다. 하지만 tail들은 완전한 블록을 채우지 않기 때문에 많은 디스크 공간을 낭비할 수 있다. 이러한 문제를 해결하기
위해 ReiserFS는 "tail packing" 기능을 사용하여 tail을 압축하여 최대한 작아지도록 한다. 일반적으로 ReiserFS
파일시스템이 ext2 파일시스템 보다 약 5%정도 여유 공간을 확보할 수 있다.
notail
tail packing 또한 약점을 가지고 있다. 퍼포먼스에 작지만 중요한 타격을 줄 수 있기 때문이다. 다행스럽게도 ReiserFS
개발자들은, 사람들이 5%의 디스크 용량을 작은 추가 퍼포먼스를 위해 기꺼이 희생할 것이라고 예견했다. 그래서 "notail"
마운트 옵션을 만들었다. 이 옵션으로 파일시스템이 마운트되면 tail packing은 없어지면서 더욱 빠른 속도와 작은 저장
용량을 제공한다. 일반적으로 "notail"과 "noatime" 모두가 가능한 파일시스템을 마운트 하면 놀라운 퍼포먼스 향상을
이룩할 수 있다:
/dev/hdc1 /home reiserfs noatime,notail 0 0
|
어느 정도의 디스크 공간을 남겨두고 싶다고 하더라도 "notail" 옵션으로 파일시스템을 임시로 마운팅하는 것이 더 나을
때가 있다. 특히 대부분의 부트로더는 tail packing이 가능한 ReiserFS 파일시스템에서 생성된 커널을 로딩할 때
문제점을 가지고 있다. 21.6 버전 이전의 LILO를 사용하고 있다면 이러한 문제가 생길 것이다. 또한 대부분의 최신 버전
GRUB에도 이러한 문제가 있다. 비록 실제 커널을 로딩할 때 어떤 문제가 없더라도 stage1과 stage1_5 파일을 로딩할
수 없다. 이미 이러한 문제를 경험했다면 "notail" 옵션으로 파일시스템을 마운팅하여 파일을 다른 파일시스템으로 옮기고 그런
다음 그것을 다시 옮기는 방식으로 문제를 픽스할 수 있다. 그것들이 다시 생성되면 tail이 없을 것이다. 또한 이것을 언마운트
하지않고 쉽게 리마운트 (새로운 옵션으로) 할 수 있다는 것도 기억하라. 다음의 특별한 예제는 root 파일시스템을 "notail"
옵션으로 리마운트 하는 방법이다. 이러한 명령어는 정상적으로 tail packing을 사용하길 원하거나 root 파일시스템에서
부트로더가 커널과 같은 보조 파일을 로딩할 때 매우 유용하다:
# mount / -o remount,notail
|
Qmail
ReiserFS와 함께 qmail을 사용하고 있다면 알아야 할 몇 가지 정보가 있다. 우선 이 패치를
qmail 1.03 소스에 적용시켜야 한다. 이것은 비동기식의 "link()" 와 "unlink()" 호출과 관련한 qmail
문제를 픽스한다. 이러한 문제는 ext2에서도 발생한다. 그런다음 Jedi's
qmail tuning page를 참조한다. qmail 퍼포먼스를 늘리는 방법이 소개되어있다. 마지막으로 Jedi's
ReiserSMTP 패키지를 검토하라. ReiserSMTP에는 qmail의 SMTP 부분을 대체할 GPL plug-in이
포함되어 있다. 특별히 ReiserFS를 위해 변경되었으며 메일 퍼포먼스 향상을 가져온다.
결론
ReiserFS가 놀라운 파일시스템이라는 것을 알았다. 작은 파일 퍼포먼스 뿐 아니라 전반적으로 뛰어난 파일 퍼포먼스를 제공한다.
ReiserFS 덕택에 우리회사의 개발자들은 15초 만에 Gentoo Linux "cvs" 를 업데이트 할 수 있었다. ext2의
경우 2분 정도가 소요된다. ReiserFS로 인해서 cvs 서버는 상당량의 동시적인 IO를 핸들할 수 있다.
무엇보다도 ReiserFS의 가장 큰 장점은 장래성이 있다는 것이다. Hans Reiser는 ReiserFS에 대해 매우 적극적이고
혁신적인 계획을 가지고 있다. 파일시스템을 확장하여 완벽한 고성능 데이터베이스, 트랜잭션 지원, 고급 쿼리 기능으로 사용 할
야심찬 계획을 가지고있다. ReiserFS가 단지 "또 다른 하나의 고성능 파일시스템"에 그치는 것이 아니라 새로운 가능성과
접근 방식을 채택할 것을 의미한다. 새롭고 혁신적인 방식으로 기존의 저장 문제를 해결할 수 있을 것이다.
참고자료
필자소개  | 
| 의 창설자이자, 차세대 Linux 포트 시스템인 Portage 시스템의 창시자이다. 또한 Macmillan사에서
출판하는 Caldera OpenLinux Unleashed, SuSE Linux Unleashed, Samba Unleashed에
집필활동을 하고 있다. |
기사에 대한 평가
|