ext3 파일시스템구축하기.

글쓴이: backdraf 글쓴날: 2001-04-04 08:20:49 읽은수: 902 <+>
ext3 파일시스템구축하기.

주의) 함부로 시스템을 건드리는것은 위험하니 주의하시기바랍니다.

ext3는 져널링파일시스템의 하나입니다. ReiserFS(라이져파일시스템)이
커널 2.4 기반에서는공식 커널에 이미 포함될정도로 성장해있지만
ext3는 아직 버젼이 0.0.6b 로 실제사용층이 그리 넓지는 않은것 같습니다.

ext3를 제가 처음으로 접한건 작년 3월경쯤에 개인 서버를 운영하다
잦은정전으로 파일시스템이 깨져서 날린다음에 어떤 방법이 없나
찾아보다가 그때 이미 라이져파일시스템이 있긴 했지만 정보부족내지는
쉽게 이해가 갈정도로 개인적으로 이쪽이 취향이 가길래 이걸 도입해봤습니다.
그때 버젼이 0.0.3c 였고 이걸로 올초까지 지내왔습니다. 사실 작년가을에
몇번의 버그잡이 버젼업이 있었는데 바빠서 손을 못대고 귀찮은걸 지켜만
보고 있다가 근래에야 다시 패치를 하게돼더군요.

제가 다른것은 듣기만했고 직접비교는 뭐하지만 한가지만은 안심하게 되서
만족스럽게 생각합니다. 이 서버가 있는 건물이 워낙 불시에 정전이 많기때문에
항상 이제나 저제나 하곤했었는데 이걸로 바꾸고는 정진, 리부팅시 파일시스템이
깨지는 걱정은 덜게 됐다는거 하나만으로도 충분히 만족하죠. 물리적손상이야 감수해야겠지만요.
그외에도 져널링파일시스템이라는게 리부팅시 복구시간이 예전처럼
오랜시간을 잡아먹지도않고 순식간에 체크하고 넘어간다는게 또 그렇구요.
그와중에 혹시나 깨져버리면 어쩌나 자료날아가면 어쩌나 하는 걱정도 할 필요없구..

사설이 넘 길군요.

*****************************
그럼 커널소스 linux-2.2.19.tar.gz 는 있어야겠죠. 가까운 미러사이트에서
가져오시든지 시디롬으로 2.2.18버젼소스가 있다면 패치파일 patch-2.2.19.gz 만
가져와서 직접 패치를 해주셔도됩니다.

/usr/src 디렉토리로 풀소스를 가져옵니다.(그이전 다른소스로 디렉토리가
있으면 다른 버젼이름으로 바꿔서 백업을 해놓는것이 좋습니다)
#cd /usr/src
#tar xvzf linux-2.2.19.tar.gz

(기존 2.2.18소스가 이미 있어서 2.2.19로 패치만 할 경우는 /usr/src/linux 디렉토리로
patch-2.2.19 를 받아다가
#cd /usr/src/linux
# patch -p1 < patch-2.2.19 하면 패치가될겁니다.)

*********************************
이제 커널소스가 마련이 됐으면 ext3 추가 패치를 할 순서입니다.

현재버젼 ext3-0.0.6b 입니다. 아래사이트에서

ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs
ftp://ftp.*.kernel.org/pub/linux/kernel/people/sct/ext3

ext3-0.0.6b.tar.gz 를 가져옵니다. 이파일을 받아다가 커널소스디렉토리에 풉니다.
(상위디렉도 상관없는데 -p0 냐 -p1냐 옵션이 달라지는것뿐이죠)

#cp ./ext3-0.0.6b.tar.gz /usr/src/linux

#cd /usr/src/linux

#tar xvzf ext3-0.0.6b.tar.gz

linux-2.2.19pre14.kdb.diff
linux-2.2.19pre14.ext3.diff
기타 readme파일도있으니 한번 읽어보시구요.

#pwd
/usr/src/linux 현재디렉토리입니다.
그럼 순서에 맞춰서..

#patch -p1 < linux-2.2.19pre14.kdb.diff
..
..
..
#pathc -p1 < linux-2.2.19pre14.ext3.diff
..
..

**보시면 알겠지만 이 패치가 제작된게 커널 2.2.19pre14 버젼에 맞춰서
제작된거라서 정식 2.2.19버젼에 적용할경우 버젼넘버가 틀리다고 중간에
서너가지의 failed hunk 가 나오지만 넘어가도 상관없습니다.
원저자말이 프리버젼하고 정식버젼하고 넘버링등 미세한차이뿐없고 패치가
되는부분은 변화가 없답니다. 저도 그렇게 잘 되었습니다. (커널 2.2.19pre14에서는
깨끗하게 패치가 되었었는데 여기서 hunk 가 몇개 나서 기분이 좀 그렇긴 하죠)
단 커널 2.2.19pre2 이전 버젼하고는 큰차이가 있어서 그전버젼하고는 패치가 되지 않습니다.

여기서 패치가 제대로 돼야하는데 제대로 안된다고 하시는경우에는
커널패치하시는 방법을 익히시고 나름대로 패치하신후에 더 나가야합니다.
저자의 표현으로는 이 패치하는방법을 모른다면 당장 여기서 접으라고
표현할정도니 불필요한 모험은 삼가라는 것이겠습니다.

**********************************
여기까지 했으면 다음차례는 짐작하시겠죠. 커널컴파일입니다.
커널컴파일은 다 아시리라 짐작하고 넘어갑니다. 다만 체크해줄것만.

맨처음부분, code maturity..안에 prompt for developement and... 이걸 체크해줍니다.
그러면 다음리스트들중에 개발단계옵션들이 보여지도록 되겠죠. 그러면 다음중간부분 Filesystems 하위의
Second extended fs developement code 이걸 선택하는것으로 목적이 달성됩니다. 기타 옵션들은 자기자신에 맞도록 스스로 선택해주고
넘어가시면 됩니다.

기타 커널컴파일순서는 아시는대로 마치실줄 아시리라 생각합니다. (백업은 항상 신경쓰시길바랍니다)
만들어진 새 커널로 부팅해서 들어옵니다. 그럼 이커널은 앞으로
설정할 ext3 시스템옵션을 인식할수 있는 능력이 생기게 됩니다.
그리고 ext3 시스템이 ext2와도 호환이 되는상태니 기존의 ext2파티션을 인식하는것도 아무 문제가 없습니다.

**********************************
이제 남은것.

여러개로 쪼개진 기존의 파티션들 ,ext2 파티션들, 을 하나씩 ext3 로 전환하는것.
여기서는 기존의 파티션의 자료를 그대로 보존하면서 파일시스템을 순간적으로 변화시킬수가 있어서 아주 매력적입니다.

그럼 ext3파일시스템을 생성, 변환할수 있는 툴을 다시 가져와야겠습니다. 다음사이트에서

http://people.spoiled.org/jha/ftp/

로 가서 자신의 래드햇계열 버젼에 맞는 디렉토리에서
e2fsprogs-1.20.WIP.sct-20010229.i386.rpm
을 가져다가 먼저 설치해줍니다. (꼭 여기서 가져오시기 바랍니다. 날짜버젼별로 아직 사소한 차이가 있어서요)

#rpm -Uvh e2fsprogs-1.20.WIP.sct-20010229.i386.rpm
이안에 e2fsck, fsck, fsck.ext3 ,mke2fs, resize2fs, tune2fs 등등 ext3 와 호환성을 유지하게 하는 파일유틸리티들이 들어있습니다.

이제 우리가 사용할 명령어는 tune2fs

제가 예를들 시스템입니다.

# mount
/dev/hda1 on / type ext2 (rw)
none on /proc type proc (rw)
/dev/hda2 on /backup type ext2 (rw)
/dev/hda5 on /home type ext2 (rw)
/dev/hdb1 on /home/ftp/pub/upload type ext2 (rw)
/dev/hdb2 on /usr/local/src type ext2 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)

다 ext3파티션으로 바꿀건는데 한번에 하나씩 바꿉니다.
먼저 아무파티션이나 하나 선택합니다.

먼저 서버라면 실행중이던 서비스를 잠시 멈추셔도 좋겠네요.
번거롭지만 어차피 루트파티션까지 변환시킬려면 한번의 재부팅이 있어야하거든요.

우선 /dev/hdb2 를 변환시켜볼까요(이미 마운트되어있는겁니다) . 생각보다 간단합니다.

#tune2fs -j /dev/hdb2
잠시 그파티션에 숨겨진 져널링파일을 생성하고 돌아올겁니다.
.journal 이라는 파일이 그파티션에 생성됩니다.
immutable 파일이라서 루트권한으로도 이속성을 제거하지 않는한 지우거나 변경하지 못합니다. (chattr +i 명령을 쓴거와 같습니다)

그럼 이제 이파티션은 ext3로 각인이 됐으니까 언마운트한다음 파일시스템옵션을 ext3로 주고서 마운트해봅니다.

#umount /dev/hdb2
#mount -t ext3 /dev/hdb2 /usr/local/src
성공했죠?

다음번 부팅시나 마운트시부터는 /etc/fstab 파일안에 일률적으로 ext2를 ext3로 바꿔주고 자동으로 되는거겠구요.

다른파티션도 마찬가지로

#tune2fs -j /dev/hda2
#umount /dev/hda2
#mount -t ext3 /dev/hda2

또다른파티션....

#tune2fs -j /dev/hdb1
#umount /dev/hdb1
#mount -t ext3 /dev/hdb1

이런식으로 파티션을 하나씩 변환해나가면 되는겁니다. 여기서 에러가 나지는 않을겁니다.

다음으로 중요한게 루트파티션을 마지막으로 변환하는건데 이건 조심스럽게 신중하게 생각해야하겠습니다.
루트파티션이 잘못되서 부팅이 안되는상황이 벌어지면 귀찮아질테니까요. 또 걱정이 안될수도 없으니 이정도로 충분하다싶은분들은 루트파티션만은 그냥 놔둘수도 있습니다.
제경우에는 이것때문에 삽질을 하게된거니 본래목적이 이거라서 아무부담없이 바꿨지만요.

루트파티션도 마찬가지로 바꿉니다.

#tune2fs -j /dev/hda1

앗!!!!!!!
그런데 다음 이걸 언마운트하고 다시 리마운트를 해야되는데 어떻게 하죠.... 루트를 맘대로 언마운트할수도없고..
이거 고민이었습니다.

(사실 예전버젼 0.0.3대 버젼까지만 해도 tune2fs -j 라는 정말 간단한 변환방법이 없어서
각각 ls -i 명령으로 져널파일의 아이노드를 알아내고 릴로의 부트옵션으로
/sbin/lilo -R ext3 rootflags=journal=아이노드번호 이렇게 해주고 나서 리부팅했었습니다. 그런데 버젼이 올라가면서 tune2fs -j 가 가능해지고서는 이런옵션이 사라졌습니다 .. 마운트된 파티션에도 져널링넘버를 자동으로 부여해줄수 있어서 전에 리마운트시 아이노드를 지정하곤 했던게 불필요해졌다고 하네요그때는 모든 파티션에 일일이 지정해주고 마운트를 해줘야 인식을 하곤했었거든요)

루트파티션도 위와같은 tune2fs -j 옵션으로 변환을 했으면 다음 마운트시(재부팅시겠죠) ext3로 마운트됩니다.

************************************
그럼 마지막으로
/etc/fstab 파일을 열어서 지금까지 변환한 파티션들을 모두 알맞게 ext2 를 ext3로 고쳐적어주는걸 잊지마십시요. 이걸 잊거나 루트파티션을 그냥 ext2 로 놔두거나 하면 다음 부팅시

fsck.ext2(null): The superblock could not be read or does not describe a correct ext2
filesystem ..............then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193

이런 원하지않는 메세지를 남기고 부팅에 실패할수 있으니 마지막까지 신경쓰시구요.
사실 이런 메세지는 기존의 e2fsprogs 내의 파일시스템 체크유틸들이 ext3를 인식해주지 못해서 나오는건데 위에서 제대로 e2fsprogs 파일을 받아왔으면 다음 재부팅시키면 제대로 인식하고 넘어갈겁니다. 다 제대로 됐으면 위와같은 상황에서도 그냥 재부팅시키면 넘어갑니다..

그럼 큰맘먹고 루트파티션까지 변환을 시켰으면 재부팅을 해봐야겠죠.
reboot 또는 shutdown -r now 명령으로 재부팅해봅니다.
부디....제발..넘어가라......기도도 했습니다. 처음엔.

재부팅. 별이상이 없나요? 이상대로 따라 했으면 별 이상이없을테고 그러길바랍니다. 정신건강을 위해서.

# mount
/dev/hda1 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/hda2 on /backup type ext3 (rw)
/dev/hda5 on /home type ext3 (rw)
/dev/hdb1 on /home/ftp/pub/upload type ext3 (rw)
/dev/hdb2 on /usr/local/src type ext3 (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)

제대로 올라갔나 확인도 해보시구요.

다음부터는 정전시라든가 원치않는 재부팅시에 혹시나 파일시스템이 깨지지나 않을까
걱정을 하지 않아도 좋을겁니다. 경험상으로 수십번 정전이 있었지만 부팅시 부드럽고 깨끗하게 넘어가는것을 봐와서 만족하고있거든요. 혹시나 잘못되면 시스템도 다시 깔아야되고 날아가버린 자료는 어떻게 하나하고 고민들 많이했었던 차라서 더 그렇게 생각되는지 모르겠습니다.
물론 백업은 달리 방도를 마련해야되는거겠죠. 물리적으로 다른디스크, 백업장치라든지 마련해두면 좋은데
이럴 여유가 별로없으면 이방법으로나마 위안을 삼습니다.

이상의 내용은 기존의 파티션 내용을 그대로 유지하면서 , 파일시스템을 바꾸는 방법이었고 tune2fs -j 라는 아주 혁신적인 방법을 쓰는것이었습니다.

처음부터 파티션을 밀고다시 ext3 파티션을 생성하는것도 간단합니다.
# mke2fs -j /dev/hd? 하면 그파티션을 져널링아이노드를 가진 ext3파일시스템으로 만들어 줍니다. 뭐 같은 이치겠죠.

참. 그리고 혹시라도 다시 예전으로 ext2파일시스템으로 돌아가고 싶다 하는경우가 있어도 아주 간단합니다. 언마운트고 재부팅이고 필요도없고 다음과 같이 하면됩니다.

#debugfs
debugfs: open -f -w /dev/hd?? <-해당디바이스이름
debugfs: features
debugfs: features -has_journal -needs_recovery
debugfs: quit
이렇게 해주면 끝입니다. 다음부터 /etc/fstab 에서 해당 부분에서 ext3대신 ext2로 수정해주면 되는겁니다.

몇번이고 ext3를 만들었다가 복귀시키고 해보면서 실험을 해봐도 좋겠죠. 하나의 실험파티션을 대상으로요.

해본사람은 쉽고 안해본사람은 어려운게 다 그런것같습니다. 나중에 보면 너무간단해서 더 할말도 없는것을.

***********************************
그리고 현재는 이게 커널안정버젼 2.2.19 에 대응하는 패치만이 있습니다.
요즘 다들 시대를 앞질러가서 누구나 최신의 2.4버젼대의 커널을 생각하는판이라서
불만스럽게 생각할수도 있겠지만 저자말로는 아직 2.4버젼대가 안정화가 덜되서 그쪽을 안정시키는 작업으로 집중 한 다음에야 패치를
만들겠다고 합니다. 패치는 금방 만든다고 했으니 그쪽이 안정되면 업그레이드도 어렵지않을겁니다.

참고사이트를 자주보시고 이해를 하시려고 노력한후에는 더 쉽게느껴질수도 있습니다. 더불어 readme 파일은 필히 봐야겠죠(다만 업데이트가 안된게 readme.txt가 있으니 참고)

https://listman.redhat.com/pipermail/ext3-users/
지금 개발하고있는 개발자들의 메일링리스트를 볼수있습니다. 자주읽으시면 도움이 됩니다.

http://people.spoiled.org/jha/ext3-faq.html
간단명료하게 요약해놓은 faq.

기타 위의 자료사이트.

아쉬운게 작년에 제가 처음으로 접했던 ext3관련 한국분 사이트가 아직 안살아나서 아쉽습니다.

http://www.namesys.com/benchmarks/mongo/mongo_res_2.2.18-3.5.30.html
참고, reiserfs파일시스템의 비교 벤치마크자료를 보면 역시 오래도록 개발되온 버젼답게 우수한 성능을 보여주더군요.
버젼이 3.6에 달하는동안 많이 향상됐고 앞으로도 더 그럴거라 생각되네요. 100바이트, 1K 이하
작은용량의 파일을 처리하는데는 10배이상의 성능차이를 보이고 있고 이미 정식 커널에도 들어간걸 보면 저변도 늘어나겠구나 생각됩니다.

다만 전 이 ext3파일시스템을 쓰면서 여기 이정도로 충분히 만족할 성능을 보여주는게
맘에 들었고 앞으로 변화해가는게 눈에 보일정도인게 또 맘에들어서 서 아는사람 있으면 추천해주고 싶은 마음으로 이글을 쓰게 됐습니다.

******************************************
내용없이 길게쓰는것이 흠이라.. 죄송합니다.
조금이라도 도움이 될수 있었으면 하는바람입니다.

메일 : <backdraf [at] hanmail [dot] net>

끝.

관련 링크: ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs

'System' 카테고리의 다른 글

부트디스켓 만들기  (0) 2001.09.09
lilo가 죽었을때 dos에서 리눅스로 부팅  (0) 2001.09.07
커널로그만 따로 기록하기  (0) 2001.08.22
하드디스크 속도 높히기  (1) 2001.08.08
로그 분석하기  (0) 2001.08.08

+ Recent posts