본문 바로가기
NAS/시행착오

SW RAID: MDADM vs. ZFS 비교

by mericrius 2021. 12. 9.
  OPENZFS MDADM
타입 파일 시스템 블록 디바이스
Resync 속도 빠름 빠름(bitmap enabled)
정전시 데이터 손실 영향없음(CoW Logging) bitmap으로 대응
AVX지원 미지원 지원
RAID LEVEL 지원 0,1,10,5,6,50,60,raidz3 0,1,10,5,6
RAID LEVEL 변경 불가 가능
ON-LINE EXPANSION
(기존 RAID그룹에 DISK 추가)
미지원 지원
Scrubing 지원 지원
파편화에 의한 속도 저하 10% 여유 공간 권장 defrag 가능

 

MDADM과 ZFS는 엄밀히는 다른 개념이다.

 

MDADM이 파일 시스템 레벨 이전에 추상화된 블록 레벨이라면 ZFS는 파일 시스템이다.

 

파일 시스템에서 RAID까지 지원하는 것이다.

 

ZFS의 장점 널리 알려진 대로 CoW(Copy on Write), scrub을 활용한 데이터 무결성 관리, 파일 시스템 레벨 레이드 지원, SLOG를 이용해 HW RAID의 NV-CACHE를 구현할 수도 있고 PC의 강력한 컴퓨팅 파워를 활용해 HW RAID 대비 압도적인 성능을 낼 수 있다.

 

파일 시스템 상에서 레이드를 구성하므로 리실버링(리빌딩)시에도 필요한 만큼만 작업을 수행하기 때문에 디스크에 채워진 데이터의 양이 적다면 매우 빠르게 수행된다.

 

개인적으로 ZFS의 가장 강력한 장점은 CoW라고 생각한다. CoW로 인해서 쓰기 작업 중에 갑작스러운 정전이 발생한다 해도 쓰기 작업 중이던 데이터의 손실이 발생할 수는 있어도 데이터가 망가지는 일은 발생하지 않는다. 기존 데이터는 갱신되지 않은 채로 남아 있게 된다.

 

ZFS는 강력한 장점이 많은 파일 시스템이지만 홈서버로 사용하기에 몇 가지 문제점도 존재한다.

 

첫 번째 on-line expansion을 지원하지 않는다.

 

HW RAID나 MDADM은 4개의 하드로 구성된 레이드 셋의 용량이 꽉 차게 되면 하드를 하나 새로 추가해서 리빌딩을 거치면 5개의 하드로 구성된 레이드 셋으로 용량을 확장하는 게 가능하다.

 

반면에 ZFS는 이것이 불가능하다. ZFS는 애초에 엔터프라이즈 용도를 가정하고 만들어졌기 때문이다.

 

엔터프라이즈 용도에서는 on-line expansion은 서버의 다운타임을 발생시키게 되므로 처음 셋업 할 때부터 완전한 구성을 갖추는 게 일반적이다.

 

두 번째 용량의 90% 이상을 사용하면 안 된다. 즉, 전체 용량의 10% 정도를 비워 놓는 것을 권장한다.

 

ZFS가 CoW를 채택하면서 발생한 문제로 쓰기 작업 시에 볼륨 전체를 200개 정도의 metaslab으로 나누고 빈 공간을 찾게 된다.

 

이때 빈 공간이 너무 적으면 디스크에 빈 공간을 찾기 위한 과도한 IO를 발생시키는 문제가 존재한다.

 

SSD처럼 Disk Map을 램에 상주시키면 전체 용량의 96%까지 성능 하락 없이 사용할 수 있지만, 10TB당 2~4기가 정도의 메모리가 요구된다고 한다. 

 

https://newbedev.com/zfs-performance-do-i-need-to-keep-free-space-in-a-pool-or-a-file-system

 

그럼에도 불구하고 홈서버에서 MDADM가지는 장점은 on-line expansion이 가능하다는 점이다. 처음에 필요한 만큼만 디스크를 준비했다가 더 필요해지면 그때마다 디스크를 추가하면서 용량을 확장하는 게 가능하다.

 

MDADM은 비록 ZFS처럼 강력한 기능을 제공하지는 못하지만 20년 넘게 개발이 진행되어 크리티컬한 문제를 발생시키지 않는 안정적인 수준에 도달한 툴이다.

 

MDADM 역시 정전시에 데이터 손실에 대해서 bitmap을 통해 대응하고 있고 on-line expansion이 가능한 MDADM이 홈서버에서는 더 적합하다고 생각한다.

 

MDADM 역시 cron 스크립트로 1달에 한번씩  scrubbing으로 데이터 무결성을 확인한다.

 

또한, MDADM은 AVX를 지원해서 RAID 연산에 들어가는 CPU파워를 더욱더 줄여준다.

 

MDADM은 블록디바이스의 역할을 수행하고 레이드 셋 위에 별도의 파일시스템을 올려서 사용해야 한다.

 

2cpu 커뮤니티에 물어보니 EXT4같은 저널링 파일 시스템으로도 100TB 이상의 시스템을 운영한다고 한다.

댓글