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 파일 시스템의 대안으로서 확장성과 관리 편의성을 강조합니다.
핵심 개념
씬 프로비저닝 (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는 데이터를 수정할 때 기존 블록을 덮어쓰지 않고 새로운 블록에 기록하는 방식입니다.
- 쓰기 과정: 새로운 데이터 블록 할당 → 기존 블록 참조 업데이트 → 기존 블록 해제
- 스냅샷 생성: 기존 트리 구조를 그대로 유지하고 변경분만 새로운 블록에 기록
- 트리 정합성: 변경이 트리 상위로 전파되어 일관성 유지
- 공간 회수: 가비지 컬렉션을 통해 더 이상 참조되지 않는 블록 회수
메타데이터 구조
ZFS 메타데이터:
- MOS (Meta Object Set) → 루트 디렉터리 → 파일 메타데이터
- SPA (Storage Pool Allocator)가 물리적 할당 관리
- DVA (Device Virtual Address)로 물리적 위치 추적
- 메타데이터와 데이터 모두 체크섬 보호
Btrfs 메타데이터:
- 루트 트리 → 파일 시스템 트리 → extent 트리 → 체크섬 트리
- 모든 트리가 동일한 B-tree 구조 사용
- 136비트 키로 객체 식별 (objectid + type + offset)
- 체크섬 트리에서 데이터 무결성 관리
스크러브 (Scrub) 동작
- 스캔: 모든 블록의 체크섬 계산 및 검증
- 검증: 저장된 체크섬과 비교하여 불일치 감지
- 복구: 미러링 또는 RAID 패리티로 손상된 블록 복구
- 수정: 복구된 블록의 체크섬 업데이트
장단점
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: 스냅샷 증분 전송을 위한 복제 메커니즘
핵심 정리
- ZFS와 Btrfs는 모두 CoW 기반의 고급 파일 시스템으로, 데이터 무결성과 공간 효율성을 우선시합니다.
- 씬 프로비저닝은 물리적 공간보다 큰 논리적 볼륨을 할당하여 유연한 저장 관리를 가능하게 합니다.
- 스냅샷은 CoW 메커니즘을 활용하여 성능 저하 없이 빠르게 파일 시스템 상태를 보존합니다.
- 투명 압축은 저장 공간을 절약하면서 읽기/쓰기 성능을 향상시킬 수 있습니다.
- 체크섬과 Scrub 기능은 데이터 무결성을 보장하고 자동 복구를 가능하게 합니다.