OS 설치를 위한 raid 구성

OS를 설치할 때 매번 고민하게 되는게 raid 구성이다. 물론 별도의 RAID Controller가 있다면 큰 고민하지 않지만 없을 경우 멈칫 고민하게 된다. 요즘 대부분의 메인보드의 칩셋이 자체적으로 raid를 지원한다. 이 onboard의 raid를 이용하는게 좋은가? 아니면 os(linux)에서의 softraid를 이용하는게 좋은가? swap partition은 raid를 구성하는게 나은가? ssd는 어떻게 raid를 구성해야할까? 그 고민을 줄이기 위해 정리하였다.

RAID 종류

raid 종류는 크게 3개로 나눌수 있을듯하다.

  • Hardware RAID : 별도의 RAID Card로 구성하는 방법. 단점이라고는 비싼 가격이뿐이다. performance, 안정성 모두 best. 이 Raid Card에 HDD들이 연결되어 있어, OS에서는 RAID Controller의 driver없이 HDD를 볼수(access할수) 없다. 부팅 과정중 별도의 Setup툴로 구성한다.
  • Onboard RAID : 메인보드의 칩셋(예를들어 intel, jmicron, nvidia)에서 지원하는 Raid Controller로 구성하는 방법. 그런데 raid에 사용되는 실질적인 모든 연산은 hardware가 아닌 software를 이용한다. 그렇기에 onboard raid가 아닌 fake raid라고 더 많이 불리운다.
  • Software RAID : 별도의 하드웨어 도움없이 온전히 OS에서 software로 처리하는 raid 방법.

fake raid vs. software raid

hardware-assited software raid, fake raid 불리우는 까닭은 onboard chipset(즉 hardware)의 역할이 매우 작다는데 있다. 마치 별도의 hardware가 raid 전부를 제어할 것 같이 보이지만, 실질적으론 software(linux에서는 dmraid)가 대부분은 담당한다고 한다. 그래서 패리티 연산이 있는 raid 5,6등은 아예 지원하지 않은 경우가 대부분이고(오직 raid 0,1만 지원), 있다하더라도 CPU의 부하가 커서 사용하지 않는다고 한다. 게다가 software raid(mdadm)과 다르게 chipset의 vendor에 귀속적이다. 그럼 performance는? 구글링해보면 performance를 비교해놓은 글들이 많은데, 대체적으로 큰 차이는 없어보인다. (물론 chipset이 계속 발전하다보면 또 어떨지 모르지만) 이래서인지 대부분 fake raid보다 software raid를 권한다.

참고로 linux에서 보통 fake raid는 dmraid(혹은 mdadm), software raid는 mdadm를 이용하여 구성한다. 헷갈리게 fake raid가 boot과정중 setup이 가능해 마치 os에서 접근못할것 같지만 아니다. 즉 raid로 묶어도 각 disk는 os에서 보인다. 물론 software raid도 마찬가지. fake raid와는 달리 software raid는 raid 5,6등도 설정이 가능은하지만 CPU에 부하가 많기에 피하는것이 좋다고 한다.

정리하면 아래와 같다.

  1. onboard raid(fake raid)보다 software raid(mdadm)을 이용하자.
  2. software raid도 raid 5,6은 되도록 피하자.

swap 구성

mdadm을 이용하여 raid를 구성할 경우, swap 파티션의 raid도 고민할 필요가 있다. 일반적인 경우라면 os partition은 redundancy를 위해 mirror를 포함하여 구성하게 된다. (raid 1,10 등) 즉, 디스크(위의 경우 partition)가 문제가 발생할 경우에도 데이터 소실을 방지하고 지속적인 운영을 대비하기 위함이다.

그런데 swap의 경우는 가상 메모리(휘발성)이므로 데이터의 소실을 걱정할 필요가 없다. 오히려 mirror로 구성했을 경우 불필요한 데이터를 2중으로 기록하기에, 디스크의 수명만 단축시킬 뿐이다. 그렇다고 raid 0(stripe)으로 구성한다면, 디스크 둘 중 하나라도 문제가 발생했을 때 아예 사용할수 없게 될것이다. 따라서 이 경우엔 raid 구성없이 진행 하는것이 낫다.

pair disk 구성으로 2개의 parition을 사용한다면, 그냥 2개의 swap partition을 구성하면 된다. 총 swap size는 2개의 partition을 더한 값이 될것이고, linear하게 사용되여 첫번째 swap partition이 꽉 차게되면 2번째 swap partition이 사용될 것이다.

ssd의 raid 구성

HDD와 달리 SSD는 매체 특성상 데이터를 바로 덮어쓰기(rewrite)할 수 없다. 다시 쓰려면 반드시 삭제(erase)의 과정이 필요하다. 그런데 SSD는 셀당 쓰기수명(정확히는 삭제)이 있어, 특정 영역에 반복해서 자주 쓰는 작업이 있다면 수명이 다해 더이상 쓰기가 불가능해 진다. OS처럼 한번 write하면 계속 읽기만 하는 영역 있는 반면, 데이터 영역의 경우는 쓰기는 빈번할 것이다. 이럴 경우 raid mirror로 구성한다면 디스크 수명에 치명적이지 않을까?

SSD는 이런 이슈를 위해 여러 방법(wear leveling)을 사용한다고 한다. 해당 셀의 삭제 회수를 저장하여 사용이 적은 셀에 저장하게 하고(counting), 이미 사용한 영역(위의 OS영역와 같은)들의 데이터도 쓰기 회수가 많은 영역과 데이터를 옮기고(swapping)등 수명 향상을 위한 controller의 기능들이 있다. 그렇다곤 해도 현재로선 HDD와 비교했을때 수명은 짧다.

그리고 저장방식(TLC, MLC, SLC)에 따라 재기록 가능 회수가 다르다. 위의 controller 기능들과 SSD 저장방식을 염두해두고 raid를 구성하도록 하자.

그밖의 RAID를 대체(alternative)할수 있는 것들

  • lvm lvm으로 자체적인 raid 구성이 가능하다. 또한 kernel의 backend로 동일한 md(multiple device) driver를 사용하여, performance 역시 거의 동일하다고 한다. lvm이나 mdadm이나 관리자가 익숙한 인터페이스를 사용해도 무방할 듯 보인다. 다만 프로그램의 성격상 lvm보단 mdadm이 raid 자체 이슈 대한 user support가 많다. raid 관련 이슈가 발생했을 경우 인터넷에서 찾는 정보양은 mdadm이 lvm보다 훨씬 많다.
  • btrfs (zfs) brtfs나 zfs(linux)같은 최근의 filesystem의 경우 자체적으로 raid의 구성이 가능하다. 다만 mdadm과의 비교 자료들을 보면 아직까진 CPU 부하나 Performance면에서 떨어지는 편이다. 게다가 최신의 OS가 아니라면 grub, initramfs에 해당 모듈이 없을 가능성이 크다. 그러나 스냅샷, 서브 볼륨(volume 혹은 pool), IO 향상을 위한 압축 등의 기타 여러가지 기능들은 매력적이다. 이런 기능들과 함께 자체 raid를 구성하고 싶다면 development용으로 구성해볼만 하다.

결론

  • 별도의 raid controller가 없다면 softraid로 구성하자.
  • softraid 구성은 아직까지 여러면에서 mdadm이 좋다.
  • swap partition은 mirroring 하지 않는 것이 좋다.
  • ssd는 hdd와 비교했을때 쓰기 수명이 짧다. raid 구성시 유지비(교체 비용)를 고려하자.

 간단해보이는 raid 구성에도 고려해야 할것이 많다. 벤더의 종속, 매체의 특성, 파티션의 성격, 기술의 적합성 등등… 한번 적용하면 되돌리기 어려우니, 또 다른 고려사항은 없는지 충분히 고민해보고 적용하도록 하자.