Ryotta's Basic

Storage
💿 Storage 검증완료

ZFS/Btrfs 고급 기능

개요

ZFS(Zettabyte File System)와 Btrfs(B-tree File System)는 현대적인 Copy-on-Write(CoW) 파일 시스템으로, 기존 파일 시스템의 한계를 극복하기 위해 다양한 고급 기능을 제공합니다. 두 파일 시스템 모두 데이터 무결성, 스냅샷, 압축, 중복 제거 등 핵심 기능을 공유하지만, 구현 방식과 설계 철학에 차이가 있습니다.

ZFS는 Sun Microsystems에서 개발되어 현재 OpenZFS로 발전하였으며, 볼륨 관리와 파일 시스템을 통합한 올인원 솔루션을 지향합니다. Btrfs는 Oracle에서 Chris Mason이 개발한 후 Linux 커널에 통합되었으며, 기존 ext 파일 시스템의 대안으로서 확장성과 관리 편의성을 강조합니다.

ZFS와 Btrfs 고급 기능 비교

핵심 개념

씬 프로비저닝 (Thin Provisioning)

씬 프로비저닝은 물리적 저장 공간보다 더 큰 논리적 볼륨을 할당하여 실제 사용량만큼만 물리적 공간을 사용하는 기술입니다.

ZFS 씬 프로비저닝:
- ZVOL(ZFS Volume)을 통해 구현
- 파일 시스템 레벨에서 씬 프로비저닝 지원
- zfs create -V 100G pool/vol 명령으로 100GB 씬 볼륨 생성
- 실제 데이터 쓰기 시에만 물리적 블록 할당

Btrfs 씬 프로비저닝:
- 서브볼륨(Subvolume)을 통해 구현
- btrfs subvolume create 명령으로 서브볼륨 생성
- 쿼터(Quota) 기능으로 공간 제한 가능
- qgroup(Quota Group)을 통한 계층적 공간 관리

스냅샷 (Snapshot)

스냅샷은 특정 시점의 파일 시스템 상태를 복사하지 않고 빠르게 생성하는 기술입니다. CoW 메커니즘을 활용하여 기존 데이터를 복사하지 않고 변경분만 기록합니다.

ZFS 스냅샷:
- 파일 시스템 레벨과 풀 레벨 스냅샷 지원
- zfs snapshot pool/fs@snap 명령으로 즉시 생성
- 성능 저하 없이 대량 스냅샷 생성 가능
- zfs rollback으로 이전 상태로 복원
- 스냅샷 간 증분 전송(send/receive) 지원

Btrfs 스냅샷:
- 서브볼륨 레벨 스냅샷 지원
- btrfs subvolume snapshot /mnt /mnt/snap 명령으로 생성
- CoW 특성상 스냅샷 생성 시 추가 디스크 공간 거의 사용하지 않음
- btrfs send/receive로 스냅샷 전송 및 증분 백업
- 스냅샷에서 직접 읽기 가능

압축 (Compression)

두 파일 시스템 모두 투명 압축을 지원하여 디스크 공간을 효율적으로 사용합니다.

ZFS 압축:
- LZ4, ZSTD, GZIP, ZLE 등 다양한 알고리즘 지원
- zfs set compression=lz4 pool/fs 명령으로 설정
- LZ4는 빠른 압축/해제 속도로 기본값으로 권장
- ZSTD는 높은 압축률과 적절한 속도 제공
- 블록 단위 압축으로 오버헤드 최소화

Btrfs 압축:
- zlib, LZO, ZSTD 알고리즘 지원
- mount -o compress=zstd /dev/sda1 /mnt 명령으로 설정
- 파일 또는 볼륨별로 압축 알고리즘 설정 가능
- ZSTD는 커널 4.14 이상에서 지원
- 읽기/쓰기 성능 향상 및 공간 절약 효과

중복 제거 (Deduplication)

중복 제거는 동일한 데이터 블록을 여러 파일이 공유하도록 하여 저장 공간을 절약하는 기술입니다.

ZFS 중복 제거:
- zfs set dedup=on pool/fs 명령으로 활성화
- 블록 단위 중복 제거 (SHA-256, Fletcher4 해시 사용)
- RAM에 DDT(Dedup Table) 저장으로 빠른 중복 검사
- 높은 메모리 사용량 (블록당 약 5KB)
- 쓰기 시 중복 검사로 실시간 공간 절약

Btrfs 중복 제거:
- btrfs filesystem dedupe 명령으로 후처리 중복 제거
- FIDEDUPERANGE ioctl을 통한 파일 레벨 중복 제거
- cp --reflink를 통한 CoW 기반 파일 클로닝
- Out-of-band 방식으로 시스템 영향 최소화
- reflink를 통한 효율적인 파일 복사

체크섬 (Checksum)

데이터 무결성을 보장하기 위해 모든 데이터와 메타데이터에 체크섬을 저장합니다.

ZFS 체크섬:
- Fletcher4, SHA-256, SHA-512, Edonr 등 알고리즘 지원
- Merkle Tree 구조로 체크섬 저장
- 블록 포인터에 체크섬 저장 (데이터와 별도)
- 읽기 시 체크섬 검증으로 자동 복구
- Scrub 기능으로 정기적 무결성 검사

Btrfs 체크섬:
- CRC-32C 기본 지원, xxHash, SHA256, BLAKE2b 추가 지원
- 별도의 체크섬 트리에 저장
- 데이터와 메타데이터 모두 체크섬 적용
- 읽기 시 체크섬 불일치 자동 감지
- Scrub으로 온라인 무결성 검사 및 복구

비교/분석

기능 ZFS Btrfs
씬 프로비저닝 ZVOL 지원 서브볼륨 지원
스냅샷 풀/파일시스템 레벨 서브볼륨 레벨
압축 LZ4, ZSTD, GZIP 등 zlib, LZO, ZSTD
중복 제거 실시간 (DDT 사용) 후처리 (FIDEDUPERANGE)
체크섬 Fletcher4, SHA-256 등 CRC-32C, xxHash 등
RAID RAID-Z1/Z2/Z3, 미러링 RAID 0/1/10, dup
메모리 요구 높음 (DDT, ARC) 상대적으로 낮음
볼륨 관리 내장 (풀 개념) LVM과 별도
라이선스 CDDL GPL
주요 사용처 FreeBSD, Solaris Linux 커널 내장

ZFS는 통합 스토리지 스택으로서 예측 가능한 무결성과 복제 기능을 강점으로 삼고, Btrfs는 Linux 배포판 환경에서 서브볼륨, send/receive, 온라인 관리 기능을 더 가볍게 활용하는 데 강점이 있습니다. 실제 운영에서는 메모리 예산, RAID 요구 수준, 커널 통합 여부가 선택 기준이 됩니다.

동작 원리

CoW (Copy-on-Write) 메커니즘

CoW는 데이터를 수정할 때 기존 블록을 덮어쓰지 않고 새로운 블록에 기록하는 방식입니다.

CoW와 스냅샷 동작 원리
  1. 쓰기 과정: 새로운 데이터 블록 할당 → 기존 블록 참조 업데이트 → 기존 블록 해제
  2. 스냅샷 생성: 기존 트리 구조를 그대로 유지하고 변경분만 새로운 블록에 기록
  3. 트리 정합성: 변경이 트리 상위로 전파되어 일관성 유지
  4. 공간 회수: 가비지 컬렉션을 통해 더 이상 참조되지 않는 블록 회수

메타데이터 구조

ZFS 메타데이터:
- MOS (Meta Object Set) → 루트 디렉터리 → 파일 메타데이터
- SPA (Storage Pool Allocator)가 물리적 할당 관리
- DVA (Device Virtual Address)로 물리적 위치 추적
- 메타데이터와 데이터 모두 체크섬 보호

Btrfs 메타데이터:
- 루트 트리 → 파일 시스템 트리 → extent 트리 → 체크섬 트리
- 모든 트리가 동일한 B-tree 구조 사용
- 136비트 키로 객체 식별 (objectid + type + offset)
- 체크섬 트리에서 데이터 무결성 관리

스크러브 (Scrub) 동작

  1. 스캔: 모든 블록의 체크섬 계산 및 검증
  2. 검증: 저장된 체크섬과 비교하여 불일치 감지
  3. 복구: 미러링 또는 RAID 패리티로 손상된 블록 복구
  4. 수정: 복구된 블록의 체크섬 업데이트

장단점

ZFS 장점

  • 올인원 솔루션 (파일시스템 + 볼륨 관리)
  • 뛰어난 데이터 무결성 보장
  • 강력한 스냅샷 및 복제 기능
  • 다양한 RAID 레벨 지원 (RAID-Z1/Z2/Z3)
  • 높은 확장성 (128비트 파일시스템)

ZFS 단점

  • 높은 메모리 요구량 (최소 8GB 권장, DDT 사용 시 더 필요)
  • Linux에서 커널 모듈로 설치 필요
  • 하드웨어 RAID와 호환성 문제
  • 상대적으로 복잡한 관리

Btrfs 장점

  • Linux 커널 내장으로 별도 설치 불필요
  • 상대적으로 낮은 메모리 요구량
  • 온라인 디프래그멘테이션 지원
  • 쉬운 파일시스템 확장/축소
  • ext3/4에서 온라인 변환 지원

Btrfs 단점

  • RAID 5/6 구현 미완성 (라이트 홀 문제)
  • 일부 배포판에서 기본 파일시스템 미사용
  • 높은 디스크 사용률에서 성능 저하 가능
  • 중복 제거가 후처리 방식

운영 관점에서도 차이가 큽니다. ZFS는 ARC, ZIL/SLOG, special vdev, RAID-Z 확장 정책처럼 스토리지 설계 전반을 함께 고려해야 하고, Btrfs는 subvolume, qgroup, balance, scrub, device add/remove 같은 온라인 관리 기능을 조합해 유연하게 운영하는 패턴이 많습니다. 따라서 소규모 NAS나 Linux 단일 호스트에서는 Btrfs가 관리 진입 장벽이 낮고, 장기 보존 스토리지나 복제 중심 환경에서는 ZFS가 더 선호되는 경우가 많습니다.

관련 기술

  • OpenZFS: ZFS의 오픈소스 구현체
  • dm-crypt/LUKS: Btrfs에서 사용하는 디스크 암호화
  • LVM: Btrfs와 함께 사용되는 볼륨 관리자
  • NVMe: 고성능 저장 장치 인터페이스
  • CXL 메모리: 차세대 메모리 인터커넥트
  • RAID-Z: ZFS의 패리티 기반 중복화 방식
  • B-tree: Btrfs의 핵심 데이터 구조
  • Merkle Tree: ZFS의 체크섬 관리 구조
  • Send/Receive: 스냅샷 증분 전송을 위한 복제 메커니즘

핵심 정리

  1. ZFS와 Btrfs는 모두 CoW 기반의 고급 파일 시스템으로, 데이터 무결성과 공간 효율성을 우선시합니다.
  2. 씬 프로비저닝은 물리적 공간보다 큰 논리적 볼륨을 할당하여 유연한 저장 관리를 가능하게 합니다.
  3. 스냅샷은 CoW 메커니즘을 활용하여 성능 저하 없이 빠르게 파일 시스템 상태를 보존합니다.
  4. 투명 압축은 저장 공간을 절약하면서 읽기/쓰기 성능을 향상시킬 수 있습니다.
  5. 체크섬과 Scrub 기능은 데이터 무결성을 보장하고 자동 복구를 가능하게 합니다.

참고 문헌