제공: 한빛미디어 네트워크 기사
저자: 김권호, 박영심, 임영규 / TBC 교육센터
1. 파일 시스템이란?
파일 시스템이란 파일의 실제 데이터와 메타데이터(파일의 위치, 크기, 소유자, 허가권 등, ls -al로 볼 수 있는 파일정보)를 유지/저장하는 체계입니다. 파일에 이름을 붙이고, 저장이나 검색을 위해 논리적으로 그것들이 어디에 위치시켜야 하는지 등을 나타내는 방법입니다.
도스, 윈도우, OS/2, 매킨토시 및 유닉스 기반의 운영체계들은 모두, 파일들이 어딘가에 계층적인 구조로 위치하는 파일 시스템을 가지고 있습니다. 파일은 계층구조 내의 바른 위치인 디렉터리 (윈도우95 이후에는 폴더) 또는 서브디렉터리 내에 놓여 집니다. 파일 시스템들은 파일의 이름을 붙이는 규칙을 가지고 있습니다.
이러한 규칙에는 파일이름의 길이제한, 어떤 글자들이 사용될 수 있는지 등이 포함되며, 몇몇 시스템에서는 파일이름 확장자의 길이조차 제한을 두고 있습니다. 파일 시스템은 또한 디렉터리 구조를 통하여 파일까지 가는 경로를 설정하는 형식을 포함합니다.
2. 저널링 파일 시스템이란?
저널링 파일 시스템은 데이터베이스에서 사용하는 저널링 기술을 적용하여 일정부분을 기록에 남겨두어, 백업 및 복구 능력이 뛰어난 파일 시스템을 말하며, 비정상적인 종료로 인해 수행되는 파일 시스템 복구에 드는 시간이 적게 듭니다.
2.1 리눅스 지원 파일 시스템 종류
리눅스에서 사용하는 표준 파일시스템은 ext, ext2 순서로 발전해 왔으며, 커널 2.4.x부터 ReiserFS, XFS, JFS, ext3 와 같은 새로운 저널링(Journaling) 파일시스템이 추가 되었습니다.
1) JFS
IBM의 독자적인 저널링 파일 시스템으로, 자사의 하이 엔드 서버와 OS/2 에서 사용할 목적으로 만든 저널링 파일시스템으로 GPL로 공개하여 현재 리눅스용으로 개발 중입니다.
2) XFS
XFS는 SGI가 자사의 IRIX 서버를 위해 개발한 저널링 파일 시스템으로 상당히 휼륭한 파일시스템으로 알려져 있습니다. 얼마 전 리눅스용 XFS 1.2 버전을 발표했으며, 개발 초기 단계에서부터 GPL 라이선스를 채택하여 현재 리눅스용으로 개발되고 있습니다.
3) ReiserFS
독일의 한스 라이저가 개발한 저널링 파일 시스템으로 현재 리눅스에서 상당한 사용자 층을 확보하고 있으며, 여기서 소개된 파일시스템 중 유일하게 리눅스의 메인트리에 포함되어 있습니다. 한스 라이저가 세운 회사인 Namesys에서 발표한 벤치마크에 따르면 현재 리눅스에서 지원하는 저널링 파일 시스템 중에 가장 성능이 뛰어난 것으로 보입니다.
4) ext3
비정상적 시스템 셧다운 이후 점검이 필요하지 않고, 복구 시간에 빠릅니다. 시스템이 셧다운 되더라도 강력한 데이터 무결성을 보장합니다. ext3 저널링이 제공하는 하드 디스크 헤드 이동최적화를 통해 ext2 보다 높은 효율을 보장합니다. 다른 저널링 시스템으로 변환하기 쉬우며, 데이터가 빈번하게 변화하는 디렉터리에 적합합니다.
2.2 파일 시스템 생성과 mount
리눅스는 여러 가지 파일 시스템을 지원하므로 마운트(mount)를 이용하여 해당 파일 시스템을 리눅스 시스템의 특정 디렉터리에 연결하여 사용할 수 있습니다.
리눅스는 다양한 파일 시스템을 인식하므로 mount를 이용할 때 어떠한 파일 시스템 형태로 마운트할지 지정해야 합니다. 파일 시스템을 생성하는 명령어는 mkfs입니다. mkfs.ext3 명령어를 사용하여 /dev/hdb1 레드햇 리눅스 표준 파일 시스템인 ext3로 변환됩니다.
파일 시스템을 변환하였다면 fsck 명령어를 사용하여 파일 시스템 점검을 수행하시기를 권장합니다. ex2 파일 시스템을 ex3 저널링 파일 시스템으로 변환하는 방법은 기존의 파일 시스템을 언마운트 할 필요 없이 tune2fs 명령어로 바로 변환할 수 있습니다. ext2 파일 시스템을 ex3로 변형하였다면 반드시 /etc/fstab 에서 해당 장치의 파일 시스템 타입을 ext2에서 ex3로 수정해야 합니다. 하드디스크의 경우 매번 동일한 파일 시스템을 사용하므로 윈도우즈와 마찬가지로 자동으로 시스템을 부팅할 때 자동으로 연결합니다.
하드디스크를 마운트 하기 위한 정보는 /etc/fstab 파일을 참고합니다.
리눅스는 제한된 파일 시스템만을 사용하는 윈도우즈와 달리 매우 다양한 파일 시스템을 인식할 수 있습니다. 마운트명령으로 리눅스는 시스템 운영 중에도 다양한 파일 시스템을 수시로 연결하고 해체할 수 있습니다. 또한 마운트를 할 때 파일 시스템을 지정하여 연결하므로 다양한 파일시스템을 사용할 수 있는 것도 장점입니다. Mount 명령어를사용하기 위해서는 기본적으로 해당 매체의 파일 시스템 타입과 장치이름을 마운트 포인트와 함께 /etc/fstab 에 저장해둡니다.
#mount -t <파일시스템 타입> <장치명> <마운트 포인트>
3. 간단한 성능 평가
리눅스에서 제공하는 각 파일 시스템에 대한 R/W 성능 평가를 간단한 테스터를 통해 알아보았습니다. 실험 대상은 xt2 파일 읽기와 ext3 읽기 동작에 대한 처리 시간을 비교해 보았습니다. test.iso는 약 400M 정도의 파일입니다.
쓰기 동작에 대한 테스터 결과 ext2와 ext3는 쓰기 동작 시간이 비슷한 것을 알 수 있습니다.
다음으로 읽기 동작 테스터 결과입니다. ext2 파일 시스템이 ext3 파일 시스템에 비해 읽기에서 더 좋은 성능을 보여주는 것을 알 수 있습니다.
향후 실험에서는 jxf, xfs, reiserfs 파일 시스템에 대한 읽기와 쓰기 동작을 실험해 보고 파일 시스템의 안정성과 읽기, 쓰기 동작에 대한 타임 세이빙 결과를 만들어야 될것 같습니다. 이를 참고하여 우리가 구성하고자 하는 서버 시스템에는 어떤 파일 시스템이 좋을 것인지 확인하고 서버 시스템을 구성하는 문제가 남았습니다.