![]() Antonio Castro 알리는 글 저는 리눅스포커스의 모든 팀원을 진심으로 존경합니다. 자주 보이지 않는 곳에서도 기사의 질을 향상시키기 위해 노력하는 번역팀을 비롯한 모든 팀원들..정말 대단합니다. 이 글은 만약 Luis Colorado의 도움이 없었다면 완성하지 못했을 것입니다. Luis는 전자우편을 통하여 RAID시스템에 관한 해박한 지식을 많이 알려주셨습니다. Luis 고마워요. 차례: 들어가는 글 RAID를 위한 디스크 선택 SCSI시스템의 특성 RAID형 RAID0의 설치 |
요약:
RAID (결함허용;Redundant Array of Inexpensive Disks)은 여러개의 디스크드라이브을 하나의 드라이브처럼 작동하게 하는 시스템들로 구성되어 있다. 이를 이용하면 병렬로 여러개의 드라이브에 접근할 수 있으므로 접근효율을 향상시키며 불의의 사고로 인한 정보의 손실을 막을 수 있다.
매우 많은 하드웨어 해결책들이 시장에 나와있지만 대부분이 고가 이거나 특정 컨트롤러 카드를 사용하는 것이 일반적이다.
간단한 Z80칲과 보드 소프트웨어를 이용하여 여러개의 디스크를 RAID로 사용하기 위해 관리해주는 카드등을 이용하여 RAID를 실행하는 해결책들도 매우 많이 나와있다.
컨트롤러를 이용하여 RAID시스템을 구현하는 것은 비용이 비쌀 뿐만 아니라 사용자들이 특정 디스크 장치들을 구입하도록 하는 것이 일반적이다. 반면 리눅스에서는 이러한 특정 카드를 사용할 수도 있지만 무료로 자유롭게 이용할 수 있는 소프트웨어기반의 해결책을 제공해준다. 이 방법은 고가의 하드웨어에 대한 대안이 되면서 동일한 효능을 발휘한다.
|
리눅스에서 RAID시스템은 커널레벨에서 작동하기 때문에 서로 다른 방식의 디스크를 사용할 수 있다. 즉 IDE방식과 SCSI방식의 디스크를 함께 쓸 수도 있다. 심지어 서로 다른 크기를 가진 디스크도 이용할 수 있다. 그러나 이 경우에는 각 디스크에 특정크기를 가지도록 파티션을 나누어주는 작업이 필요하다. 가장 일반적인 해결방법은 동일한 크기를 가진 여러개의 디스크를 이용하는 것이다. 그러나 리눅스는 더욱 많은 유연성을 허용한다는 것을 말해둔다. 예를 들어보자. 디스크의 일부를 RAID로 사용하면서 다른 부분은 독립적인 파티션으로 사용할 수도 있다. 이것은 RAID시스템과 함께 사용되어지는 독립 파티션을 이용하기 위하여 RAID시스템의 접근속도를 저하시키므로 별로 좋은 생각은 아니다. 다른 말로 리눅스가 서로 다른 디스크장치들을 사용하는 것이 가능하다 할지라도 가능한한 동일한 용향과 동일한 특성을 가진 디스크를 사용하는 것이 언제나 좋다. 또한 SCSI기술은 버스로 연결되는 다양한 장치들을 동시에 이용할 수 있도록 해주기 때문에 중요한 고려사항이 된다.
반대로 말하자면 동일한 IDE컨트롤러 카드에 여러개의 디스크 장치를 사용한다는 것은 여러개의 장치를 동시에 이용하는 것을 의미하는 것이 아니다. 그러나 IDE방식의 장치에 비하여 SCSI장치는 여전히 매우 고가이다. 리눅스용 소프트웨어 솔루션은 특정 카드에 의존하는 방식에 비해 동일한 효율을 가지며 물론 디스크장치의 관점에서 보면 더욱 저렴하며 더욱 유연성을 가능하게 해준다.
SCSI버스에서 다른 장치에서 데이터를 읽으면서 다른데이터를 다른장치에 버스로 보낼 수도 있다. 그러나 IDE인터페이스에서 디스크가 먼저 접근되며 다른 장치는 그 이후에 접근하게 된다.
RAID를 구성하기위하여 가장 빠른 디스크 장치들을 사용하는 것은 대부분 옳바르지 않은 선택이다. 그러한 방법은 매우 비용이 비싸다. 디스크 속도가 빨라지기 위해서는 디스크 헤더가 적절한 섹터위치에 빨리 효율적으로 위치하여야 한다. 섹터사이를 왔다갔다하는 동작은 하드디스크에서 대부분의 시간을 잡아먹는다. 그러나 MSDOS와는 달리 리눅스에서는 이러한 동작이 어느정도 최적화되어 있다. 요청된 순서대로 디스크의 섹터를 옮겨다니며 정보를 찾지 않기 때문이다. 그 대신 요청들을 기억하고 있다가 이를 가장 최적화된 방법으로 수행시켜주는 지능적인 엘리베이터같은 것이 필요하다. 메모리케시(cache)와 같이 디스크의 접근획수를 최소화함으로써 성능을 향상시켜주는 전략들도 있다. 디스크드라이브에서 회전속도는 거의 별반 차이가 없지만 전송율에 중대한 영향력을 미치는 밀도나 헤드의 숫자는 차이가 많다. 이러한 파라메터들을 고려해서 선택하여야 한다. 요약컨데 우리는 만약 너무 비싸지만 않다면 비슷한 특성을 가지고 있는 SCSI장비를 사용하기를 원한다. RAID시스템의 속도율은 각각의 장치의 속도보다 동시에 사용이 가능한지 여부에 많이 좌우되기 때문이다.
또한 리눅스시스템은 반드시 RAID디스크장치가 아닌 디스크에서 시작해야 한다는 것을 명심하자. 이런 이유로 보통 루트 디렉토리가 작은 크기인 것이 상대적으로 좋다.
하드디스크를 구입하고자 할 경우 여러가지 사항을 꼼꼼히 따져봐야 한다. 우리가 알아야할 주요한 특징을 조금만 이야기하도록 하겠다.
이름 | 비트 수 | 장치 수 | 전송속도 (MB/s) | 연결 | 최대케이블 길이 |
---|---|---|---|---|---|
SCSI-1 | 8 | 7 | 5 | 50 pines LowDens | 6 mts |
SCSI-2 (alias) Fast scsi, o Narrow scsi | 8 | 7 | 10 | 50 pines HighDens | 3 mts |
SCSI-3 (alias) Ultra, o Fast20 | 8 | 7 | 20 | 50 pines HighDens | 3 mts |
Ultra Wide (alias) Fast scsi-3 | 16 | 15 | 40 | 68 pines HighDens | 1,5 mts |
Ultra2 | 16 | 15 | 80 | 68 pines HighDens | 12 mts |
RAID시스템은 여러개의 디스크 파티션을 이용하여 만들 수 있는데 결과적으로 단 하나의 디스크에 하나의 논리적파티션만 존재하게 된다. 이 파티션에 추가적인 파티션을 더할 수 없다. 이 논리적 장치를 우리는 메타디스크(metadisk)라고 부른다.
리눅스 커널에 옵션을 주어 컴파일을 하였다면 IDE장치는 /dev/hd...로 시작하는 파일장치를 가지며, SCSI장치는 /dev/sd...로 시작하며, 메타디스크는 /dev/md..식의 이런 네개의 장치들을 보여주고 있다.:
brw-rw---- 1 root disk 9, 0 may 28 1997 md0 brw-rw---- 1 root disk 9, 1 may 28 1997 md1 brw-rw---- 1 root disk 9, 2 may 28 1997 md2 brw-rw---- 1 root disk 9, 3 may 28 1997 md3
우리들의 최우선 목표는 가능한한 스웹접근시간을 작게 하고자 하는 것이다. 이러한 목적을 위하여 RAID는 작은 메타디스크를 사용하는 것이 제일 좋다. 또는 모든 물리적 디스크에 전통적인 방법으로 스웹을 각각 두는 방법도 있다. 만약 여러개의 물리적 디스크에 각각 여러개의 스웹파티션이 사용된다면 리눅스의 스웹하위시스템은 그들에게 할당되는 부하들을 관리한다. 따라서 이럴 경우에는 RAID가 불필요하게 된다.
|
RAID1에 기반을 둔 혼합형 RAID시스템의 다른 방식들이나 또는 다른 RAID형식들이 존재한다. 물리적 하드디스크에 디스크 압축을 가능하게 하는 시도도 진행중이다. 물론 이러한 시도에 대하여 과연 압축의 잇점이 얼마나 되는지 명확하지 않음에서 오는 논쟁들도 있다. 얼마되지 않아 이런 대부분의 많은 제안들이 많이 세상에 알려질 것이다. 이제 RAID0시스템을 중점으로 살펴보자. RAID0시스템은 디스크의 결함을 보호하거나 방지하는 결함허용기능이 부족하지만 가장 효율적이기 때문이다. 몇개의 디스크(3개 또는 4개)로 RAID를 구성하는 것은 매우 과도한 비용을 지출하게한다.(저장용량의 세배 내지 네배를 잃어버리는 것과 동일하다.) RAID시스템이 제공하는 결함허용은 디스크의 오류로부터 데이터를 안전하게 해주는 것이지 결코 사고에 의한 정보의 삭제등으로부터 데이터를 안전하게 보장해주는 것은 아니다. 그러므로 충분한 RAID을 가지고 있더라도 백업은 꼭 해야 하는 것이다. 반면에 만약 (5개이상의) 많은 디스크를 사용하면 디스크용량의 낭비는 점점 작아지고 결함허용기능을 저가로 가질 수 있게 된다. 16비트 SCSI카드는 최대 15개의 장치를 잘 수 있다. 이런 경우는 주로 RAID5형식을 주로 추천한다.
여러분이 고려하고 있는 특정 디스크를 사용하지 않는다면 RAID시스템은 언제나 정보의 특정한 블럭단위로 작동된다는 것을 고려해야 한다. 속도가 느린 하드디스크가 더욱 열심히 작동하여야 할 것이다. 그러나 어떤 경우 RAID환경설정을 통해 더 좋은 성능을 포기할 수도 있다. RAID시스템의 환경을 적절히 선택함으로써 향상되는 시스템의 성능은 정말 믿지못할 정도이다. RAID시스템에 사용하는 하드디스크의 숫자가 많으면 많을수록 성능이 향상된다는 것은 사실상 정설이다.
자, 이제 RAID0를 설치하는 방법을 살펴보자 여러분이 커널 2.0.xx버젼에서 다른 RAID형식으로 구축하고자 하면 특별한 패치를 먼저 구해서 패치해주어야 한다.
RAID0는 결함허용은 없다. 그러나 더무 많은 디스크 저장공간을 손해보지 않기 위하여 디스크를 많이 가지고 있도록 보통 권장한다. 디스크를 세개 가지고 있는데 하나를 손해본다는 것은 엄청난 낭비이다. 더군다나 아주 드문 일이기는 하지만 하드디스크가 고장이 나는 것으로 발생하는 경우를 제외하고는 정보손실의 모든 경우를 다 보호해줄 수 없다. 만약 10개의 하드디스크를 이용할 수 있다면 그다음 패리티 통제를 위하여 하나를 사용한다는 것은 많은 손실을 의미하지는 않는다. 만약 디스크를 10개정도 가지고 있을때 하나를 패리티 제어용으로 사용하는 것은 별로 낭비라 할 수 없다. RAID0에서 디스크의 고장오류가 발생했다는 것은 물리적 디스크안에 저장된 모든 정보를 잃어버리는 것을 의미하므로 반드시 백업을 자주 해주어야 한다.
제일 처음 해야 하는 것은 커널에 적절한 드라이버를 추가하는 것이다. 리눅스 2.0.xx에서 RAID를 위한 옵션은 다음과 같다.:
Multiple devices driver support (CONFIG_BLK_DEV_MD) [Y/n/?] Y Linear (append) mode (CONFIG_MD_LINEAR) [Y/m/n/?] Y RAID-0 (striping) mode (CONFIG_MD_STRIPED) [Y/m/n/?] Y
새로운 커널로 된 시스템으로 부팅을 하면 /proc파일은 새롭게 생성된 md0,md1,md2,md3로 된 네개의 장치(4개가 기본값이다.)에 대한 상태를 가지고 있는 mdstat 엔트리가 들어 있다. 이것들을 아직 초기화하지 않았으므로 모두 비활성화상태로 보여지며 아직 사용할 수 없다.
'mdutils'를 이용하여 세롭게 생성된 네개의 장치를 관리할 수 있다.-mdadd -mdrun -mdstop -mdop
다운로드 받을 수 있는곳:sweet-smoke.ufr-info-p7.ibp.fr /pub/Linux, 그러나 대부분의 배포판에는 이미 들어있다.
커널 2.1.62 상위버전에서는 RAID0,RAID4,RAID5를 지원하는 'RAIDtools'이란 패키지가 들어있다.
아래 예를 통하여 두개의 하드디스크(/dev/sdb1와 /dev/sdc1)를 이용하여 RAID0메타디스크로 만드는 방법을 살펴보겠다.
메타장치 | RAID모드 | 디스크파티션 1 | 디스크파티션 1 |
---|---|---|---|
/dev/md0 | linear | /dev/sdb1 | /dev/sdc1 |
파티션을 더 더할 수도 있다.
한번 메타디스크를 포맷한다. 어떤 환경에서는 바뀌지 않거나 들어있던 모든 정보들을 잃어버린다.
mdadd -a mdrun -a
이 때 md0는 이미 초기화된 것으로 보일 것이다. 포맷을 하자.:
mke2fs /dev/md0
그리고 마운트 시킨다.
mkdir /mount/md0 mount /dev/md0 /mount/md0
지금까지 모든 것이 잘되었다면 여러분은 시스템이 다음번부터 부팅될 때 자동으로 RAID0 메타디스크를 마운트시켜주는 부팅스크립트를 만들어보자. 자동으로 RAID0시스템을 마운트 시켜주기 위해서는 먼저 /etc/fstab파일에 엔트리를 더해야 하며 마운팅에 앞서 스크립트 파일에서 'mdadd -a'과 'mdrun -a'명령을 실행시켜야 한다. 데비안 배포판에는 이 명령어를 /etc/init.d/checkroot.sh 스크립트파일내에 두는 것이 좋다. 이 명령들은 루트 파일시스템의 읽기/쓰기모드를 다시 마운팅시키기 전, 즉 "mount -n -o remount,rw /"이 있는 줄 이전에 두면 된다.
아래는 필자가 현재 사용하고 있는 환경설정이다. 나는 6.3Gb의 IDE디스크와 4.2Gb, 2Gb의 SCSI디스크를 가지고 있다.
6.3Gb IDE방식의 하드디스크/ | /bigTemp + /incoming | swap | 2Gb(RAID) hda4 |
C: | D: | swap | 2Gb(RAID) sda4 |
swap | 2Gb(RAID) sdb2 |
#######</etc/fstab>################################################ # <file system> <mount point> <type> <options> <dump> <pass> /dev/hda1 / ext2 defaults 0 1 /dev/hda2 /mnt/hda2 ext2 defaults 0 2 /dev/md0 /mnt/md0 ext2 defaults 0 2 proc /proc proc defaults 0 2 /dev/hda3 none swap sw,pri=10 /dev/sdb1 none swap sw,pri=10 /dev/sda3 none swap sw,pri=10
#########</etc/mdtab>####################################### # <meta-device> <RAID-mode> <DskPart1> <DskPart1> <DskPart1> /dev/md0 RAID0,8k /dev/hda4 /dev/sda4 /dev/sdb2
루트 파티션은 hda1인 6Gb디스크에 있다. 인터넷에서 다운로드를 받거나 CD 이미지를 저장하는 등에 사용하기 위하여 큰 파티션을 사용한다. 이 파티션은 자주 사용하지 않기 때문에 별 부담이 되지 않는다. 4Gb디스크는 MSDOS파티션인데 리눅스에서 거의 사용하지 않기 때문에 RAID의 효율에 불리하다. 2Gb 디스크는 거의 대부분을 RAID시스템이 사용한다. 스웹공간으로 사용하기 위하여 각 디스크에 작은 공간이 사용되고 있다.
RAID시스템에서 모든 디스크(파티션)들은 거의 비슷한 크기를 가지도록 하는 것이 좋다. 만약 크기에서 큰 차이가 있다면 RAID의 성능을 저하시킬 것이다. 작은 차이는 별로 중요하지 않다. We use all the space available so that all the data from the disks that can be entangled is and the remaining data remains free.
여러개의 IDE디스크를 하나의 RAID시스템으로 마운트 시키는 것은 별로 효율적이지 않다. 그러나 다양한 SCSI장치와 IDE장치를 마운팅하는 것은 매우 잘 작동한다. IDE디스크는 동시에 이용하는 것이 불가능하지만 SCSI는 동시에 접근할 수 있다.
번역 : 이주호
본 웹페이지는 Miguel 햚gel Sep?veda님께서 관리합니다. © Antonio Castro 1998 LinuxFocus 1999 |