· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Software-RAID_HOWTO

The Software-RAID HOWTO

The Software-RAID HOWTO

Jakob Østergaard ( jakob_at_unthought.net) 번역: 한승수, netkevin_AT_hanmail.net

v0.90.8, 2002-08-05 최종번역일: 2004-12-31 미완성 - 계속 번역중입니다.
본 문서는 리눅스에서 Software RAID를 사용하는 방법에 대해 기술합니다. 이 문서는 Ingo Molnar 및 다른 여러 사람이 만든 0.90버전의 Software RAID를 대상으로 만들어 졌습니다. RAID는 커널 2.4 이상의 버전에서 기본으로 사용할 수 있으며 몇몇 리눅스 배포본에서는 2.2커널과 함께 제공하기도 했습니다. 0.90버전의 RAID는 커널 패치를 함으로써 2.2버전과 2.0버전의 커널에서도 사용할 수 있으며 이전 버전의 RAID보다 훨씬 더 안정적으로 작동합니다.

1. 서문

본 문서는 버전 2.4 이상의 커널에서 사용되는 RAID에 대해 설명합니다. 2.0버전과 2.2버전 커널에서 사용되던 "이전"버전의 RAID는 언급하지 않습니다.

이 문서의 최신 버전은 http://unthought.net/Software-RAID.HOWTO/에서 구할 수 있습니다. Jakob Østergaard 가 작성한 이 문서는 RAID의 개발자인 Ingo Molnar (mingo@chiara.csoma.elte.hu) 와 많은 사람들이 주고 받은 linux-raid 메일링 리스트 (linux-raid@vger.kernel.org) 의 내용을 바탕으로 작성되었습니다.

2.0버전이나 2.2버전의 커널에서 새 버전의 RAID를 사용하려면 이 곳 http://people.redhat.com/mingo/에서 커널 패치를 구해 적용하십시오. 기본 상태의 2.2버전 커널은 이 문서에서 설명하는 새 버전의 RAID를 지원하지 않으므로 꼭 커널 패치를 해야합니다. 2.0버전과 2.2버전에서 사용하는 이전 버전의 RAID는 버그가 있으며 몇 가지 중요한 RAID기능이 누락되어 있습니다.

RAID에 대해 잘 알고 계신다면 몇몇 부분은 읽을 필요가 없을 겁니다.

1.1 책임의 한계

본 문서의 내용으로 인해 일어날 수 있는 어떠한 일에 대해서도 저자 및 해당 소프트웨어 개발자는 책임을 지지 않습니다. 본 문서의 내용을 실행하기 전에 귀하의 데이터를 백업하십시오.

1.2 요구사항

이 문서는 여러분이 RAID 패치가 적용된 2.2버전과 2.0버전의 커널을 사용하며 0.90버전 이상의 RAID 유틸리티를 사용하고 있거나 2.4버전의 커널을 사용한다는 가정하에 작성된 것입니다. 사용되는 패치나 RAID 유틸리티는 이 곳 http://people.redhat.com/mingo/에서 구할 수 있습니다. 커널 패치와 상응하는 버전의 RAID 유틸리티를 사용하셔야 한다는 것도 중요합니다.

2.4버전 커널의 GNU/Linux(데비안) 배포판을 사용하신다면 RAID 사용에 큰 무리는 없을 것입니다.

2. RAID를 쓰는 이유

  • 데이터의 이중화(redundancy)를 위해서
  • 성능 향상을 위해서
  • 여러 개의 물리적인 디스크를 하나의 가상 디스크 처럼 묶어 사용하려고

2.1 RAID 구현이 가능한 Device 와 파일 시스템

Linux RAID는 대부분의 block devices에서 구현이 가능합니다. IDE나 SCSI장치 모두 사용 가능하며 둘의 혼용 또한 가능합니다. Network Block Device (NBD)를 통해 RAID를 구현한 경우도 있습니다.

Linux Software RAID 장치 그 자체가 이미 block device이기 때문에, RAID장치를 모아서 또 RAID를 구성하는 것도 가능합니다.. 이것이 RAID-0과 RAID-1의 장점을 합친 RAID-10 (RAID-0 of multiple RAID-1 devices)입니다. 또 RAID-5 위에 RAID-5 를 구현한 "matrix" RAID와 같은 희한한 RAID구성도 가능합니다.

RAID는 파일시스템과는 아무런 상관이 없습니다. 어떠한 파일 시스템(block device의 경우처럼)으로도 RAID를 구성할 수가 있습니다.

2.2 성능

RAID는 성능 향상을 목적으로 사용되는 경우가 많지만 RAID의 각 레벨별 특징을 확실히 이해하지 않고 사용하면 큰 효과를 얻지 못할 수도 있습니다.

RAID의 레벨의 설명에 각 레벨의 성능상 특징이 잘 나타나 있습니다.

2.3 용어의 정의

"RAID"는 "Linux Software RAID"를 뜻합니다. 이 문서는 Hardware RAID에 대해 언급하지 않습니다. 운영체제 커널속에서의 Software RAID 기능에 대해 언급하지도 않습니다.

RAID의 구성을 나타낼 때는 물리적 디스크의 갯수와 디스크의 크기를 명시하는 것이 알아보기 편합니다. N은 사용되는 디스크의 갯수를 나타내며(spare-disk는 제외) S는 별도의 설명이 없는 한 RAID구성에 사용되는 가장 작은 디스크의 크기를 나타내게 됩니다. P는 RAID array의 디스크 하나의 성능을 MB/s 단위로 표시한 것입니다. 이 때 RAID array 의 모든 디스크의 속도는 동일하다고 가정합니다.

"device"와 "disk"는 같은 의미로 사용되었습니다."device"라 함은 RAID를 구성하는 디스크의 파티션을 나타냅니다. 동일 디스크상의 파티션들만으로 구성된 RAID는 의미가 없으므로 "devices"와 "disks"는 다른 디스크상의 파티션으로 생각하시면 되겠습니다.

2.4 RAID의 종류

리눅스에서 사용할 수 있는 RAID의 종류에 대해 간략히 설명합니다. 대부분 RAID에 대한 기본적인 내용이지만 좀 더 추가한 내용도 있습니다.RAID에 대한 기반 지식이 있으시다면 이 부분은 읽지 않으셔도 무방합니다.

RAID에서는 다음 레벨들을 사용할 수 있습니다.

  • Linear mode
    • 2개 이상의 디스크를 하나로 만들어 사용하는 방법입니다. 첫번째 디스크의 공간이 모두 차게 되면 두번째 디스크로 이어서 데이터를 저장하는 것입니다. 구성 디스크의 크기가 모두 똑같을 필요는 없습니다.
    • 데이터를 이중화(redundancy)하는 기능은 없습니다. 그렇기 때문에 디스크 하나만 고장나도 데이터를 모두 잃을 수 있습니다. 운이 좋으면 문제가 발생하지 않은 디스크에서 데이터의 일부를 복구할 수도 있습니다.
    • 읽기/쓰기 성능이 향상되지는 않지만 여러 사용자가 우연하게도 다른 디스크를 사용하게 되면 성능상 이득을 볼 수도 있습니다..
  • RAID-0
    • 소위 "stripe"로 불리는 방식입니다. 모든 devices는 같은 크기이어야 합니다.(하지만 꼭 같지 않아도 사용할 수 있긴 합니다) 쓰기/읽기 동작은 각 디스크들로 분할되어 실행됩니다. 즉 쓰기 동작을 할 때, 0번 디스크에 4 kB, 1번 디스크에 4 kB, 2번 디스크에 4 kB, 그리고 다시 0번 디스크에 4 kB 기록하는 식으로 동작합니다. RAID를 구성하는 디스크 중 하나만 나머지 것들 보다 크다면 그 디스크의 과잉 부분에만 기록하게 되고 결과적으로 성능 저하를 가져옵니다.
    • linear방식처럼 RAID-0도 데이터의 이중화(redundancy)기능이 없습니다. linear방식과 달리 RAID-0은 구성하는 디스크 중 하나라도 고장이 나서 데이터를 잃게 되면 데이터를 하나도 복구할 수가 없습니다. RAID-0에서 디스크를 하나 제거하게 되면 모든 데이터에 구멍이 생기는 셈이므로 e2fsck와 같은 복구 프로그램으로도 복구를 할 수 없게 됩니다.
    • 읽기/쓰기 동작이 각각의 디스크에서 병렬적으로 실행되므로 성능 향상이 있습니다. RAID-0을 사용하는 주된 이유가 바로 이 성능 향상 때문입니다. 각 디스크의 대역폭이 보장되면 N*P MB/sec 에 가까운 전송율을 기대할 수 있습니다..
  • RAID-1
    • RAID-1은 데이터 이중화(redundancy)기능이 있습니다. 두 개 이상의 디스크와 0개 이상의 예비 디스크가 필요합니다. 이 방식은 한 디스크의 내용을 그대로 다른 디스크(들)에 복제(mirroring)합니다. 물론 각 디스크들의 크기는 동일해야 하며, 만일 서로 다른 크기의 디스크들이 사용된다면 크기가 작은 쪽의 용량을 따르게 됩니다.
    • RAID-1를 구성하는 디스크 중 하나만 살아남아도(N-1) 데이터는 고스란히 보전됩니다. 예비 디스크가 있다면 시스템이 장애 상태에서 복구된 후 디스크의 오류를 감지하는 즉시 예비 디스크로의 데이터 이전이 시행됩니다.
    • 데이터 복제를 해야되기 때문에 쓰기(기록) 성능은 대체로 떨어집니다.(RAID가 아닌 일반적인 디스크사용과 대비했을 때) 규모가 큰 RAID-1의 경우 PCI 버스 대역폭이 디스크가 데이터 복제로 인해 심각하게 줄어들게 되어 문제가 될 수 있습니다. 사실 이 점 때문에 소프트웨어 방식의 RAID가 아닌 하드웨어 방식의 RAID를 선택하게 되는 것입니다. 하드웨어 RAID에서는 RAID 콘트롤러가 데이터 복제를 전담하게 되므로 PCI 버스의 대역폭을 차지하지 않습니다. RAID는 읽으려는 데이터에 헤드가 가장 가까이 위치한 디스크에게 읽기 명령을 내리는 read-balancing 알고리즘을 이용해 동작합니다. 그 때문에 RAID-0은 여러 사용자가 동시에 읽기 작업을 하는 경우나 탐색을 많이 하는 경우에 성능이 좋습니다. 탐색 수행은 상대적으로 노력이 많이 들어가므로(6 ms 의 탐색시간은 20 MB/sec의 속도로 123 kB 를 읽는 동작과 맞먹습니다.), 디스크의 탐색 시간(seek time)이 빠른 것을 선택하는 것이 실제적인 성능 향상을 가져옵니다.
  • RAID-4
    • RAID-4는 많이 사용되지는 않습니다. 이 모드는 세 개 이상의 디스크에서만 구현할 수 있습니다. 이 모드는 미러링을 하는 대신 패리티 정보를 하나의 디스크에 기록하고 데이터는 RAID-0처럼 다른 디스크에 기록합니다. 디스크 하나는 패리티 기록에만 쓰이기 때문에 전체 크기는 (N-1)*S 가 되겠습니다. 여기서 S는 구성 디스크중 가장 작은 것의 크기입니다. RAID-1의 경우처럼 각 디스크의 크기는 동일해야 하며 같지 않은 크기라면 위의 공식에 따라 가장 작은 크기의 디스크가 전체 RAID의 크기를 결정하게 됩니다.
    • 한 개의 디스크 장애가 발생하면 패리티 정보를 이용해서 데이터를 복구합니다. 하지만 디스크 두 개에 장애가 발생하게 되면 데이터는 소실됩니다.
    • 이 방식이 잘 사용되지 않는 이유는 패리티 정보가 한 디스크에만 저장되기 때문입니다. 이 패리티 정보는 데이터가 기록될 때마다 갱신되어야 하기 때문에 패리티를 저장하는 디스크가 다른 디스크보다 월등히 빠르지 않다면 병목현상이 발생하기 쉽습니다. 하지만 다수의 느린 디스크와 아주 빠른 디스크 하나를 갖고 계신다면 사용해 볼만한 방식이 되겠습니다.
  • RAID-5
    • 이 방식이야 말로 데이터의 이중화를 하면서 여러개의 디스크를 하나로 묶는 가장 훌륭한 방법입니다. RAID-5는 3개 이상의 디스크와 0개 이상의 예비 디스크로 구성됩니다. RAID-5의 크기는 RAID-4처럼 (N-1)*S 이 됩니다. 둘의 중요한 차이는 패리티 정보가 여러디스크에 골고루 분산되어 저장된다는 점입니다. 그래서 RAID-4에서 처럼 패리티 정보가 몰리는 디스크에서 일어나는 병목현상은 없습니다.
    • 한 디스크에 장애가 발생해도 패리티 정보가 기록되기 때문에 모든 데이터를 살릴 수가 있습니다. 예비 디스크가 있다면 디스크 장애 발생 즉시 RAID 복구가 실시됩니다. 하지만 동시에 두 개의 디스크에 장애가 발생하면 모든 데이터는 소실됩니다. RAID-5는 하나의 디스크 장애만 처리할 수 있으며 2개 이상의 디스크 장애는 복구할 수 없습니다.
    • 읽기/쓰기 성능이 모두 향상됩니다. 하지만 그 향상 정도는 예측이 쉽지 않습니다. 읽기 성능은 RAID-0과 비슷하며 쓰기(기록) 성능은 다소 떨어지거나(정확한 패리티 정보 계산을 위해 기록에 앞서 read-in을 해야 되기 때문) RAID-1의 쓰기(기록)와 비슷한 정도입니다. 쓰기(기록) 성능은 시스템의 메모리양과 RAID의 사용 패턴에 따라 차이가 납니다. RAID-5의 구성 디스크 갯수가 늘어날 수록 쓰기(기록)에 더욱 더 많은 시간과 부하가 걸립니다.

예비 디스크

예비 디스크란 RAID 가 장애 상태에 빠지면 복구에 사용되는 디스크를 말합니다. 디스크 장애가 감지되면 그 디스크는 bad 로 표시되고 첫번째 예비 디스크로 복구가 즉시 시작됩니다.

그러므로 예비 디스크는 특히 RAID-5 시스템을 더 안전하게 합니다. 결함이 있는 디스크로 RAID를 운영하다 발생할 수 있는 문제를 예비 디스크를 사용함으로써 막을 수 있습니다.

그래도 안심할 수는 없습니다. 아무리 RAID의 디스크가 안전하다고 해도 SCSI 콘트롤러나 IDE 칩셋의 에러 등에는 무방비일 수 밖에 없습니다.

또한 복구는 데이터 이중화에 필요한 정보를 장애가 발생하지 않은 디스크에서 가져오기 때문에 여러 디스크에서 배드 블럭이 점점 생겨나면 불완전한 데이터를 이용해 복구를 하는 셈이 되므로 멀쩡한 디스크의 데이터도 손상이 되고 결국은 전체 RAID가 망가지는 결과가 생깁니다. 자주 백업을 한다면 이 같은 상황이 발생할 가능성은 현저히 줄어들 것입니다. RAID도 백업은 해야한다는 것을 잊지 마십시오.

2.5 RAID를 스왑으로

성능을 높이려고 스왑 영역을 RAID 장비에 잡을 필요는 없습니다. fstab파일에서 각 스왑영역에 동일한 우선순위만 부여하면 커널이 스스로 분산된 스왑영역을 사용할 수 있습니다.

예:

/dev/sda2       swap           swap    defaults,pri=1   0 0
/dev/sdb2       swap           swap    defaults,pri=1   0 0
/dev/sdc2       swap           swap    defaults,pri=1   0 0
/dev/sdd2       swap           swap    defaults,pri=1   0 0
/dev/sde2       swap           swap    defaults,pri=1   0 0
/dev/sdf2       swap           swap    defaults,pri=1   0 0
/dev/sdg2       swap           swap    defaults,pri=1   0 0
이 fstab 파일은 7개의 SCSI 디스크에 있는 스왑영역을 병렬적으로 사용하는 예를 나타내고 있습니다. 이는 오래전부터 커널이 제공하는 기능입니다.

RAID를 스왑 목적으로 쓰는 다른 이유는 고가용성이기 때문입니다. 시스템 부트 영역이 RAID-1에 있으면 복구가 가능하므로 문제가 없지만 스왑 영역이 결함을 내포하는 RAID에 있다면 이것은 문제가 됩니다. 스왑 영역을 RAID-1에 잡으면 이 문제를 해결할 수가 있는 것입니다.

RAID 장치에 있는 스왑 영역의 안정성에 대해서는 의견이 분분하며 이는 스왑은 커널과 관련된 내용이 많기 때문입니다. 제 생각에는 RAID에 스왑을 사용하는 것은 무척 안정적인 것 같습니다.

스왑 파티션으로 RAID를 만들 수도 있고(RAID의 각 디스크 파티션 타입을 swap으로 하고 RAID를 생성할 수도 있다는 뜻:역주) RAID를 스왑 파티션으로 쓸 수도 있습니다. 앞에서도 말씀드렸다시피 RAID는 블록 장치(block device)일 뿐입니다.

3. 하드웨어적인 문제

이 단락에서는 software RAID 운영시 주의해야 할 사항을 설명합니다.

좀 더 나은 성능을 얻으려면 디스크를 연결하는 버스가 충분한 대역폭을 가지고 있어야 합니다. 디스크당 전송율이 20 MB/s 이고 버스의 대역폭이 160 MB/s 라고 할 때 하나의 Ultra Wide 스카시 콘트롤러에 14개의 디스크를 연결하는 일은 없어야 하겠습니다. 그리고 하나의 IDE 콘트롤러당 하나의 디스크만 연결하셔야 합니다. 마스터/슬레이브 디스크를 모두 RAID로 연결해 사용하는 것은 성능이 엄청나게 저하될 우려가 있습니다. IDE는 버스당 두 개이상의 디스크가 액세스 될 때에는 엄청나게 느려집니다. 하지만 요즘의 신형 메인보드들은 IDE버스가 두 개씩 있는 것도 있으므로 추가 비용없이 좀 더 나은 성능의 RAID를 운영할 수 있습니다. 물론 IDE 콘트롤러 가격도 저렴하므로 여러개의 IDE 콘트롤러를 달아서 6-8개 정도의 디스크로 된 RAID를 운영하는 방법도 나쁘지는 않을 것입니다.

3.1 IDE 설정

IDE 디스크로 구성된 RAID를 운영하는 방법도 있으며 성능도 좋습니다. 일반적으로 IDE 디스크와 콘트롤러의 가격이 저렴하므로 IDE RAID를 고려해 보는 것도 괜찮을 것입니다.

  • Physical stability: IDE 디스크는 일반적으로 스카시 디스크에 비해 성능과 질이 떨어지는 것으로 알려져 있습니다. 스카시 디스크는 보증기간이 3-5년 인데 비해 IDE 디스크는 대체로 1년 정도의 보증기간을 내걸고 있습니다. 꼭 그렇다는 얘기는 아니지만 어떤 제조회사의 제품은 고장이 잦기도 합니다. 결론은 모든 디스크는 고장 가능성을 내포하므로 그에 대한 대비를 해야한다는 것입니다.
  • 데이터 무결성: 예전의 IDE 방식은 IDE 버스로 보내지는 데이터와 실제로 디스크에 기록되는 내용이 동일한지 알 수 있는 방법이 없었습니다. 이는 패리티나 체크섬 등의 기술이 없었기 때문입니다. 하지만 요즘의 Ultra-DMA는 IDE 디스크도 체크섬 계산을 하기때문에 데이터가 변조될 가능성은 거의 없습니다. 참고로 The PCI 버스 자체는 패리티나 체크섬 정보를 쓰지 않습니다.
  • 성능:IDE의 성능에 대해서 조금만 얘기해 보도록 하겠습니다.
    • 이 글이 작성된 시점에서 IDE디스크는 스카시 디스크처럼 10,000 또는 15,000 rpm의 속도를 가지진 않지만 그래도 빠른 편에 속합니다.
    • IDE는 스카시에 비해 CPU 소모율이 더 큽니다.(별 상관 없을 수도 있습니다)
    • 하나의 IDE버스당 디스크 하나만 사용하십시오. slave 디스크까지 달아서 사용하면 성능이 엄청나게 저하됩니다.
  • 장애 처리: IDE 에서는 연결된 디스크가 고장나도 큰 지장은 없습니다. RAID 가 고장난 디스크를 인지하고 RAID 레벨 1 이상으로 운영하고 있다면 자동으로 대처할 것입니다.

하나의 IDE 버스당 하나의 디스크만 연결해서 사용해야 한다는 것은 매우 중요한 점입니다. 그렇게 하지 않으면 성능 저하뿐만 아니라 만약 디스크가 고장나면 IDE 버스 전체로 오류가 퍼지게 되며 그 버스에 연결된 모든 디스크에 장애가 발생하게 됩니다. 장애 처리가 가능한 RAID (RAID 레벨 1,4,5)는 한 개의 디스크 장애는 처리할 수 있지만, 두 개 이상의 디스크 장애는 처리할 수가 없기 때문에 위험한 것입니다. IDE 버스 하나당 하나의 디스크, 이것은 정말 중요한 것입니다.

여러 개의 IDE 콘트롤러 구매에 돈이 많이 들어도 IDE 디스크의 가격이 스카시에 비해 훨씬 저렴하므로 IDE 디스크를 많이 가지고 있는 경우라면 정말 괜찮은 방법이 될 것입니다.

규모가 커지게 되면 케이블링도 문제를 야기할 수 있으므로 IDE 케이블의 길이가 너무 길어지지 않게 주의해야 합니다.

게다가 최근의 어떤 디스크는 하루당 사용 시간 제한이 있는 것도 있습니다. 그런 디스크들은 데스크탑 용이기 때문에 무정지로 운영할 시스템에 사용하는 것은 심각한 결과를 초래할 수도 있을 겁니다.

3.2 핫스왑 기능

디스크의 핫스왑은 주의해야할 점들이 많습니다.

IDE 디스크의 핫스왑

IDE 디스크는 핫스왑이 안됩니다. 물론, IDE 드라이버가 모듈로 컴파일되어 있다면 디스크를 교체하고 모듈을 다시 올리는 방법이 있기도 할겁니다.(2.2 버전의 커널에서만 되던 기능입니다) 하지만 IDE 콘트롤러나 디스크를 태우게 되는 불상사를 겪을 수도 있습니다.

문제는(하드웨어적으로 손상을 입히는 전기적인 문제는 제외) 디스크가 교체된 후에 IDE 버스는 다시 읽혀져야(re-scanning) 된다는 것입니다. 새 버전의 커널이 이 기능을 지원하긴 하지만(hdparm 유틸리티를 이용), 파티션 정보를 다시 읽어들이는 것까지는 되지 않습니다. 교체된 디스크가 교체전의 디스크와 100% 동일(파티션 구조등 모든 것)하다면 가능할 수도 있겠지만 여전히 위험을 감수해야 할 것입니다.

SCSI 디스크의 핫스왑

보통의 SCSI 하드웨어도 핫스왑이 안되긴 마찬가지이지만 될 수도 있긴 합니다. 버스 리스캐닝을 지원하면 핫스왑이 되는 겁니다. 하지만 전원이 들어와 있는 상태에서 장치를 탈/부착하는 행위는 없어야 하겠습니다. 이 역시 성공할 수도 있지만 장비가 탈 수도 있다는 것을 명심하십시오.

SCSI 에서는 디스크가 고장나도 이를 대처할 수 있어야 합니다만 모든 SCSI 콘트롤러가 그럴 수 있는 아닙니다. 디스크가 고장나서 SCSI 콘트롤러도 죽고 시스템까지 같이 죽는 일이 생긴다면 핫스왑은 도움이 되지 못합니다.

SCA(Single Connection Attach)의 핫스왑

SCA는 핫스왑이 됩니다. 쉽지는 않지만 안전한 방법입니다.

다음 예제처럼 RAID 디스크를 교체하십시오:

  • 디스크 상태가 그나마 양호하다면 장애가 일어난 디스크에서 파티션 테이블 정보를 백업받습니다:
    sfdisk -d /dev/sdb > partitions.sdb
    
  • 다음 명령어로 RAID 에서 디스크를 제거합니다(RAID 프로그램 상에서):
    raidhotremove /dev/md0 /dev/sdb1
    
  • 다음의 파일에서 교체할 디스크의 Host, Channel, ID, Lun 정보를 알아둡니다:
    /proc/scsi/scsi
    
  • SCSI 버스에서 디스크를 제거합니다(파일에서 제거한다는 뜻):
    echo "scsi remove-single-device 0 0 2 0" > /proc/scsi/scsi
    
  • 다음 파일을 통하여 제대로 디스크가 제거되었는가를 확인합니다:
    /proc/scsi/scsi
    
  • 디스크를 교체합니다(실제적인 디스크 교체를 의미, 물리적으로 교체):
  • SCSI 버스에 디스크를 인식시킵니다:
    echo "scsi add-single-device 0 0 2 0" > /proc/scsi/scsi
    
    (이 명령은 디스크의 회전을 시작하게 합니다)
  • 백업받아둔 파티션 테이블 정보로 새 디스크를 파티셔닝합니다:
    sfdisk /dev/sdb < partitions.sdb
    
  • RAID 에 새 디스크를 추가합니다:
    raidhotadd /dev/md0 /dev/sdb2
    

위의 "scsi remove-single-device" 명령에 인수로 전달되는 숫자들은 각각: Host, Channel, Id, Lun 을 의미합니다. 이 값들은 "/proc/scsi/scsi" 파일에서 확인할 수 있습니다.

위의 예제는 IBM 사의 SCA방식 디스크와 Adaptec 사의 SCSI 콘트롤러에서 수행/테스트된 것입니다. 이 예제대로 실행중 문제가 발생하거나 개선점을 찾으셨다면 linux-raid 메일링 리스트를 통해 알려주시기 바랍니다.

4. RAID 설정

4.1 공통 설정 사항

준비물은 이렇습니다.

  • 2.4 버전의 이상의 커널, 또는 패치가 된 2.0 , 2.2 버전의 커널.
  • RAID 유틸리티.
  • 인내심, 피자, 여러분이 선호하는 카페인 함유 음료.

이제부터 나오는 내용은 대부분의 배포판에서 모두 표준인 것들입니다.

여러분 시스템의 커널이 RAID를 지원하고 있다면 /proc/mdstat 이라는 파일이 있을 겁니다. 이 파일은 RAID를 사용하는 데 있어 여러분의 친구와도 같은 존재입니다. cat /proc/mdstat 를 하셔서 내용을 한 번 보시기 바랍니다. 그 파일을 통해 여러분의 RAID 동작 여부와 올바르게 설정이 되었는가의 여부등을 알 수 있습니다.

RAID 에 포함시킬 파티션을 생성하십시오.

이제 각 RAID 레벨 별 설정을 해 보겠습니다.

4.2 Linear mode

서로 크기가 다른(같아도 됩니다) 파티션을 합치는 경우입니다.

/etc/raidtab 파일을 통해 설정합니다. 두 디스크를 linear 모드로 설정하는 파일의 내용입니다.

raiddev /dev/md0
        raid-level      linear
        nr-raid-disks   2
        chunk-size      32
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
한 디스크에 장애가 생기면 그 RAID 전체도 같이 죽습니다. 그래서 예비 디스크 설정은 의미가 없기 때문에 생략되었습니다.

병렬적으로 사용하는 것도 아닌데 왜 chunk-size 를 표기하는지 궁굼하실 겁니다. 맞습니다. 사족과 같은 것이기 때문에 신경쓰실 필요없습니다.

이제 RAID를 생성합니다. 다음 명령을 실행합니다.

  mkraid /dev/md0

이 명령은 RAID를 초기화하고 persistent superblock을 기록하며 RAID를 기동하게 됩니다.

/proc/mdstat 파일의 내용을 확인해 보십시오. 가동중이라는 알 수 있을 겁니다.

이제 보통의 디스크처럼 파일시스템을 만들고, 마운트하고 fstab 파일에 추가하는 작업을 해주시면 됩니다.

4.3 RAID-0

비슷한 크기의 디스크가 두 개 이상 있다고 할 때 두 용량을 합치면서 병렬사용을 통해 성능도 향상시키고자 하는 경우가 되겠습니다.

역시 /etc/raidtab 파일을 수정합니다.

raiddev /dev/md0
        raid-level      0
        nr-raid-disks   2
        persistent-superblock 1
        chunk-size     4
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
Linear 모드와 마찬가지로 RAID-0은 데이터 이중화 기능이 없으므로 예비 디스크는 사용할 수 없습니다.

다음을 실행합니다.

  mkraid /dev/md0
superblock을 초기화하고 RAID를 기동합니다. /proc/mdstat 파일을 통해 작동여부를 확인할 수 있습니다.

/dev/md0 을 이제 포맷하고 마운트해서 사용하면 됩니다.

4.4 RAID-1

비슷한 크기의 디스크가 두 개 있고 한 디스크가 다른 디스크를 미러링하게 하는 경우입니다. 여분의 디스크를 예비 디스크로 지정해 놓으면 RAID에 장애가 생기면 자동으로 예비 디스크가 그 디스크를 교체해서 미러링을 하게 될 겁니다.

RAID-1 의 /etc/raidtab 파일은 이렇습니다.:

raiddev /dev/md0
        raid-level      1
        nr-raid-disks   2
        nr-spare-disks  0
        chunk-size     4
        persistent-superblock 1
        device          /dev/sdb6
        raid-disk       0
        device          /dev/sdc5
        raid-disk       1
예비 디스크 추가는 뒷부분에 이렇게 추가해 주시면 됩니다.
        device          /dev/sdd5
        spare-disk      0
nr-spare-disks 부분을 정확히 설정해 주시는 것을 잊지 마십시오.

이제 RAID를 기동할 준비가 되었습니다. 두 디스크의 내용을 같게 만들어줘야 합니다.

다음 명령을 실행하십시오.

  mkraid /dev/md0
미러링의 초기화를 시작합니다.

/proc/mdstat 파일을 확인하십시오. raid 장치의 동작상태와 데이터 사본(mirror) 생성의 여부 등을 알려줍니다.

재구성 과정은 I/O 대역폭의 사용되지 않는 부분만을 사용하므로 디스크의 작동 LED 가 깜빡여도 시스템의 반응 속도에 큰 영향은 없습니다.

여러분은 재구성 과정과는 상관없이 RAID 장치를 사용할 수 있습니다.

재구성이 진행중일때 포맷을 해보십시오. 잘 될 겁니다. 마운트도 물론 할 수 있습니다. 하지만 재구성을 하는 도중에 디스크에 장애가 발생하면 어쩔 도리가 없습니다.

4.5 RAID-4

주의: - 필자도 RAID-4의 셋업은 해보지 않았습니다. 이 부분만큼은 제가 경험하지 않은 부분입니다. RAID-4를 사용하고 계시다면 다음 이메일 주소로 여러분의 경험을 알려주시기 바랍니다. author

비슷한 크기의 세 개 이상의 디스크가 있고 그 중 하나가 나머지보다 속도가 월등히 빠를때 디스크를 하나로 합쳐서 쓰면서 데이터의 이중화도 꾀하는 경우가 되겠습니다.

/etc/raidtab 파일의 내용:

raiddev /dev/md0
        raid-level      4
        nr-raid-disks   4
        nr-spare-disks  0
        persistent-superblock 1
        chunk-size      32
        device          /dev/sdb1
        raid-disk       0
        device          /dev/sdc1
        raid-disk       1
        device          /dev/sdd1
        raid-disk       2
        device          /dev/sde1
        raid-disk       3
예비 디스크가 있으면 같은 방법으로 추가해 주시면 됩니다.
        device         /dev/sdf1
        spare-disk     0
RAID 초기화를 합니다.
   mkraid /dev/md0
포맷을 하시기 전에 mke2fs 명령의 옵션에 관한 부분을 꼭 읽어보십시오.

4.6 RAID-5

비슷한 크기의 디스크가 세 개 이상있고 디스크들을 하나로 합쳐 사용하면서 데이터의 이중화를 하려는 경우입니다. 예비 디스크는 평상시엔 사용되지 않다가 다른 디스크에 장애가 발생하면 사용됩니다.

N 개의 디스크가 있고 그 중 가장 작은 디스크의 크기가 S 라고 하면, 전체 RAID의 크기는 (N-1)*S 가 됩니다. 원래 디스크의 합보다 줄어드는 공간은 데이터 이중화를 위한 패리티 정보가 저장되는 데 사용됩니다. 이 덕택에 하나의 디스크에 장애가 발생하더라도 데이터는 안전합니다. 하지만 두 개 이상의 디스크에 장애가 발생하면 데이터가 손실됩니다.

/etc/raidtab 파일의 내용입니다:

raiddev /dev/md0
        raid-level      5
        nr-raid-disks   7
        nr-spare-disks  0
        persistent-superblock 1
        parity-algorithm        left-symmetric
        chunk-size      32
        device          /dev/sda3
        raid-disk       0
        device          /dev/sdb1
        raid-disk       1
        device          /dev/sdc1
        raid-disk       2
        device          /dev/sdd1
        raid-disk       3
        device          /dev/sde1
        raid-disk       4
        device          /dev/sdf1
        raid-disk       5
        device          /dev/sdg1
        raid-disk       6
예비 디스크가 있으면 역시 같은 방법으로 추가해 주시면 됩니다.
        device         /dev/sdh1
        spare-disk     0
대체로 chunk size 는 32 kB 가 적당합니다. 위의 예제는 7 개의 6 GB 디스크로 구성되었으며 총 36 GB 의 저장공간을 가지게 됩니다.(공식을 사용, 계산하면 (n-1)*s = (7-1)*6 = 36) 이는 4 kB 블록사이즈의 ext2 파일시스템을 사용합니다. 더 큰 파일 시스템을 사용하거나 매우 큰 파일을 저장하시려면 chunk-size 와 filesystem block-size 의 값을 더 늘려주시면 됩니다.

이제 다음을 실행하십시오.

  mkraid /dev/md0
디스크들이 재구성을 하느라고 정신없이 작동할 겁니다. /proc/mdstat 파일을 통해 과정을 지켜보십시오.

재구성 과정이 완료되기 전까지는 아직 끝난 것이 아닙니다. 하지만 재구성이 진행되는 중에도 모든 작업을 할 수 있습니다.(디스크 장애가 발생하는 경우는 제외)

포맷을 하시기 전에 mke2fs 명령의 옵션에 관한 부분을 꼭 읽어보십시오.

이제 여러분은 언제든지 다음 명령어로 RAID 장치를 정지/가동할 수 있습니다.

  raidstop /dev/md0
또는
  raidstart /dev/md0
뒤에 설명드릴 autodetection 기능을 사용하면 init- 파일에 이를 추가하실 필요가 없습니다.

4.7 Persistent Superblock

RAID 관련 프로그램이 /etc/raidtab 파일을 읽어들여서 RAID를 초기화합니다. 하지만 이는 /etc/raidtab 파일이 있는 파티션이 마운트되어 있는 상황하에서만 가능한 일입니다. 이 문제 때문에 RAID 장치로 부트하는 일이 복잡해집니다.

또한 RAID 장치에 있는 파일시스템을 마운트할 때에도 /etc/fstab 파일을 통해하는 것이 아니라 init 스크립트를 이용해야 합니다.

persistent superblock 이 이 문제를 해결합니다. /etc/raidtab 파일에서 persistent-superblock 옵션으로 설정되어있으면 file, RAID의 첫번째 디스크의 시작부분에 특별한 superblock 을 기록해 두게됩니다. 이를 통해 커널이 디스크로부터 바로 RAID의 설정 정보를 읽어들이게 되는 것입니다.

그래도 /etc/raidtab 파일은 나중에 필요할 지도 모르는 재구성을 위해 계속 유지해야합니다.

시스템이 부트되면서 RAID를 자동으로 인식하게 하려면 persistent superblock 옵션을 켜두어야 합니다. 더 자세한 설명은 Autodetection 부분에서 합니다.

4.8 Chunk size

chunk-size 는 중요합니다. 디스크에 기록하는 작업은 완벽한 병렬로 할 수 있는 게 아닙니다. 두 디스크가 있고 한 바이트를 쓰고자 한다면 각 디스크에 4비트씩 기록될 것이며 한 비트씩 0번 디스크와 1번 디스크에 번갈아가며 기록될 것입니다. 이는 하드웨어에서 제어하는 것이 아니라 우리가 지정해 주는 chunk-size, 한 장치에 기록되는 최소 데이터량을 정해줌으로써 가능해지는 것입니다. RAID-0 시스템이라면 chunk-size가 4 kB 일때 16 kB 크기의 데이터는 4 kB 로 네 등분되어 첫번째와 세번째 4 kB 가 0번 디스크에, 두번째와 네번째 4 kB 가 1번 디스크에 기록되게 됩니다. 그러므로 대용량의 쓰기 작업을 한다면 chunk-size 를 크게 함으로써 오버헤드를 줄일 수 있습니다.

chunk-size 는 모든 RAID 레벨(linear 모드 포함)에서 명시되어야 합니다. 하지만 linear 모드에서는 chunk-size 가 아무런 영향을 끼치지 않습니다.

block-size 와 chunk-size 를 잘 조절하면 최적의 성능을 얻을 수 있습니다.

/etc/raidtab 파일의 chunk-size 옵션은 킬로바이트 단위입니다. 즉 4 는 4 kB 를 뜻합니다.

RAID-0

데이터는 병렬적으로 기록됩니다. 좀 더 명확히 말하면 chunk-size 크기만큼씩 각 디스크에 돌아가면서 기록됩니다.

chunk-size 가 4 kB 일 때 16 kB 가 세 개의 디스크에 기록된다면 RAID 는 디스크 0, 1, 2 에 4 kB 를 병렬적으로 기록하고 나머지 4 kB 를 0번 디스크에 기록하게 됩니다.

대체로 32 kB 의 chunk-size 가 적당합니다. 하지만 최적값은 RAID를 구성하는 디스크의 갯수와 기록되는 파일의 크기 등에 따라 달라집니다. 값을 변경해 가며 최적의 수치를 찾아야 합니다.

ext2 파일시스템과 RAID-0

이 팁은 michael@freenet-ag.de가 보내주었습니다.

ext2 파일시스템의 블록 그룹의 시작 부분에는 다른 부분보다 더 많은 디스크 액세스가 일어납니다. 디스크가 하나일 때에는 문제가 되지 않지만 RAID-0 에서 모든 블록 그룹이 같은 디스크에 모여 있으면 문제가 될 수 있습니다. 그 예로:

4k stripe size 도 4k 이고 block size 도 4k 이면, 하나의 블록이 하나의 stripe 이 됩니다. 두 개의 디스크에서는 stripe-#disk-product 는 2*4k=8k 가 됩니다. 기본 block group size 가 32768 block 이면, 모든 블록 그룹은 0번 디스크에서 시작됩니다. 이 부분이 전체적인 성능을 저하시키는 hot spot 이 되는 것입니다. 아쉽게도 block group size 는 8 blocks 단위로(4k block 일때는 32k 단위로)만 조정할 수 있습니다. 그렇기 때문에 단순히 mkfs 의 -g 옵션으로 block group size 를 조정하는 것만으로는 이 문제를 해결할 수 없습니다.

디스크를 추가하면 stripe-#disk-product는 12가 되므로 첫번째 블록은 0번 디스크에 저장되고 두번째 블록은 2번 디스크에 저장되며 세번째 블록은 1번 디스크에 저장되게 됩니다. 블록 그룹의 시작부분에서 디스크 활동으로 생기는 부하는 각각의 디스크에 분산되게 됩니다.

디스크를 추가하지 못하는 상황이라면 stripe size 를 32k 로 해보십시오. stripe-#disk-product는 64k 가 될겁니다. 블록 그룹의 크기를 8 블록 단위(32k)로 바꿀수 있으므로 32760의 블록 그룹 사이즈가 알맞을 것입니다.

블록 그룹 경계는 stripe 경계와 맞아 떨어져야합니다. 위의 예제에서는 문제가 되지 않지만 stripe size 가 큰 경우에는 문제가 될 수 있습니다.

RAID-1

chunk-size는 디스크에 쓰기작업을 할 때는 별 의미가 없지만 읽기를 할 때는 어레이로부터 얼마만큼씩 연속적으로 읽어들여와야 할 지를 결정하므로 중요합니다. 모든 디스크가 동일한 내용을 담고 있으므로 어떤 디스크에서 읽어들여하하는가 하는 것은 RAID 계층에서 알아서 하게 됩니다. 이 동작은 평균 seek time을 개선하기 위해 원하는 데이터에 헤드가 가장 가까이 있는 디스크를 선택하게 됩니다.

RAID-4

RAID-4 에 쓰기작업이 수행된 후에는 패리티 디스크의 패리티 정보가 갱신되어야 합니다.

RAID-4 의 읽기는 RAID-0 과 동일하므로 RAID-4의 chunk-sizes 역시 읽기 성능에 영향을 끼칩니다.

RAID-5

RAID-5의 읽기 작업에서의 chunk size는 RAID-0 에서와 의미가 같습니다. 다만 RAID-5 에서의 쓰기 작업은 좀 더 복잡합니다. RAID-5에 데이터가 기록되면 해당 패리티도 갱신되어야 합니다. 패리티를 갱신하려면 다음이 필요합니다.

  • 기존 데이터, 갱신된 데이터, 기존 패리티 블록
  • 또는 패리티 데이터를 제외한 stripe 내의 모든 데이터
RAID 는 쓰기 작업을 진행하면서 가장 이상적인 방법을 통해 각 패리티를 갱신하게 됩니다. 시스템이 충분한 메모리를 갖고 있고 쓰기작업이 한 줄로 진행된다면 패리티 갱신에 드는 오버헤드는 RAID-1에서 처럼 작을 겁니다. 이 경우 패리티 계산은 매우 쉬우므로 CPU에 주는 부담은 무시할 수 있을 정도로 작습니다. 하지만 쓰기 작업이 RAID전반에 걸쳐 점단위로 분산되어 수행된다면 패리티 계산을 위해 각 stripe 마다 읽기 작업을 수행해야 하므로 오버헤드가 커지게 됩니다.

통상적으로 RAID-5 에서의 적당한 chunk-size는 128 kB 입니다.

mke2fs의 옵션에 대해 설명한 부분도 참고하시기 바랍니다. 이는 RAID-5 의 성능과 관계가 있습니다.

4.9 mke2fs 의 옵션

mke2fs로 RAID-4 나 RAID-5 장치를 포맷할 때 쓸 수 있는 특별한 옵션이 있습니다. -R stride=nn 옵션은 mke2fs 를 실행할 때 RAID 장치에 적합한 ext2 데이터 구조로 저장하게 해줍니다.

chunk-size 가 32 kB 란 것은 32 kB 만큼 연속적으로 디스크에 데이터가 기록된다는 뜻입니다. ext2 파일시스템에 4kB 로 block-size를 정하게 되면, 8개의 파일시스템 블록이 하나의 array chunk에 기록되게 됩니다. 파일시스템을 생성할 때 쓰는 mke2fs 로 이렇게 지정할 수 있습니다.

  mke2fs -b 4096 -R stride=8 /dev/md0

RAID-{4,5} 의 성능은 이 옵션에 큰 영향을 받습니다.

ext2fs 의 blocksize 는 파일시스템의 성능에 중대한 영향을 미칩니다. 파일시스템의 크기가 수백메가바이트 이상이라면 항상 4kB 의 block size 를 사용하십시오. (많은 수의 작은 파일을 사용하는 경우는 제외)

4.10 Autodetection

Autodetection 은 시스템 부팅시에 RAID 장치가 자동으로 인식되게 합니다.

이 기능을 사용하려면:

  1. 커널이 autodetection 기능을 지원해야 합니다.
  2. RAID 장치가 persistent-superblock 을 사용하게끔 설정해야 합니다.
  3. RAID 를 구성하는 디스크의 파티션 타입이 0xFD 이어야 합니다.(fdisk 에서 type 을 ``fd''로 설정)

주의:파티션 타입을 바꾸려면 RAID를 멈추어야 합니다. raidstop /dev/md0명령으로 RAID를 정지하십시오.

autodetection 기능이 동작하게 되었습니다. 시스템을 다시 시작하고 /proc/mdstat 를 통해 RAID가 동작하는가 확인하십시오.

부팅과정에서 보이는 메시지는 대략 다음과 같습니다:

 Oct 22 00:51:59 malthe kernel: SCSI device sdg: hdwr sector= 512
  bytes. Sectors= 12657717 [6180 MB] [6.2 GB]
 Oct 22 00:51:59 malthe kernel: Partition check:
 Oct 22 00:51:59 malthe kernel:  sda: sda1 sda2 sda3 sda4
 Oct 22 00:51:59 malthe kernel:  sdb: sdb1 sdb2
 Oct 22 00:51:59 malthe kernel:  sdc: sdc1 sdc2
 Oct 22 00:51:59 malthe kernel:  sdd: sdd1 sdd2
 Oct 22 00:51:59 malthe kernel:  sde: sde1 sde2
 Oct 22 00:51:59 malthe kernel:  sdf: sdf1 sdf2
 Oct 22 00:51:59 malthe kernel:  sdg: sdg1 sdg2
 Oct 22 00:51:59 malthe kernel: autodetecting RAID arrays
 Oct 22 00:51:59 malthe kernel: (read) sdb1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdb1,1>
 Oct 22 00:51:59 malthe kernel: (read) sdc1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdc1,2>
 Oct 22 00:51:59 malthe kernel: (read) sdd1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sdd1,3>
 Oct 22 00:51:59 malthe kernel: (read) sde1's sb offset: 6199872
 Oct 22 00:51:59 malthe kernel: bind<sde1,4>
 Oct 22 00:51:59 malthe kernel: (read) sdf1's sb offset: 6205376
 Oct 22 00:51:59 malthe kernel: bind<sdf1,5>
 Oct 22 00:51:59 malthe kernel: (read) sdg1's sb offset: 6205376
 Oct 22 00:51:59 malthe kernel: bind<sdg1,6>
 Oct 22 00:51:59 malthe kernel: autorunning md0
 Oct 22 00:51:59 malthe kernel: running: <sdg1><sdf1><sde1><sdd1><sdc1><sdb1>
 Oct 22 00:51:59 malthe kernel: now!
 Oct 22 00:51:59 malthe kernel: md: md0: raid array is not clean -- starting background reconstruction 
이 출력물은 RAID-5 가 시스템의 비정상적인 종료등으로 인해 올바르게 셧다운 되지 않았을때 나오는 것입니다. 재구성이 자동으로 실행됩니다. 패리티 정보만 불일치할 뿐 실제 데이터에는 이상이 없으므로 이 장치는 마운트해서 사용할 수 있습니다.

부팅시에 자동으로 인식되면 셧다운도 자동으로 됩니다. init 스크립트를 신경쓸 필요도 없습니다. 그냥 다른 /dev/sd 나 /dev/hd 장치처럼 사용하면 됩니다.

init 스크립트에 있는 raidstart/raidstop 명령은 old-style RAID를 위한 것이므로 지워도 무방합니다.

4.11 Booting on RAID

There are several ways to set up a system that mounts it's root filesystem on a RAID device. Some distributions allow for RAID setup in the installation process, and this is by far the easiest way to get a nicely set up RAID system.

새로은 LILO 는 RAID-1 장치를 지원하기때문에 RAID 장치로 부터 커널이 적재될 수 있습니다. Newer LILO distributions can handle RAID-1 devices, and thus the kernel can be loaded at boot-time from a RAID device. LILO will correctly write boot-records on all disks in the array, to allow booting even if the primary disk fails.

The author does not yet know of any easy method for making the Grub boot-loader write the boot-records on all disks of a RAID-1. Please share your wisdom if you know how to do this.

Another way of ensuring that your system can always boot is, to create a boot floppy when all the setup is done. If the disk on which the /boot filesystem resides dies, you can always boot from the floppy. On RedHat and RedHat derived systems, this can be accomplished with the mkbootdisk command.

4.12 RAID 장치에 위치하는 루트 파일시스템

RAID 디스크로 부팅하기위해서는 루트 파티션(/)이 RAID디스크로 마운트되어 있어야 합니다. 두 가지 방법이 있는데 한 가지는 RAID가 아닌 디스크에 설치된 루트파티션을 RAID디스크로 옮기는 방법입니다. 요즘의 배포판에서는 초기 설치시에 RAID를 생성해서 설치할 수 있으므로 이 방법은 별 쓸모가 없을겁니다. 하지만 기존 시스템을 이 방법을 이용해서 이전해야 할 경우도 있을 겁니다. In order to have a system booting on RAID, the root filesystem (/) must be mounted on a RAID device. Two methods for achieving this is supplied bellow. The methods below assume that you install on a normal partition, and then - when the installation is complete - move the contents of your non-RAID root filesystem onto a new RAID device. Please not that this is no longer needed in general, as most newer GNU/Linux distributions support installation on RAID devices (and creation of the RAID devices during the installation process). However, you may still want to use the methods below, if you are migrating an existing system to RAID.

1번 방법

This method assumes you have a spare disk you can install the system on, which is not part of the RAID you will be configuring.

  • First, install a normal system on your extra disk.
  • Get the kernel you plan on running, get the raid-patches and the tools, and make your system boot with this new RAID-aware kernel. Make sure that RAID-support is in the kernel, and is not loaded as modules.
  • Ok, now you should configure and create the RAID you plan to use for the root filesystem. This is standard procedure, as described elsewhere in this document.
  • Just to make sure everything's fine, try rebooting the system to see if the new RAID comes up on boot. It should.
  • Put a filesystem on the new array (using mke2fs), and mount it under /mnt/newroot
  • Now, copy the contents of your current root-filesystem (the spare disk) to the new root-filesystem (the array). There are lots of ways to do this, one of them is
     cd /
     find . -xdev | cpio -pm /mnt/newroot
    
  • You should modify the /mnt/newroot/etc/fstab file to use the correct device (the /dev/md? root device) for the root filesystem.
  • Now, unmount the current /boot filesystem, and mount the boot device on /mnt/newroot/boot instead. This is required for LILO to run successfully in the next step.
  • Update /mnt/newroot/etc/lilo.conf to point to the right devices. The boot device must still be a regular disk (non-RAID device), but the root device should point to your new RAID. When done, run
     lilo -r /mnt/newroot
    
    This LILO run should complete with no errors.
  • Reboot the system, and watch everything come up as expected :)

If you're doing this with IDE disks, be sure to tell your BIOS that all disks are ``auto-detect'' types, so that the BIOS will allow your machine to boot even when a disk is missing.

2번 방법

This method requires that your kernel and raidtools understand the failed-disk directive in the /etc/raidtab file - if you are working on a really old system this may not be the case, and you will need to upgrade your tools and/or kernel first.

You can only use this method on RAID levels 1 and above, as the method uses an array in "degraded mode" which in turn is only possible if the RAID level has redundancy. The idea is to install a system on a disk which is purposely marked as failed in the RAID, then copy the system to the RAID which will be running in degraded mode, and finally making the RAID use the no-longer needed ``install-disk'', zapping the old installation but making the RAID run in non-degraded mode.

  • First, install a normal system on one disk (that will later become part of your RAID). It is important that this disk (or partition) is not the smallest one. If it is, it will not be possible to add it to the RAID later on!
  • Then, get the kernel, the patches, the tools etc. etc. You know the drill. Make your system boot with a new kernel that has the RAID support you need, compiled into the kernel.
  • Now, set up the RAID with your current root-device as the failed-disk in the raidtab file. Don't put the failed-disk as the first disk in the raidtab, that will give you problems with starting the RAID. Create the RAID, and put a filesystem on it.
  • Try rebooting and see if the RAID comes up as it should
  • Copy the system files, and reconfigure the system to use the RAID as root-device, as described in the previous section.
  • When your system successfully boots from the RAID, you can modify the raidtab file to include the previously failed-disk as a normal raid-disk. Now, raidhotadd the disk to your RAID.
  • You should now have a system that can boot from a non-degraded RAID.

4.13 RAID 장치에서 시스템이 부팅되게 만들기

For the kernel to be able to mount the root filesystem, all support for the device on which the root filesystem resides, must be present in the kernel. Therefore, in order to mount the root filesystem on a RAID device, the kernel must have RAID support.

The normal way of ensuring that the kernel can see the RAID device is to simply compile a kernel with all necessary RAID support compiled in. Make sure that you compile the RAID support into the kernel, and not as loadable modules. The kernel cannot load a module (from the root filesystem) before the root filesystem is mounted.

However, since RedHat-6.0 ships with a kernel that has new-style RAID support as modules, I here describe how one can use the standard RedHat-6.0 kernel and still have the system boot on RAID.

Booting with RAID as module

You will have to instruct LILO to use a RAM-disk in order to achieve this. Use the mkinitrd command to create a ramdisk containing all kernel modules needed to mount the root partition. This can be done as:

 mkinitrd --with=<module> <ramdisk name> <kernel>
For example:
 mkinitrd --preload raid5 --with=raid5 raid-ramdisk 2.2.5-22

This will ensure that the specified RAID module is present at boot-time, for the kernel to use when mounting the root device.

4.14 Converting a non-RAID RedHat System to run on Software RAID

이 부분의 내용은 IBM의 Mark Price 가 보내준 내용입니다.

소개

RAID 를 사용하지 않던 리눅스 시스템을 Software RAID 를 사용하는 시스템으로 탈바꿈하는 방법에 대해 설명합니다.

Scope

Redhat 7.1 에서 테스트되었으며 Software RAID (md) 가 지원되는 다른 배포본에도 적용가능한 내용입니다.

Pre-conversion example system

이 시스템에는 sda, sdb 두 개의 동일한 크기의 스카시 디스크가 있습니다. 두 디스크는 똑같은 파티션 설정을 가지고 있으며 블록크기까지도 동일합니다.

DEVICE      MOUNTPOINT  SIZE        DEVICE      MOUNTPOINT  SIZE
/dev/sda1   /           2048MB      /dev/sdb1               2048MB
/dev/sda2   /boot       80MB        /dev/sdb2               80MB
/dev/sda3   /var/       100MB       /dev/sdb3               100MB
/dev/sda4   SWAP        1024MB      /dev/sdb4   SWAP        1024MB
이 예제에서는 두 개의 물리적 디스크로 구성되는 RAID-1 (미러링) 을 설정해 보겠습니다.

1 단계 - rescue cd 나 floppy 로 부팅하기

레드햇 설치 CD는 rescue 모드로 부팅하면 시스템에서 발견되는 모든 파일시스템을 마운트하는 기능을 제공합니다.

lilo 프롬프트에서 다음을 입력합니다.

    lilo: linux rescue ide=nodma

위와 같이 설정을 하면 인스톨러가 어떤 디스크에 루트 파일시스템이 들어있는가를 물어보게 됩니다. 여기에서는 sda 를 선택하시면 됩니다.

인스톨러는 다음과 같이 파일시스템을 마운트합니다.

DEVICE      MOUNTPOINT  TEMPORARY MOUNT POINT
/dev/sda1   /           /mnt/sysimage
/dev/sda2   /boot       /mnt/sysimage/boot
/dev/sda3   /var        /mnt/sysimage/var
/dev/sda6   /home       /mnt/sysimage/home

주의: - 다른 배포본은 마운트 포인트의 이름이 다르거나 수동으로 마운트해야 하는 경우도 있습니다.

2 단계 - raidtab 파일 생성하기

/mnt/sysimage/etc/raidtab 파일(혹은 그에 상응하는 위치의 파일)을 생성합니다.

그 예는 다음과 같습니다.

raiddev /dev/md0
    raid-level              1
    nr-raid-disks           2
    nr-spare-disks          0
    chunk-size              4
    persistent-superblock   1
    device                  /dev/sda1
    raid-disk               0
    device                  /dev/sdb1
    raid-disk               1

raiddev /dev/md1
    raid-level              1
    nr-raid-disks           2
    nr-spare-disks          0
    chunk-size              4
    persistent-superblock   1
    device                  /dev/sda2
    raid-disk               0
    device                  /dev/sdb2
    raid-disk               1

raiddev /dev/md2
    raid-level              1
    nr-raid-disks           2
    nr-spare-disks          0
    chunk-size              4
    persistent-superblock   1
    device                  /dev/sda3
    raid-disk               0
    device                  /dev/sdb3
    raid-disk               1

주의: - 장치들을 올바른 순서로 설정하는 것이 중요합니다. 그 예로 /dev/sda1raid-disk 0 입니다. raid-disk 1 이 아닙니다. 이 순서대로 md 드라이버가 /dev/sda1의 데이터를 동기화해 오게됩니다. 이 순서가 잘못되면 파일시스템을 망치게 됩니다.

이제 root 파일시스템을 복사해 옵니다.

(rescue)# cp /mnt/sysimage/etc/raidtab /etc/raidtab

3 단계 - md 장치 생성하기

두 가지 방법이 있습니다. /mnt/sysimage/dev 에서 장치 파일을 복사해 오거나 mknod 로 만들면 됩니다. md 장치는 major number가 9 입니다.

(rescue)# mknod /dev/md0 b 9 0
(rescue)# mknod /dev/md1 b 9 1
(rescue)# mknod /dev/md2 b 9 2

4 단계 - 파일시스템 언마운트하기

raid 장치를 기동하고 동기화하기 위해서는 먼저 임시 파일시스템들을 언마운트해야 합니다.

(rescue)# umount /mnt/sysimage/var
(rescue)# umount /mnt/sysimage/boot
(rescue)# umount /mnt/sysimage/proc
(rescue)# umount /mnt/sysimage

5 단계 - raid 장치 기동하기

/dev/sda1, /dev/sda2, /dev/sda3 에 기존의 파일시스템이 있으므로 raid 장치를 강제로 가동시켜야 합니다.

(rescue)# mkraid --really-force /dev/md2

진행상황, 상태, 진척도 등을 /proc/mdstat 파일을 통해 알 수 있습니다.

/boot 와 / 파일시스템도 같은 방법을 적용합니다.

(rescue)# mkraid --really-force /dev/md1
(rescue)# mkraid --really-force /dev/md0

md 드라이버는 한 번에 한 장치씩 동기화하게 됩니다.

6 단계 - 파일시스템들을 다시 마운트하기

이제 동기화된 파일시스템들을 /mnt/sysimage 로 마운트합니다.

(rescue)# mount /dev/md0 /mnt/sysimage
(rescue)# mount /dev/md1 /mnt/sysimage/boot
(rescue)# mount /dev/md2 /mnt/sysimage/var

7 단계- root 디렉토리 바꾸기

현재 디렉토리를 루트 디렉토리로 바꿉니다.

(rescue)# chroot /mnt/sysimage

8 단계 - 설정 파일 수정하기

md 디바이스로 부팅하고 md 디바이스를 마운트하려면 /etc/fstab 파일을 알맞게 변경해 주어야 합니다.

주의: - boot device 는 /dev/sda 가 되고 root device 는 /dev/md0 로 설정해야 합니다.

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
message=/boot/message
linear
default=linux

image=/boot/vmlinuz
    label=linux
    read-only
    root=/dev/md0

/etc/fstab 파일을 수정합니다.

/dev/md0               /                       ext3    defaults        1 1
/dev/md1               /boot                   ext3    defaults        1 2
/dev/md2               /var                    ext3    defaults        1 2
/dev/sda4              swap                    swap    defaults        0 0

9 단계 - LILO 실행하기

With the /etc/lilo.conf edited to reflect the new root=/dev/md0 and with /dev/md1 mounted as /boot, we can now run /sbin/lilo -v on the chrooted filesystem.

10 단계 - 파티션 타입 바꾸기

md 를 구성하는 디스크들의 파티션 타입은 모두 0xFD 이어야 합니다.

't' 옵션으로 파티션의 타입을 변경합니다.

(rescue)# fdisk /dev/sda
(rescue)# fdisk /dev/sdb

'w' 옵션으로 변경된 파티션 테이블을 저장합니다.

11 단계 - 파일시스템 크기 변경하기

raid 장치를 생성하게되면 두번째 수퍼블록이 파티션의 끝부분에 저장되기 때문에 물리적 파티션의 크기가 약간 줄어들게 됩니다. 이 상태에서 리부팅을 하게되면 수퍼블록이 손상됐다는 메세지가 나오며 부팅이 되지 않을 겁니다.

그래서 재부팅하기 전에 그 부분을 조정해 주어야 합니다. 루트파티션을 제외한 모든 md 기반 파일시스템이 언마운트 되었는지 확인하고 루트파티션을 read-only 로 마운트하십시오.

(rescue)# mount / -o remount,ro

모든 md 장치를 fsck 하라는 메세지를 보게 될 것이기 때문에 루트파티션을 읽기 전용으로 마운트하는 겁니다. -f 옵션은 문제가 없는 파일시스템일지라도 강제로 fsck 를 수행하게 합니다.

(rescue)# e2fsck -f /dev/md0

이 명령은 inconsistent sizes 와 수퍼블록 손상을 이유로 에러메세지를 내보낼 겁니다. 'Abort?' 하려면 N 을 입력하십시오.

(rescue)# resize2fs /dev/md0

해당되는 모든 /dev/md 장치에 위의 명령을 반복 적용합니다.

12 단계 - 점검사항

이제는 리부팅을 할 차례입니다. 리부팅하기 전에 아래 목록을 빠짐 없이 확인하십시오.

  • /proc/mdstat 파일을 통해 모든 장치간의 sync 가 완료되었는가 확인.
  • 변경된 사항이 /etc/fstab 파일에 잘 반영되었는가 확인.
  • /etc/lilo.conf 파일의 루트 디바이스 이름이 올바르게 변경되었는가 확인.
  • 부트 로더를 갱신하기 위해 /sbin/lilo 를 실행.
  • 커널에 SCSI 와 RAID(MD) 드라이버가 포함되었는가 확인.
  • RAID 장치를 구성하는 디스크들의 파티션 타입이 0xfd 로 변경되었는가 확인.
  • RAID 가 될 파일시스템에 대해 fsck 와 resize2fs 를 실행했는가 확인.

13 단계 - 재부팅하기

이제 안전하게 시스템을 재부팅할 수 있습니다. 시스템이 부팅되면서 자동으로 md 장치를 인식하게 됩니다.

root 파일시스템은 이제 미러링된 겁니다.

4.15 주의사항

동작중인 RAID 의 구성 디스크의 파티션을 절대로 바꾸지 마십시오. 꼭 그래야 한다면 RAID를 멈춘다음 하십시오.

It is easy to put too many disks on a bus. A normal Fast-Wide SCSI bus can sustain 10 MB/s which is less than many disks can do alone today. Putting six such disks on the bus will of course not give you the expected performance boost. It is becoming equally easy to saturate the PCI bus - remember, a normal 32-bit 33 MHz PCI bus has a theoretical maximum bandwidth of around 133 MB/sec, considering command overhead etc. you will see a somewhat lower real-world transfer rate. Some disks today has a throughput in excess of 30 MB/sec, so just four of those disks will actually max out your PCI bus! When designing high-performance RAID systems, be sure to take the whole I/O path into consideration - there are boards with more PCI busses, with 64-bit and 66 MHz busses, and with PCI-X.

More SCSI controllers will only give you extra performance, if the SCSI busses are nearly maxed out by the disks on them. You will not see a performance improvement from using two 2940s with two old SCSI disks, instead of just running the two disks on one controller.

persistent-superblock 옵션이 누락되었다면 array 를 정지했다가 다시 동작시킬때 되지 않을 겁니다. raidtab 에 옵션을 올바르게 설정하고 array 를 다시 만드십시오. 물론 array 의 데이터는 소실됩니다.

RAID-5 를 구성하는 디스크를 교체한 뒤 재구성이 실패하면 raidtab의 device 순서 때문일수 있습니다. raidtab의 첫 줄의 "device ..." 와 "raid-disk ..." 부분을 array 순서의 마지막부분으로 옮겨 보시기 바랍니다.

5. 성능시험

RAID의 결함허용 기능이 정말 작동되는지, 여러분의 설정이 잘 되었는지 시험해 볼 차례입니다. 그런데 어떻게 디스크가 고장난 상황을 모의할까요?

The short story is, that you can't, except perhaps for putting a fire axe thru the drive you want to "simulate" the fault on. You can never know what will happen if a drive dies. It may electrically take the bus it is attached to with it, rendering all drives on that bus inaccessible. I have never heard of that happening though, but it is entirely possible. The drive may also just report a read/write fault to the SCSI/IDE layer, which in turn makes the RAID layer handle this situation gracefully. This is fortunately the way things often go.

5.1 모의로 디스크 장애 상황을 만들기

모의로 디스크 장애 상황을 만들려면 디스크 하나를 빼십시오. 물론 시스템이 꺼진 상태에서 빼야합니다. If you are interested in testing whether your data can survive with a disk less than the usual number, there is no point in being a hot-plug cowboy here. Take the system down, unplug the disk, and boot it up again.

syslog 와 /proc/mdstat 를 통해 RAID가 어떻게 대처하는가 보십시오.

디스크 장애를 극복하는 것은 RAID-{1,4,5} 라는 것을 명심하십시오. Linear 나 RAID-0 은 구성 디스크가 없어지면 그대로 끝입니다.

디스크를 연결하고(물론 전원을 끈 후) raidhotadd 명령으로 새 디바이스를 RAID에 추가해 주면 됩니다.

5.2 모의로 데이터 오류 상황만들기

RAID는 (하드웨어 방식이든 소프트웨어 방식이든), 디스크에 기록한 뒤 에러가 리턴되지 않으면 문제가 없는 것으로 간주하게 됩니다. 물론 이는 발생할 확률이 극히 드물지만 이렇게 된다면 파일시스템에도 오류가 생기게 됩니다.

RAID cannot and is not supposed to guard against data corruption on the media. Therefore, it doesn't make any sense either, to purposely corrupt data (using dd for example) on a disk to see how the RAID system will handle that. It is most likely (unless you corrupt the RAID superblock) that the RAID layer will never find out about the corruption, but your filesystem on the RAID device will be corrupted.

RAID는 데이터 무결성을 보장하지 않습니다. 디스크의 장애를 극복하는 것이 전부입니다.

6. 재구성

여러분께서 이 문서의 나머지를 읽으셨다면 대충 감이 오실겁니다. 요약하자면,

  • 시스템의 전원을 끔
  • 장애가 발생한 디스크를 교체
  • 시스템의 전원을 켬
  • array 에 디스크를 추가하기 위해 raidhotadd /dev/mdX /dev/sdX 명령을 사용
  • 자동 재구성의 진행을 지켜봄
간혹 일어나는 일이지만 RAID 의 구성 디스크중 두 개 이상이 동시에 고장이 날 수도 있습니다. 같은 콘트롤러 버스에 장애가 발생하면 그 버스에 연결된 디스크들에 같이 장애가 발생할 수도 있는 것입니다. 그래서 RAID-5 에서 두 개 이상의 디스크가 동시에 고장이 나는 일은 치명적입니다.

다음의 내용은 Martin Bene 씨가 보내준 내용이며 위에 언급한 내용의 장애로 부터 복구하는 방법을 소개하고 있습니다. 이 부분은 /etc/raidtab 파일에 failed-disk 표시를 하는 방법을 이용하고 있습니다 (2.2.10 이후 버전의 커널에서 가능한 내용입니다)

6.1 여러 개의 디스크 장애로 부터의 복구

상황은 이렇습니다.

  • 콘트롤러가 고장나면서 연결되어 있던 디스크 두 개가 동시에 offline 될 때.
  • 디스크 하나가 고장나서 같은 스카시 버스에 연결된 모든 디스크에 접근이 안 될때.
  • 케이블이 느슨하게 연결되었을때.
이렇게 되면 여러 개의 디스크에서 동시에 일시적인 고장을 겪다가 나중에는 RAID 의 superblock 이 sync 되지 않게 되어 더이상 RAID 를 사용할 수 없게 됩니다.

이럴때에는 mkraid --force 명령으로 RAID 의 superblock 을 다시 만듭니다.

이를 위해서는 최신의 /etc/raidtab 을 가지고 있어야 합니다. 파일에 표기된 장치들의 순서와 원래 RAID 를 구성하는 디스크의 순서가 정확히 일치하지 않을 경우에는 디스크에 있던 데이터를 완전히 소실할 수 있습니다.

array 를 기동할 때 기록되는 내용을 syslog 에서 확인하면, 각 superblock 의 이벤트 카운트를 보실 수 있습니다. 보통 그 중 가장 낮은 숫자(가장 오래된 것)를 택하는 것이 좋습니다.

주의 : failed-disk 옵션없이 mkraid를 실행해서는 안됩니다.

failed-disk옵션을 이용해 복구를 시도할 때에는 어떤 디스크를 활성화할 것인지 명시해야하며 최적의 결과를 위해서는 여러 조합을 시도해 봐야 할 겁니다. 하지만 이를 시도할 때에는 반드시 read-only 로 마운트해야 합니다.

7. 성능 (Performance)

실제로 software RAID 를 사용하는 시스템에서 측정된 벤치마킹 자료를 소개합니다.

성능측정은 bonnie 라는 프로그램으로 수행되었으며 각 측정에 사용된 임시 파일은 시스템 메모리 크기의 두 배 이상입니다.

이 자료는 하나의 큰 파일의 입/출력 대역폭만을 측정한 것입니다. 대용량의 읽기/쓰기에서의 I/O 대역폭 최대치에 관점을 둔다면 이 자료들은 유용하게 쓰일 수 있습니다. 하지만 뉴스그룹 서버나 웹 서버 등을 용도로 하는 시스템에서는 큰 의미가 없을 수도 있습니다. 이 자료는 어디까지나 모의로 실험된 것입니다. 그러므로 참고만 하시기 바랍니다.

성능 측정에 사용된 시스템의 사양은 다음과 같습니다.

  • Dual Pentium Pro 150 MHz
  • 256 MB RAM (60 MHz EDO)
  • Three IBM UltraStar 9ES 4.5 GB, SCSI U2W
  • Adaptec 2940U2W
  • One IBM UltraStar 9ES 4.5 GB, SCSI UW
  • Adaptec 2940 UW
  • Kernel 2.2.7 with RAID patches

U2W 콘트롤러에 세 개의 U2W 디스크가 연결되어있고, UW 콘트롤러에 UW 디스크 하나가 연결되어있습니다.

RAID 의 사용여부를 떠나서 이 사양의 시스템에서 SCSI 버스를 통해 30 MB/s 이상의 대역폭을 얻을 수 없었습니다. 이는 이 시스템이 구형인데다가 메모리의 대역폭이 낮기 때문이었던것 같습니다.

7.1 RAID-0

읽기연속된 블록들의 입력이며, 쓰기연속된 블록들의 출력입니다. 측정에 사용된 파일의 크기는 1GB 이며 single-user 모드에서 수행되었습니다. TCQ 기능은 사용하지 않았습니다.


Chunk size Block size Read kB/s Write kB/s
4k 1k 19712 18035
4k 4k 34048 27061
8k 1k 19301 18091
8k 4k 33920 27118
16k 1k 19330 18179
16k 2k 28161 23682
16k 4k 33990 27229
32k 1k 19251 18194
32k 4k 34071 26976

RAID 의 chunk-size 는 별 영향이 없어보입니다. 하지만 IA-32 시스템에서 ext2fs 의 block-size 는 4kB(page size)를 유지하는 것이 좋습니다.

7.2 TCQ 를 적용한 RAID-0

이번에는 SCSI 드라이버에 크기 8의 queue depth TCQ 를 적용하였습니다. 별 차이가 없었습니다.


Chunk size Block size Read kB/s Write kB/s
32k 4k 33617 27215

TCQ 가 약간의 쓰기 성능을 향상시켰으나 전체적으로는 큰 차이가 없었습니다.

7.3 RAID-5

RAID-5 에서 같은 측정을 하였습니다.


Chunk size Block size Read kB/s Write kB/s
8k 1k 11090 6874
8k 4k 13474 12229
32k 1k 11442 8291
32k 2k 16089 10926
32k 4k 18724 12627

이번에는 chunk-size 와 block-size 의 차이에 따라 다른 결과가 나왔습니다.

7.4 RAID-10

RAID-10 은 mirrored stripes 로써, 두 개의 RAID-0 로 RAID-1 를 구현한 것입니다. RAID-10 is ``mirrored stripes'', or, a RAID-1 array of two RAID-0 arrays. chunk-size 는 RAID-1 과 RAID-0 array 모두 같게 설정했습니다. 서로 다른 크기의 chunk-size 도 가능하지만 측정해보지 않았습니다.


Chunk size Block size Read kB/s Write kB/s
32k 1k 13753 11580
32k 4k 23432 22249

측정에 사용된 파일의 크기는 900MB 였으며 네 개의 500MB 파티션으로 구성되어 공간이 충분하지 못한 관계(두 개의 1000MB array 로 된 상황)로 1GB 파일을 사용할 수 가 없었습니다.

8. 관련 프로그램

이 문서에는 없지만 Software-RAID 을 운영하는데 유용한 프로그램들이 개발중이거나 개발되어 있을 것입니다.

8.1 mdadm : raidtools를 보조하거나 대체할 수 있는 프로그램

Neil Brown가 만든 mdadmhttp://www.cse.unsw.edu.au/~neilb/source/mdadm/ 에서 구할 수 있습니다. 이 프로그램은 RAID 시스템을 운영하는데 대단히 유용하며 raidtools과 함께, 혹은 대체해서 쓸 수 있을 정도입니다.

8.2 RAID 의 크기 조정과 변환

현재 구성되어 있는 RAID array 에 다른 디스크를 추가하기는 쉽지 않습니다. 이를 가능케 하는 프로그램이 개발되었으며 http://unthought.net/raidreconf 에서 구할 수 있습니다. 그 프로그램으로 RAID 레벨을 전환할 수 있으며(예: 두 개의 RAID-1 array 를 네 개의 RAID-5 array 로 변환이 가능) chunk-size 조절이나 디스크 추가 등의 작업을 할 수 있습니다.

이 프로그램은 아직 완벽하지 않으므로 디스크의 모든 데이터를 잃을 수도 있습니다. 그러므로 이 프로그램을 사용하기 전에 반드시 백업을 해 두어야 합니다.

8.3 백업

RAID 는 백업의 대안이 될 수 없다는 것을 명심하십시오. RAID 의 데이터 이중화가 일주일 전이나 한 달 전의 데이터를 보존해 준다거나 화재, 지진 등의 천재지변으로부터 데이터를 보존해 주진 못한다는 것입니다.

RAID 를 사용하여도 주기적인 백업은 필수입니다. 좋은 백업툴로는 Amanda 가 있습니다.

9. 감사의 글

이 문서를 만드는데 도움을 주신 분들입니다.

  • Mark Price and IBM
  • Michael,
  • Damon Hoggett
  • Ingo Molnar
  • Jim Warren
  • Louis Mandelstam
  • Allan Noah
  • Yasunori Taniike
  • Martin Bene
  • Bennett Todd
  • The Linux-RAID mailing list people
  • The ones I forgot, sorry :)

이 문서의 발전을 위해 고쳐야 할 것들이나 건의사항을 저자에게 보내주시기 바랍니다.




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-12-31 01:31:35
Processing time 0.0071 sec