13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] Btrfs

  • [Nas] Btrfs Proxmox NAS 구축 사례: 성능보다 복구와 스냅샷 운영

    [Nas] Btrfs Proxmox NAS 구축 사례: 성능보다 복구와 스냅샷 운영

    Btrfs Proxmox NAS 구축 사례: 성능보다 복구와 스냅샷 운영

    홈랩에서 Btrfs Proxmox NAS 조합을 검토할 때 제일 먼저 갈리는 지점은 하나입니다. “저장소를 VM 안으로 넣어 역할을 분리할까, 아니면 호스트에 바로 붙여 단순하게 갈까.” 저도 둘 다 꽤 오래 굴려봤는데, 테스트와 롤백이 잦은 환경이라면 Proxmox 가상 환경 안에 NAS VM을 두고 그 안에서 Btrfs를 운영하는 방식이 생각보다 꽤 실용적이더라고요. 특히 장애를 몇 번 겪고 나니, 이 구조의 진짜 장점은 스냅샷 자체보다 복구 단위를 세밀하게 나눌 수 있다는 점에 있었습니다.

    물론 이 구성이 항상 정답은 아닙니다. VM 하나에 파일 공유, 미디어 보관, 백업 적재, VM 이미지 저장까지 다 몰아넣으면 Btrfs 장점보다 쓰기 패턴 충돌이 먼저 보이거든요. 반대로 NAS VM을 “공유 데이터와 백업의 운영 계층”으로 한정하고, 데이터베이스나 VM 디스크 이미지 같은 덮어쓰기 중심 워크로드를 분리하면 구조가 한결 안정적이었습니다. 이번 글은 제가 실제로 운영하면서 부딪힌 선택 기준, 실패 패턴, 명령어 수준의 운영 방법까지 한 번에 정리한 사례 기록입니다.

    Proxmox 호스트, Btrfs NAS 게스트, 클라이언트 PC와 백업 대상이 연결된 전체 아키텍처 예시입니다.

    왜 Btrfs Proxmox NAS 조합을 택했나

    제가 이 조합을 유지한 이유는 “최고 성능” 때문이 아니라 복구 흐름이 예측 가능했기 때문입니다. 홈랩에서는 속도보다도, 뭔가 잘못됐을 때 어디까지 되돌릴 수 있는지가 더 중요할 때가 많더라고요. Proxmox 스냅샷은 VM 단위 복구에 빠르고, Btrfs 스냅샷은 공유 폴더나 백업 디렉터리처럼 데이터 단위 복구에 유리합니다. 둘이 비슷해 보여도 실제 쓰임새는 꽤 다릅니다.

    • 역할 분리: 하이퍼바이저와 파일 서비스를 논리적으로 떼어내기 쉽습니다.
    • 복구 단위 분리: VM 전체 롤백과 특정 공유 복원을 따로 판단할 수 있습니다.
    • 서브볼륨 정책화: data, backup, media를 분리하면 보존 기간과 스냅샷 빈도를 다르게 가져가기 좋습니다.
    • 운영 실험성: 공유 구조를 바꿔도 호스트 스토리지 레이아웃까지 함께 건드릴 일이 적습니다.

    반대로 이 조합이 안 맞는 경우도 분명합니다. 대용량 순차 쓰기만 몰리는 저장소, 랜덤 덮어쓰기가 많은 DB 볼륨, VM 디스크 이미지를 NAS VM 내부 Btrfs에 다시 저장하는 중첩 구조는 추천하지 않습니다. 이런 환경에서는 유연성보다 CoW 부작용, 캐시 계층 중첩, 장애 분석 복잡도가 먼저 문제를 만듭니다.

    구성 방식 추천 상황 강점 피해야 할 상황
    Btrfs in VM 홈랩 NAS, 스냅샷 중심 복구, 역할 분리 서브볼륨 운영과 복구 지점 관리가 편함 VM 이미지와 DB 파일까지 한곳에 몰아넣는 경우
    ext4 in VM 설정 단순함, 익숙한 운영 우선 트러블슈팅 경로가 단순함 공유 단위 시점 복구가 자주 필요한 경우
    호스트 직접 NAS 가상화보다 저장소 일체형 운영 계층이 적어 성능 해석이 쉬움 서비스 역할을 자주 갈아끼우는 홈랩

    Btrfs Proxmox NAS에서 좋은 점과 아쉬운 점

    초보자 글에서는 Btrfs를 “스냅샷 되는 ext4 비슷한 파일시스템”처럼 설명하는 경우가 많은데, 실제 운영 감각으로 보면 그렇게 접근하면 거의 항상 꼬입니다. Btrfs는 파일시스템이면서 동시에 데이터 세트와 변경 이력을 같이 관리하는 계층에 가깝습니다. 그래서 공유 디렉터리를 정책 단위로 쪼개서 관리할 때는 정말 편한데, 덮어쓰기가 많은 단일 대용량 파일 위주 워크로드에는 장점이 약해집니다.

    서브볼륨과 스냅샷은 폴더 분리가 아니라 운영 단위 분리입니다

    data, backup, media를 나누는 이유는 보기 좋으라고가 아닙니다. 스냅샷 보존 기간, 복구 우선순위, 삭제 정책, 압축 적용 범위를 다르게 하기 위해서입니다. 예를 들어 backup은 매일 스냅샷을 남겨도 괜찮지만, 미디어 보관소인 media는 굳이 자주 남길 필요가 없을 때가 많습니다. 이 구분이 없으면 스냅샷 수만 늘고 복구 기준은 흐려집니다.

    Copy-on-Write는 만능이 아니라, 쓰기 패턴에 따라 약점이 분명합니다

    Btrfs의 CoW는 파일 변경 이력을 보존하고 스냅샷을 가볍게 만드는 핵심입니다. 다만 랜덤 덮어쓰기가 많은 파일에는 불리할 수 있습니다. 저는 아래처럼 나눠서 봅니다.

    • 문서, 사진, 설정 백업, 프로젝트 아카이브: Btrfs와 잘 맞습니다.
    • SQLite, VM 이미지, active DB dump 재작성 파일: 별도 볼륨으로 분리하거나 No_COW 적용을 미리 검토하는 편이 낫습니다.
    • 다운로드 중인 토런트 작업 디렉터리: 조각화와 메타데이터 증가를 빨리 유발해 분리하는 쪽이 보통 낫습니다.

    중요한 건 chattr +C를 만능 해법처럼 쓰지 않는 겁니다. 이 속성은 새 디렉터리나 빈 파일에 미리 적용해야 의미가 있고, 이미 기록된 데이터에는 결과를 장담하기 어렵습니다. 그래서 “문제 생기면 나중에 +C 붙이자” 식 접근은 대개 늦습니다.

    제가 실제로 잡은 홈랩 NAS 구조

    제가 선호한 구조는 단순합니다. Proxmox 호스트는 하이퍼바이저 역할만 맡고, NAS는 별도 리눅스 VM에서 처리합니다. 그리고 디스크는 가능하면 “큰 qcow2 파일 하나”보다 게스트가 블록 장치를 좀 더 직접적으로 인식하는 방식으로 붙입니다. 이유는 세 가지였습니다. 첫째, 패스스루나 HBA 경유라면 SMART와 I/O 에러 해석이 쉬워지는 경우가 많고, 둘째, 캐시 계층이 덜 꼬이며, 셋째, 장애가 났을 때 원인 추적 경로가 짧아집니다.

    1. Proxmox 호스트에 NAS 전용 VM 생성
    2. 디스크를 VirtIO SCSI 또는 개별 디스크 패스스루로 연결
    3. 게스트 리눅스에서 Btrfs 파일시스템 생성
    4. 서브볼륨 분리 후 UUID 기반 /etc/fstab 등록
    5. Samba 또는 NFS 설정
    6. scrub, balance, snapshot, 로그 점검 작업 예약

    여기서 많이 하는 실수가 하나 있습니다. Proxmox 스냅샷과 Btrfs 스냅샷을 같은 목적으로 쓰는 것입니다. 둘 다 “되돌리기”라서 비슷해 보여도 운영 목적이 다릅니다. 그리고 VM 스냅샷의 정합성이 중요하다면 QEMU guest agent와 파일시스템 freeze 여부도 같이 확인하는 편이 안전합니다.

    기능 좋은 용도 피해야 할 용도 제가 쓰는 기준
    Proxmox 스냅샷 패키지 업데이트 전, VM 설정 변경 전 장기 보관용 데이터 복구 짧게 잡고 빨리 정리
    Btrfs 스냅샷 공유 데이터 시점 복구, 삭제 사고 대응 오프사이트 백업 대체 서브볼륨별 보존 정책 적용
    Btrfs 서브볼륨 구조를 보여주는 Proxmox NAS 구성도

    게스트 내부에서 /srv/nas 아래 data, backup, media 서브볼륨을 나눈 예시 구조입니다.

    Btrfs Proxmox NAS 실전 구현 1: 파일시스템 생성과 마운트

    예시는 Debian 또는 Ubuntu 계열 게스트 기준입니다. 디스크가 /dev/sdb로 보인다고 가정하지만, 실제 작업 전에는 반드시 장치명을 다시 확인해야 합니다. 이 단계는 감으로 하면 안 됩니다. 홈랩에서 제일 복구하기 어려운 사고가 “잘못된 디스크 포맷”이거든요.

    apt update
    apt install -y btrfs-progs samba sysstat smartmontools
    
    lsblk -e7 -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL,SERIAL
    blkid
    wipefs -n /dev/sdb
    
    mkfs.btrfs -L nasdata /dev/sdb
    
    mkdir -p /mnt/btrfs-root
    mount /dev/sdb /mnt/btrfs-root
    
    btrfs subvolume create /mnt/btrfs-root/@data
    btrfs subvolume create /mnt/btrfs-root/@backup
    btrfs subvolume create /mnt/btrfs-root/@media
    btrfs subvolume create /mnt/btrfs-root/@snapshots
    
    umount /mnt/btrfs-root
    
    mkdir -p /srv/nas/data /srv/nas/backup /srv/nas/media /srv/nas/.snapshots
    
    UUID=$(blkid -s UUID -o value /dev/sdb)
    
    mount -o noatime,compress=zstd:3,subvol=@data UUID=$UUID /srv/nas/data
    mount -o noatime,compress=zstd:3,subvol=@backup UUID=$UUID /srv/nas/backup
    mount -o noatime,compress=zstd:3,subvol=@media UUID=$UUID /srv/nas/media
    mount -o noatime,compress=zstd:3,subvol=@snapshots UUID=$UUID /srv/nas/.snapshots
    
    btrfs filesystem show
    btrfs subvolume list -t /srv/nas/data

    여기서 옵션 선택 이유를 짚어보면 이렇습니다.

    • compress=zstd:3: 텍스트, 문서, 설정 파일 비중이 있는 NAS에서 무난했습니다. 이미 압축된 미디어 위주라면 효과는 제한적입니다.
    • noatime: 접근 시간 갱신 쓰기를 줄여 자잘한 I/O를 줄입니다.
    • 최근 커널과 btrfs-progs에서는 free-space-tree가 기본인 경우가 많아서 space_cache=v2를 굳이 적지 않아도 되는 환경이 많습니다.

    제가 운영하면서 얻은 팁 하나는, 처음부터 스냅샷 저장 위치도 @snapshots처럼 별도 서브볼륨으로 분리해두는 겁니다. 스냅샷을 원본 서브볼륨 바로 아래에만 늘어놓으면 나중에 삭제 자동화할 때 경로 실수가 나기 쉽더라고요. 이거 진짜 한 번 꼬이면 꽤 귀찮습니다.

    다음은 /etc/fstab 예시입니다.

    UUID=11111111-2222-3333-4444-555555555555  /srv/nas/data       btrfs  noatime,compress=zstd:3,subvol=@data       0 0
    UUID=11111111-2222-3333-4444-555555555555  /srv/nas/backup     btrfs  noatime,compress=zstd:3,subvol=@backup     0 0
    UUID=11111111-2222-3333-4444-555555555555  /srv/nas/media      btrfs  noatime,compress=zstd:3,subvol=@media      0 0
    UUID=11111111-2222-3333-4444-555555555555  /srv/nas/.snapshots btrfs  noatime,compress=zstd:3,subvol=@snapshots  0 0

    실제 적용 전에는 숫자를 그대로 붙여넣지 말고 반드시 blkid로 확인하세요. 그리고 수정 후에는 아래처럼 검증하는 편이 안전합니다.

    mount -a
    findmnt -t btrfs
    btrfs filesystem usage -T /srv/nas/data

    Btrfs Proxmox NAS 실전 구현 2: Samba 공유와 스냅샷 운영

    SMB 공유는 기능보다도 권한 해석이 일관적인지가 중요합니다. 홈랩에서는 성능보다 권한 꼬임 때문에 시간을 더 많이 쓰게 되더라고요. 아래 예시는 최소 구성인데, 저는 공유 목적별로 권한을 일부러 다르게 둡니다. 백업 공유는 쓰기 주체를 줄이고, 일반 데이터 공유는 팀이나 가족 계정에 맞춰 그룹 권한을 조금 더 넓게 둡니다.

    [global]
       workgroup = WORKGROUP
       server string = Btrfs NAS VM
       security = user
       map to guest = Bad User
       load printers = no
       printing = bsd
       disable spoolss = yes
       ea support = yes
       vfs objects = acl_xattr
       map acl inherit = yes
       store dos attributes = yes
    
    [data]
       path = /srv/nas/data
       browsable = yes
       read only = no
       valid users = nasuser
       force group = nas
       create mask = 0664
       directory mask = 0775
    
    [backup]
       path = /srv/nas/backup
       browsable = yes
       read only = no
       valid users = nasbackup
       force group = nasbackup
       create mask = 0660
       directory mask = 0770

    설정 후에는 서비스 재시작만 하지 말고, 문법과 실제 접근을 둘 다 확인해야 합니다. 이런 확인 절차를 한 번만 습관 들여도 시간을 꽤 아낄 수 있습니다.

    testparm -s
    systemctl restart smbd
    systemctl enable smbd
    smbclient -L localhost -U nasuser
    smbclient //localhost/data -U nasuser -c 'ls'

    스냅샷은 저는 공유 전체를 한 덩어리로 남기지 않고, 서브볼륨 단위로 따로 관리합니다. 그래야 복구할 때 선택이 단순합니다.

    mkdir -p /srv/nas/.snapshots
    
    btrfs subvolume snapshot -r /srv/nas/data /srv/nas/.snapshots/data-$(date +%F)
    btrfs subvolume snapshot -r /srv/nas/backup /srv/nas/.snapshots/backup-$(date +%F)
    
    btrfs subvolume list /srv/nas/.snapshots
    
    # 읽기 전용 스냅샷에서 특정 시점 복구
    btrfs subvolume snapshot /srv/nas/.snapshots/data-2026-08-24 /srv/nas/data-restore
    rsync -aHAX --info=progress2 /srv/nas/data-restore/ /srv/nas/data/

    복구할 때 바로 원본 위에 덮지 않고 data-restore로 한 번 펼쳐 확인하는 이유는, 실제 사고 상황에서는 “삭제 복구”보다 “원치 않는 오래된 상태로 되돌리는 실수”가 더 무섭기 때문입니다. 특히 여러 사용자가 동시에 접근하는 공유라면 더 그렇습니다.

    Btrfs 스냅샷과 Samba 설정을 점검하는 홈랩 NAS 운영 화면

    testparm, btrfs subvolume snapshot, smbclient로 구성 검증하는 흐름을 보여주는 이미지 위치입니다.

    ⚠️ 제가 실제로 겪은 문제와 해결 과정

    운영하면서 가장 헷갈렸던 건 용량 자체보다 공간이 어떻게 배치되어 있는지였습니다. Btrfs는 “남은 GB”만 봐서는 상태 판단이 잘 안 됩니다. 특히 작은 파일이 많고 스냅샷이 누적될수록, 데이터보다 메타데이터 청크 상태가 먼저 문제를 일으키는 경우가 있습니다.

    실패 모드 1: 데이터는 남아 보이는데 쓰기가 실패하는 경우

    제가 재현했던 상황은 이렇습니다. 작은 파일이 많은 프로젝트 백업 디렉터리를 여러 번 복사하고, 그 사이에 스냅샷을 반복 생성했습니다. 그다음 새 파일을 쓰려니 No space left on device가 나왔습니다. df로 보면 공간이 남아 있었는데도요. 근본 원인은 메타데이터 청크 사용률과 데이터 청크 분포가 비대칭적으로 꼬였기 때문이었습니다.

    btrfs filesystem usage /srv/nas/data
    btrfs filesystem df /srv/nas/data
    btrfs balance start -dusage=75 -musage=75 /srv/nas/data

    여기서 중요한 건 full balance를 습관적으로 돌리지 않는 겁니다. 운영 중 balance는 생각보다 오래 걸릴 수 있고, I/O 부하도 꽤 큽니다. 저는 보통 -dusage, -musage로 필요한 범위만 정리합니다. “왜 공간이 부족해졌나”를 보지 않고 무조건 balance부터 돌리면, 증상만 잠깐 눌러놓고 패턴은 그대로 남는 경우가 있더라고요.

    실패 모드 2: 성능이 들쑥날쑥한데 원인이 안 보이는 경우

    이건 Proxmox와 게스트 캐시가 겹칠 때 자주 헷갈립니다. 파일 복사 첫 번째는 빠르고 두 번째는 더 빠른데, 다른 디렉터리로 바꾸면 다시 느려지는 패턴이 대표적입니다. 이런 경우 단순 벤치마크 숫자보다 캐시가 아닌 워크로드를 섞어서 보는 것이 중요했습니다. 저는 같은 파일 하나만 반복 복사하는 테스트는 거의 신뢰하지 않습니다.

    • 큰 파일 1개 복사
    • 작은 파일 수천 개 복사
    • 스냅샷 생성 직후 복사
    • SMB 경유 복사와 게스트 내부 로컬 복사 비교

    이 네 가지를 섞어보면 병목 위치가 꽤 잘 드러납니다. SMB만 느리면 네트워크 또는 Samba 설정, 내부 로컬도 느리면 파일시스템 또는 디스크 경로를 의심하는 식입니다.

    실패 모드 3: 스냅샷은 많지 않은데 삭제 후에도 공간이 안 돌아오는 경우

    이건 Btrfs를 처음 쓸 때 가장 당황하기 쉬운 패턴입니다. 스냅샷, 공유 파일, 중복 블록 참조가 얽혀 있으면 “삭제했는데 왜 안 줄지?”가 자연스럽게 나옵니다. 이때는 du보다 btrfs filesystem usage와 qgroup 사용 여부, 스냅샷 참조 상태를 봐야 합니다. 단순히 휴지통을 비웠다고 공간이 즉시 선형적으로 줄어드는 구조는 아니거든요.

    scrub와 device stats는 루틴으로 보는 편이 낫습니다

    btrfs scrub start -Bd /srv/nas/data
    btrfs scrub status /srv/nas/data
    btrfs device stats /srv/nas/data
    smartctl -a /dev/sdb
    • scrub status에서 uncorrectable errors가 보이면 파일시스템만 볼 문제가 아닙니다. 실제 디스크 상태, 케이블, HBA, USB-SATA 브리지까지 함께 봐야 합니다.
    • btrfs device stats의 write_io_errs, read_io_errs, flush_io_errs, corruption_errs는 누적값입니다. 한 번의 숫자보다 증가 추세가 중요합니다.
    • smartctl은 패스스루나 장치 노출 방식에 따라 게스트에서 바로 안 보일 수 있습니다. 이 경우 호스트 측 SMART 정보와 함께 보는 편이 정확합니다.

    성능 해석은 벤치마크 숫자보다 병목 위치를 읽는 쪽이 낫습니다

    iostat -x 1
    vmstat 1
    journalctl -u smbd -f
    dmesg -Tw | egrep -i 'btrfs|blk|I/O|error|reset'
    • iostat -x 1에서 특정 디스크의 await가 계속 높고 %util이 바닥이 아니라면 저장장치 또는 연결 계층 병목을 먼저 봅니다.
    • vmstat 1에서 wa가 계속 높다면 CPU가 느린 게 아니라 I/O 대기일 가능성이 큽니다.
    • journalctl -u smbd -f에서 세션 재연결이 반복되면 파일시스템보다 네트워크, 인증, 잠금 설정 문제일 수 있습니다.
    • dmesg에 reset, timeout, I/O error가 섞이면 Btrfs 자체보다 하부 장치 문제를 먼저 해결해야 합니다.

    디스크 노출 방식은 성능보다 장애 해석성에서 갈립니다

    제 경험상 많은 글이 “패스스루가 빠르다” 수준에서 끝나는데, 실무적으로 더 중요한 건 문제가 났을 때 무엇이 잘못됐는지 빨리 읽히느냐입니다. 성능이 약간 아쉬운 구조보다, 에러 원인이 명확한 구조가 운영 비용을 줄입니다.

    디스크 연결 방식 장점 단점 제가 추천하는 상황
    VirtIO SCSI 가상 디스크 구성 단순, 백업/이동이 편함 하부 디스크 상태 해석과 SMART 확인이 제한될 수 있음 테스트랩, 소규모 공유
    개별 디스크 패스스루 장치 식별과 장애 분석이 명확함 설정이 다소 번거로움 장기 운영 NAS VM
    USB 외장 디스크 경유 추가 비용이 적음 브리지, 절전, 리셋 이슈가 많음 임시 백업 타깃 정도

    개인적으로 NAS를 오래 굴릴 생각이라면, 처음부터 “나중에 로그를 보고 원인을 읽기 쉬운가”를 기준으로 연결 방식을 고르시는 편이 좋습니다. 홈랩은 장애를 통해 배우는 환경인데, 원인 추적이 안 되면 배울 것도 줄어들더라고요.

    운영 자동화: 귀찮은 작업만 자동화해도 체감이 큽니다

    처음엔 수동으로 해도 되지만, scrub와 스냅샷은 결국 빼먹게 됩니다. 저는 최소한의 cron만 넣고 시작했습니다. systemd timer로 옮겨도 되지만, 홈랩에서는 유지 가능한 단순함도 꽤 중요하거든요.

    crontab -e
    
    # 매주 일요일 새벽 scrub
    0 3 * * 0 /usr/bin/btrfs scrub start -Bd /srv/nas/data
    
    # 매일 새벽 읽기 전용 스냅샷 생성
    10 2 * * * /usr/bin/btrfs subvolume snapshot -r /srv/nas/data /srv/nas/.snapshots/data-$(date +\%F)
    
    # 14일 지난 data 스냅샷 정리
    30 2 * * * /usr/bin/find /srv/nas/.snapshots -mindepth 1 -maxdepth 1 -type d -name 'data-*' -mtime +14 -exec btrfs subvolume delete {} \;

    여기서 제가 특히 강조하는 건 find 범위를 좁히는 겁니다. -mindepth 1, -maxdepth 1, 명확한 이름 패턴은 거의 필수에 가깝습니다. 경로가 느슨하면 삭제 자동화는 언젠가 사고를 냅니다.

    조금 더 안전하게 가고 싶다면 로그를 남기세요. 이건 나중에 정말 차이가 납니다.

    #!/usr/bin/env bash
    set -euo pipefail
    
    TARGET=/srv/nas/data
    SNAPROOT=/srv/nas/.snapshots
    STAMP=$(date +%F)
    
    btrfs subvolume snapshot -r "$TARGET" "$SNAPROOT/data-$STAMP"
    find "$SNAPROOT" -mindepth 1 -maxdepth 1 -type d -name 'data-*' -mtime +14 -print -exec btrfs subvolume delete {} \;

    이 정도만 해도 “언제 무엇이 삭제됐는지”를 추적하기가 훨씬 수월합니다. 홈랩이라고 해서 로그를 안 남기면, 나중에 본인이 제일 답답해집니다.

    Proxmox Btrfs NAS 운영 점검 대시보드 이미지

    Btrfs 상태 점검과 I/O 관찰을 한 화면에서 보는 운영용 대시보드 예시입니다.

    언제 이 구성을 쓰고, 언제 피해야 하나

    제가 실제로 운영한 기준으로 말씀드리면 선택은 꽤 명확합니다.

    • 쓰는 게 맞는 경우: 파일 공유, 사진 보관, 설정 백업, 프로젝트 아카이브, 컨테이너 볼륨 백업처럼 시점 복구 가치가 큰 데이터
    • 보류하는 게 맞는 경우: 고빈도 덮어쓰기 DB 파일, VM 디스크 이미지 저장소, 대용량 연속 쓰기만 몰리는 수집 저장소
    • 호스트 직결이 나은 경우: 단일 서비스, 최소 계층, 빠른 장애 복구보다 구조 단순화가 더 중요한 환경
    • ext4가 나은 경우: 파일시스템 기능보다 관리 익숙함과 예측 가능성이 우선인 경우

    짧게 말하면 이렇습니다. 데이터를 시점 단위로 되돌릴 일이 잦으면 Btrfs NAS VM이 잘 맞고, 파일을 그냥 안정적으로 쌓아두기만 하면 ext4나 호스트 직결이 더 낫습니다.

    검증 결과와 운영하면서 느낀 점

    제가 이 구조를 계속 쓰게 된 결정적인 이유는 두 번의 복구 경험 때문이었습니다. 한 번은 사용자가 디렉터리를 통째로 날렸을 때였고, 다른 한 번은 백업 작업이 덮어쓰기로 꼬였을 때였습니다. 두 경우 모두 VM 전체를 되돌릴 필요 없이 해당 서브볼륨의 스냅샷만 복원해서 문제를 끊을 수 있었습니다. 이 차이가 꽤 큽니다. VM 스냅샷만 있었다면 애플리케이션 상태까지 같이 과거로 돌아가야 했을 가능성이 높습니다.

    반면 불편한 지점도 분명했습니다. Btrfs는 “공간이 남았는지”보다 “공간이 어떻게 배치됐는지”를 봐야 하고, Proxmox 위에 올리면 디스크 계층을 하나 더 이해해야 합니다. 그래서 이 구성이 좋은 이유는 쉽기 때문이 아니라, 운영 목적이 분명할 때 얻는 이익이 번거로움을 넘어설 때가 많기 때문입니다.

    이런 상태면 안정적으로 굴러가는 중입니다

    • btrfs scrub status에 치명적 오류가 없습니다.
    • btrfs device stats 카운터가 시간 경과에 따라 늘지 않습니다.
    • 스냅샷 생성과 삭제 시간이 갑자기 길어지지 않습니다.
    • SMB 접근 시 재연결, 멈춤, 잠금 충돌이 반복되지 않습니다.
    • btrfs filesystem usage에서 메타데이터 사용률이 비정상적으로 치솟지 않습니다.

    자주 묻는 질문과 선택 가이드

    Q1. Proxmox Btrfs를 홈랩 NAS에 바로 추천하냐고요?

    조건부로 추천드립니다. 역할 분리와 스냅샷 기반 복구가 목적이면 만족도가 꽤 높습니다. 대신 “그냥 간단한 공유 폴더 하나”가 목표라면 ext4 기반 NAS가 더 편합니다. 기능이 많다고 항상 좋은 선택은 아니더라고요.

    Q2. Proxmox 스냅샷만 쓰면 안 되나요?

    가능은 하지만, 데이터 복구 단위가 너무 큽니다. VM 전체를 되돌리는 건 빠르지만, 특정 공유 폴더 한 시점만 복원하기에는 거칠게 느껴질 때가 많습니다. 저는 시스템 변경 보호는 Proxmox 스냅샷, 데이터 사고 복구는 Btrfs 스냅샷으로 나눠 쓰는 쪽이 훨씬 깔끔했습니다.

    Q3. 홈랩 NAS에서 꼭 기억할 한 줄은?

    스냅샷은 백업이 아닙니다. 같은 파일시스템 안에 있으면 하부 디스크 문제가 생길 때 같이 잃을 수 있습니다. 운영 복구와 재해 복구는 꼭 분리해서 보셔야 합니다.

    마무리: 제 추천은 꽤 분명합니다

    Btrfs Proxmox NAS 조합은 “가상화 환경 안에서도 데이터 복구 단위를 세밀하게 관리하고 싶다”는 분에게 잘 맞습니다. 제가 직접 굴려본 기준으로는, 홈랩에서 자주 생기는 삭제 사고, 잘못된 덮어쓰기, 테스트 후 롤백 같은 상황에 특히 강했습니다. 대신 이 구조를 고르셨다면 메타데이터 usage 확인, 정기 scrub, device stats 추적은 선택이 아니라 운영 기본값으로 가져가야 합니다.

    • 스냅샷 복구가 우선이다: Btrfs 기반 NAS VM이 맞습니다.
    • 구성이 단순해야 한다: ext4 기반 단순 NAS부터 시작하는 편이 낫습니다.
    • 디스크 장애 분석까지 직접 보고 싶다: 가상 디스크보다 패스스루 또는 장치 식별이 쉬운 구조가 유리합니다.
    • DB, VM 이미지, 랜덤 덮어쓰기가 많다: 같은 Btrfs NAS 안에 넣지 말고 별도 볼륨이나 다른 저장소로 분리하세요.

    제 판단을 한 문장으로 압축하면 이렇습니다. 복구 관점의 NAS를 만들 거라면 이 조합은 충분히 설득력이 있고, 단순 저장소가 목표라면 굳이 복잡도를 들일 이유는 많지 않습니다. 다음 단계로 넘어가신다면, 이 구조 위에 Restic 같은 외부 백업 경로를 붙여서 스냅샷과 재해 복구를 분리하는 쪽까지 함께 가져가시는 걸 권합니다. 관련 내부 글로는 Proxmox 백업 정책, Samba 권한 설계, Restic 오프사이트 백업 가이드를 이어서 묶어두면 SEO와 체류시간 측면에서도 도움이 됩니다.

    Btrfs Proxmox NAS 선택 기준과 운영 체크포인트 요약 이미지

    어떤 환경에서 Btrfs NAS 가상화가 맞는지 빠르게 판단할 수 있는 요약 이미지입니다.

  • [리눅스] XFS vs Btrfs: 1년 운영 후기와 선택 기준

    [리눅스] XFS vs Btrfs: 1년 운영 후기와 선택 기준

    [리눅스] XFS vs Btrfs: 1년 운영 후기와 선택 기준

    XFS Btrfs 비교 이야기는 리눅스 서버 좀 굴려보신 분들이라면 한 번쯤은 꼭 부딪히는 주제입니다. 저도 홈랩에서 VM, 컨테이너, 백업 스토리지까지 이것저것 올려두고 1년 넘게 굴려보니까, 처음엔 “파일 시스템이 다 거기서 거기 아닌가?” 싶었는데 실제로 써보면 차이가 꽤 크더라고요. 특히 리눅스 파일 시스템을 고를 때 성능만 볼지, 복구 편의성을 볼지, Btrfs 스냅샷 같은 운영 기능까지 볼지에 따라 선택이 완전히 달라집니다.

    이번 글에서는 제가 실제 운영하면서 느낀 점을 바탕으로, XFS 성능이 빛나는 구간과 Btrfs 스냅샷이 진짜 편했던 상황을 같이 정리해보겠습니다. 숫자 벤치마크를 과장해서 들이밀기보다는, 운영할 때 몸으로 느껴지는 차이를 중심으로 보시면 됩니다.

    XFS Btrfs 비교 개요를 보여주는 리눅스 파일 시스템 아키텍처 이미지

    홈랩 환경에서 XFS와 Btrfs의 특성과 선택 포인트를 비교하는 개요 이미지입니다.

    왜 XFS와 Btrfs, 파일 시스템 선택이 중요한가요?

    서버를 처음 세팅할 때는 CPU, RAM, 스토리지 용량부터 보게 되죠. 근데 실제로 오래 굴리다 보면 마지막에 발목 잡는 게 파일 시스템인 경우가 꽤 많습니다. 쉽게 말해 파일 시스템은 “디스크를 어떻게 쓰고, 보호하고, 복구할지”를 정하는 운영의 바닥층이거든요.

    • XFS: 대용량 파일 처리와 안정적인 일반 운영에 강한 전통적인 파일 시스템입니다.
    • Btrfs: Copy-on-Write(COW, 쓰기 시 복사) 구조를 기반으로 스냅샷, 서브볼륨, 체크섬 같은 기능을 제공하는 파일 시스템입니다.

    여기서 중요한 포인트! 같은 SSD를 써도, 같은 리눅스 배포판을 써도 파일 시스템이 달라지면 백업 방식, 장애 대응 방식, 체감 성능이 꽤 달라져요. 저도 처음엔 용량만 보고 만들었다가, 나중에 스냅샷이 아쉬워서 마이그레이션 삽질 좀 했습니다 ㅎㅎ

    XFS vs Btrfs 비교: 개념부터 쉽게 정리

    XFS는 어떤 파일 시스템인가요?

    XFS는 오래 검증된 고성능 파일 시스템입니다. 대용량 파일, 연속 쓰기, 안정적인 처리에 강한 편이고, 서버 운영에서 무난하게 선택하기 좋거든요. 특히 로그 저장소, 미디어 파일, 백업 저장소처럼 “꾸준히 쓰고 읽는” 패턴에서 편하더라고요.

    Btrfs는 어떤 파일 시스템인가요?

    Btrfs는 기능이 많은 쪽입니다. Subvolume(서브볼륨, 논리적 분리 단위), Snapshot(스냅샷, 특정 시점 상태 보존), Checksum(체크섬, 데이터 무결성 검증) 같은 운영 기능이 내장돼 있어요. 쉽게 말해 “파일 시스템 안에 운영 툴킷이 같이 들어있다”고 보시면 됩니다.

    항목 XFS Btrfs
    기본 성격 전통적이고 안정적인 고성능 파일 시스템 기능 중심의 현대적 파일 시스템
    스냅샷 기본 제공 없음 기본 제공
    체크섬 기본 데이터 체크섬 중심 구조 아님 메타데이터/데이터 무결성 검증에 강점
    확장/운영 감각 단순하고 예측 가능 기능이 많아 이해할 포인트가 더 많음
    추천 용도 일반 서버, 로그, 대용량 파일 저장 백업, 실험 환경, 롤백이 필요한 서버

    제가 1년 운영하면서 나눈 기준

    실제로 써보니까 저는 기준을 딱 세 가지로 나누게 되더라고요.

    1. 속도가 우선인가? 대용량 파일을 단순하게 밀어 넣고 읽는 작업이 많으면 XFS 쪽이 마음이 편했어요.
    2. 롤백이 중요한가? 설정을 자주 바꾸거나 패키지 업데이트가 잦은 서버는 Btrfs가 정말 편했습니다.
    3. 운영 복잡도를 감당할 수 있나? Btrfs는 좋지만 구조를 모르고 쓰면 “왜 용량이 안 줄지?”, “스냅샷이 왜 이렇게 많지?” 같은 상황이 생기더라고요.

    혹시 이런 경험 있으신가요? 서비스는 잘 돌고 있는데, 업데이트 한 번 잘못해서 복구 포인트가 없어 멘붕 오는 상황이요. 저는 그때 Btrfs의 장점을 제대로 체감했습니다.

    실전 구현: XFS와 Btrfs 세팅 방법

    이제 실제로 어떻게 구성하는지 보겠습니다. 아래 예시는 추가 디스크가 <code>/dev/sdb라고 가정했어요. 운영 환경에서는 디스크 이름을 꼭 다시 확인하세요.

    1. XFS 파일 시스템 생성과 마운트

    lsblk
    sudo mkfs.xfs /dev/sdb
    sudo mkdir -p /data
    sudo mount /dev/sdb /data
    sudo blkid /dev/sdb
    

    blkid로 UUID를 확인한 다음 /etc/fstab에 등록하면 재부팅 후에도 자동 마운트돼요.

    UUID=YOUR-UUID /data xfs defaults,noatime 0 0
    

    noatime은 access time(접근 시간) 갱신을 줄여서 불필요한 쓰기를 덜어주는 옵션입니다. 무조건 정답은 아니지만, 일반적인 서버 데이터 볼륨에서는 꽤 자주 쓰는 편입니다.

    2. Btrfs 파일 시스템 생성과 서브볼륨 구성

    lsblk
    sudo mkfs.btrfs /dev/sdb
    sudo mkdir -p /btrfs
    sudo mount /dev/sdb /btrfs
    sudo btrfs subvolume create /btrfs/@
    sudo btrfs subvolume create /btrfs/@data
    sudo btrfs subvolume create /btrfs/@snapshots
    sudo umount /btrfs
    sudo mount -o subvol=@ /dev/sdb /btrfs
    

    저는 Btrfs를 쓸 때 서브볼륨을 미리 나누는 편이에요. 나중에 스냅샷 정책을 다르게 가져가기 편하거든요. 처음엔 이게 뭔가 싶었는데, 한 번 구조를 잡아두면 운영이 훨씬 수월합니다.

    Btrfs 스냅샷과 서브볼륨 구조를 설명하는 리눅스 파일 시스템 이미지

    Btrfs 서브볼륨, 데이터 영역, 스냅샷 영역이 어떻게 나뉘는지 보여주는 구성 이미지입니다.

    3. Btrfs 스냅샷 생성

    sudo btrfs subvolume snapshot /btrfs /btrfs/@snapshots/root-2026-07-21
    sudo btrfs subvolume list /btrfs
    

    이게 왜 좋냐면, 패키지 업데이트 전이나 설정 변경 전에 스냅샷 하나 떠두면 심리적으로 엄청 편해요. 잘못 건드려도 “일단 돌아갈 구멍”이 생기니까요.

    4. 사용 상태 확인

    df -h
    sudo btrfs filesystem usage /btrfs
    sudo xfs_info /data
    

    XFS는 구조가 비교적 단순해서 확인 포인트도 직관적입니다. 반면 Btrfs는 usage를 볼 때 메타데이터와 실제 사용량 감각이 좀 다를 수 있더라고요. 여기서 헷갈리는 분들 많습니다.

    운영하면서 느낀 XFS 성능과 Btrfs 체감 차이

    이 부분은 벤치마크 숫자보다, 운영자가 느끼는 감각에 가깝습니다.

    • XFS 성능: 큰 파일을 다루거나 단순한 데이터 볼륨으로 쓸 때 일관성이 정말 좋았어요. 특별히 신경 쓸 요소가 적어서 운영 피로도가 낮습니다.
    • Btrfs: 스냅샷과 롤백의 편의성이 압도적이에요. 다만 COW 특성 때문에 쓰기 패턴에 따라 체감이 달라질 수 있고, 운영자가 구조를 이해해야 합니다.
    • 백업 관점에서는 Btrfs가 훨씬 매력적이었어요. 스냅샷을 기준으로 관리 포인트를 잡기 쉽거든요.
    • 장기 운영 안정감은 둘 다 충분히 실사용 가능했지만, 단순함은 확실히 XFS 쪽이 강했습니다.
    운영 시나리오 제가 더 선호한 선택 이유
    미디어 저장소 XFS 큰 파일 위주, 단순 운영, 예측 가능한 성능
    홈서버 애플리케이션 데이터 Btrfs 업데이트 전 스냅샷과 롤백이 편함
    백업 테스트 환경 Btrfs 시점 관리가 수월함
    일반 데이터 볼륨 XFS 설정 후 잊고 쓰기 좋음

    ⚠️ 주의사항과 트러블슈팅

    여기는 꼭 보셔야 합니다. 저도 처음에 몇 번 삽질했던 부분이거든요.

    1. Btrfs는 스냅샷이 많아지면 관리가 필요합니다

    스냅샷이 편하다고 막 쌓아두면 용량 감각이 흐려져요. 지웠는데도 공간이 바로 안 돌아오는 것처럼 느껴질 때가 있거든요. 주기적으로 정리 정책을 잡는 게 정말 중요합니다.

    sudo btrfs subvolume list /btrfs
    sudo btrfs subvolume delete /btrfs/@snapshots/root-2026-07-21
    

    2. 데이터베이스나 VM 이미지처럼 쓰기 패턴이 민감한 경우

    Btrfs의 COW 특성이 항상 이득만 주는 건 아니에요. 워크로드에 따라 쓰기 증폭이나 단편화 체감이 생길 수 있거든요. 이런 경우는 애초에 XFS 쪽이 더 편할 때가 많습니다. 제가 직접 써보니 “기능이 많다”와 “내 워크로드에 맞다”는 완전히 다른 문제더라고요.

    3. XFS는 축소(shrink)가 까다롭습니다

    XFS는 확장은 편하지만 축소는 일반적으로 간단하지 않아요. 그래서 파티션 설계할 때 처음부터 여유를 두는 게 좋습니다. 이건 나중에 손대려면 꽤 귀찮아집니다.

    4. 마운트 옵션은 기본값만 맹신하지 마세요

    예를 들어 SSD, 로그 저장소, 백업 볼륨은 성격이 다르죠. noatime 같은 옵션도 환경에 맞게 써야 해요. 이전 글에서 다뤘던 스토리지 레이아웃 정리 방식과 같이 보시면 더 이해가 쉬우실 겁니다. RAID나 LVM 위에 올릴 때는 계층별 책임도 같이 봐야 하고요.

    검증: 실제 운영에서 어떻게 확인했나

    저는 새로 만든 파일 시스템을 바로 실서비스에 넣지 않고, 꼭 아래 순서로 검증했습니다.

    1. 테스트 디렉터리에 더미 데이터 복사
    2. 재부팅 후 자동 마운트 확인
    3. Btrfs라면 스냅샷 생성/삭제 동작 확인
    4. 로그와 권한이 유지되는지 확인
    5. 백업 스크립트와 충돌 없는지 점검
    mount | grep -E 'xfs|btrfs'
    findmnt /data
    findmnt /btrfs
    sudo btrfs subvolume list /btrfs
    

    이렇게 확인해두면 “마운트는 됐는데 기대한 서브볼륨이 아니네?” 같은 사고를 줄일 수 있어요. 별거 아닌 것 같아도 이 검증 루틴이 장애를 꽤 많이 막아주더라고요.

    XFS 성능과 Btrfs 스냅샷 상태를 점검하는 운영 대시보드 이미지

    XFS와 Btrfs의 사용량, 스냅샷, 마운트 상태를 점검하는 운영 검증 이미지입니다.

    그래서 어떤 파일 시스템 선택이 맞을까요?

    정리하면 이렇습니다.

    • XFS를 추천하는 경우: 대용량 데이터, 단순 운영, 예측 가능한 성능이 중요할 때
    • Btrfs를 추천하는 경우: 스냅샷, 롤백, 실험 환경, 백업 관리가 중요할 때
    • 둘 중 하나가 절대 정답은 아니에요. 서버 역할에 따라 나눠 쓰는 게 훨씬 현실적입니다.

    저는 지금도 전부 한쪽으로 통일하지 않습니다. 미디어 저장소나 덤프 저장소는 XFS, 자주 만지는 애플리케이션 데이터나 테스트 서버는 Btrfs 쪽이 더 잘 맞았어요. 사실 운영은 “이론상 최고”보다 “내 장애 패턴에 잘 맞는가”가 훨씬 중요하거든요.

    파일 시스템 선택 기준을 위한 XFS Btrfs 비교 요약 인포그래픽 이미지

    XFS와 Btrfs의 선택 기준을 한눈에 정리한 요약 비교 이미지입니다.

    정리 및 FAQ

    Q1. 초보자라면 XFS와 Btrfs 중 뭐가 더 쉬운가요?

    보통은 XFS가 더 단순해요. 구성 후 운영 감각이 직관적이거든요.

    Q2. Btrfs 스냅샷만 보고 선택해도 될까요?

    스냅샷은 정말 강력하지만, 워크로드 특성도 같이 봐야 합니다. 특히 쓰기 패턴이 민감한 데이터는 꼭 테스트해보세요.

    Q3. 리눅스 파일 시스템을 서버마다 다르게 써도 괜찮나요?

    오히려 그게 훨씬 현실적이에요. 용도별로 나누면 운영이 편해집니다.

    이번 글을 한 줄로 줄이면 이겁니다. XFS는 단순하고 강하고, Btrfs는 유연하고 똑똑합니다. 제가 1년 운영해보니 둘 다 장점이 분명했고, 결국 중요한 건 서버 역할에 맞춰 고르는 기준이었어요. 다음 글에서는 Btrfs 스냅샷 자동화와 백업 스크립트 연동 방법도 정리해보겠습니다. 그 글까지 보시면 파일 시스템 선택에서 한 단계 더 앞으로 가실 수 있을 겁니다. 🎉

  • [Nas] TrueNAS SCALE vs OpenMediaVault: 13년차 서버 엔지니어의 1년 사용 후 NAS 선택 가이드

    [Nas] TrueNAS SCALE vs OpenMediaVault: 13년차 서버 엔지니어의 1년 사용 후 NAS 선택 가이드

    TrueNAS SCALE vs OpenMediaVault: 13년차 서버 엔지니어의 1년 사용 후 NAS 선택 가이드

    안녕하세요! 13년차 서버 엔지니어, ’13년차의 서버실’ 블로그를 운영하고 있는 엔지니어입니다. 홈랩(Homelab)을 운영하며 다양한 서버와 스토리지 솔루션을 직접 만져보고 경험하는 것을 즐기는데요. 오늘은 많은 분들이 홈 서버 구축 시 가장 많이 고민하시는 두 가지 NAS 운영체제, TrueNAS SCALE와 OpenMediaVault (OMV)에 대한 제 1년간의 실사용 경험을 바탕으로 솔직한 비교 가이드를 공유해볼까 합니다.

    혹시 이런 고민, 해보신 적 없으신가요? “NAS를 새로 사거나 기존 장비를 업그레이드해야 하는데, 어떤 운영체제를 써야 할까?” “ZFS가 좋다고는 하는데, Btrfs는 뭐가 다를까?” “설치도 어렵고 설정도 복잡하면 어쩌지?” 저도 처음에는 비슷한 고민을 했더라고요. 그래서 직접 두 시스템을 설치하고 1년 가까이 사용해보면서 얻은 경험들을 정리해봤습니다. 이 글을 통해 여러분의 홈 서버 환경에 딱 맞는 NAS 솔루션을 찾으시길 바랍니다.

    [개요] TrueNAS SCALE vs OpenMediaVault: 선택의 기로

    1. NAS와 파일 시스템 선택: ZFS vs Btrfs 완벽 비교

    NAS(Network Attached Storage)는 말 그대로 네트워크에 연결된 저장 장치입니다. 개인적인 파일 저장, 미디어 서버 구축, 백업 솔루션, 심지어는 가상 머신(VM)이나 컨테이너(Container)를 운영하는 홈 서버의 핵심 인프라로도 활용될 수 있죠. 특히 요즘처럼 데이터 손실이 큰 문제가 되는 시대에는 어떤 파일 시스템을 사용하느냐가 NAS 선택의 가장 중요한 기준이 됩니다.

    여기서 핵심적인 두 가지 파일 시스템이 등장합니다. 바로 ZFS와 Btrfs입니다.

    • ZFS: 데이터 무결성(Data Integrity)이라고 하면, ZFS는 정말 거의 최고 수준이거든요. 데이터 복제(Mirroring) 및 패리티(Parity)를 통한 RAID 기능은 물론, 스냅샷(Snapshot) 기능으로 특정 시점의 데이터로 복구하는 게 정말 쉬워요. 특히 데이터가 저장될 때마다 체크섬(Checksum)을 생성하여 손상을 자동으로 감지하고 복구하는 기능(Scrubbing)은 ZFS의 가장 강력한 장점입니다. 다만, 메모리(RAM)를 상대적으로 많이 요구하는 편이고, RAID 구성 시 유연성이 다소 떨어진다는 게 단점입니다.
    • Btrfs: ZFS와 유사한 스냅샷, 데이터 무결성 검사, 온라인 RAID 재구성 등 다양한 고급 기능을 제공합니다. ZFS보다 상대적으로 시스템 요구 사양이 낮고, 유연한 볼륨 관리가 가능하다는 게 장점입니다. 다만 ZFS만큼 오랜 기간 검증되지는 않았다는 인식이 있으며, 특히 RAID 5/6 구성에서의 안정성에 대한 논란이 과거에 있었죠. (물론 지금은 많이 개선되고 있습니다.)

    TrueNAS SCALE은 기본적으로 ZFS를, OpenMediaVault는 주로 Btrfs (또는 ext4, XFS 등 다양한 파일 시스템도 선택 가능)를 사용합니다. 이 파일 시스템의 차이가 두 시스템의 성격과 사용성을 크게 결정짓는다고 볼 수 있어요. 쉽게 말해, ZFS는 ‘안정성’에, Btrfs는 ‘유연성’에 좀 더 초점을 맞춘다고 생각하시면 이해하기 쉬울 겁니다.

    2. TrueNAS SCALE: ZFS 기반의 강력한 데이터 보호

    TrueNAS는 오랜 기간 스토리지 솔루션의 강자로 자리매김해왔습니다. 특히 엔터프라이즈 환경에서 그 성능과 안정성을 인정받았죠. TrueNAS SCALE은 리눅스 기반(Debian)으로 전환하면서 기존의 FreeBSD 기반 TrueNAS CORE보다 훨씬 더 많은 유연성을 확보했어요. Docker 컨테이너와 가상 머신(KVM) 지원이 강화된 것이 가장 큰 특징입니다.

    2.1. 설치 과정: 꽤나 직관적이지만…

    설치 자체는 ISO 이미지를 USB에 굽고 부팅하여 진행하는 방식으로, 일반적인 리눅스 배포판 설치와 크게 다르지 않습니다. 다만, ZFS 풀(Pool)을 구성해야 하므로, 설치 시 디스크 구성에 대한 사전 이해가 필요해요. 처음엔 디스크 할당 방식이 조금 낯설 수 있지만, 차근차근 따라 하면 큰 어려움은 없습니다.

    TrueNAS SCALE 설치 시 디스크 할당 화면

    [설치] 디스크 할당 과정

    2.2. 주요 기능 및 사용성: ZFS의 강력함을 경험하다

    TrueNAS SCALE의 가장 큰 매력은 역시 ZFS입니다. 제가 1년간 사용하면서 가장 만족했던 부분은 데이터 무결성에 대한 압도적인 신뢰감이었어요. 데이터가 손상될까 봐 불안해하는 마음이 정말 사라지더라고요. 정기적인 스크럽(Scrub) 기능은 마치 데이터의 건강검진 같은 기분이었습니다.

    또한, 웹 UI(Web User Interface)가 정말 잘 갖춰져 있습니다. 스토리지 풀(Pool) 관리, 데이터셋(Dataset) 생성, 스냅샷 관리, 공유(SMB/NFS) 설정 등이 직관적으로 가능하거든요. 특히, Docker와 KVM을 지원하면서 단순 NAS를 넘어 홈 서버로서의 확장성이 정말 뛰어나요. Plex, Jellyfin 같은 미디어 서버, Home Assistant, Pi-hole 등 다양한 애플리케이션을 손쉽게 설치하고 운영할 수 있다는 게 정말 좋았습니다.

    2.3. 삽질 경험: 메모리와 디스크 구성의 중요성

    TrueNAS SCALE을 사용하면서 가장 크게 느낀 점은 메모리(RAM)의 중요성입니다. ZFS는 메모리를 많이 사용할수록 성능이 향상되는 경향이 있거든요. 제가 처음에는 8GB 램으로 시작했는데, 아무래도 부족하다는 느낌을 받았어요. 특히 VM을 여러 개 돌리거나 Docker 컨테이너를 많이 사용할 때는 메모리 부족 현상이 정말 두드러지더라고요. 결국 16GB, 지금은 32GB로 업그레이드하면서 훨씬 쾌적한 사용이 가능해졌습니다. 최소 16GB, 권장 32GB 이상을 추천드립니다.

    디스크 구성도 정말 중요합니다. ZFS는 단일 디스크보다는 여러 개의 디스크를 묶어 풀(Pool)을 구성하는 것이 일반적이거든요. 미러(Mirror) 구성이나 RAID-Z 구성 등 데이터 보호 수준에 따라 선택해야 하는데, 한번 구성하면 변경이 어렵기 때문에 처음부터 신중하게 계획해야 해요. 저도 처음에는 디스크 개수와 구성 방식을 두고 한참을 고민했습니다. 실수로 데이터를 날릴 수도 있으니, 중요한 데이터는 반드시 별도로 백업하는 습관이 정말 중요합니다.

    3. OpenMediaVault (OMV): 간편함과 유연성의 결합

    OpenMediaVault(OMV)는 Debian Linux 기반의 NAS 솔루션으로, 정말 가볍고 유연한 게 특징입니다. 다양한 하드웨어에서 잘 작동하며, 설치 및 설정이 TrueNAS SCALE에 비해 훨씬 간편하다는 게 가장 큰 장점입니다.

    3.1. 설치 과정: 정말 쉽고 빠르다!

    OMV 설치는 정말 간단합니다. ISO 이미지를 USB에 굽고 부팅하면 몇 번의 클릭만으로 설치가 금방 끝나요. 파일 시스템 역시 Btrfs, ext4, XFS 등 사용자가 원하는 것을 자유롭게 선택할 수 있어서 유연성이 정말 높습니다. 제 경우에는 기존에 사용하던 저사양 미니PC에 설치했는데, 정말 금방 세팅이 끝나서 깜짝 놀랐습니다.

    OpenMediaVault 웹 UI 메인 대시보드

    [설치] OMV 웹 UI 대시보드

    3.2. 주요 기능 및 사용성: 플러그인 생태계의 매력

    OMV의 가장 큰 강점은 간편한 설정과 뛰어난 확장성입니다. 웹 UI가 정말 직관적이고 사용하기 쉬워서 NAS 초보자도 금방 익숙해질 수 있거든요. SMB/CIFS, NFS, FTP 등 기본적인 파일 공유 설정은 물론, Plex, Transmission, Docker 등 다양한 서비스들을 플러그인(Plugin) 형태로 손쉽게 추가하고 관리할 수 있습니다. 특히, Docker 플러그인을 통해 컨테이너 기반의 애플리케이션을 운영하는 게 정말 편리하더라고요.

    제가 OMV를 사용하면서 정말 좋았던 부분은 Btrfs의 유연성입니다. ZFS처럼 엄격하게 디스크 구성을 강요하지 않으면서도, 스냅샷 기능 등을 활용할 수 있다는 게 정말 매력적이었어요. 다양한 파일 시스템을 지원하기 때문에 하드웨어 환경에 맞춰 최적의 선택을 할 수 있다는 것도 큰 장점입니다.

    3.3. 삽질 경험: 플러그인 호환성과 Btrfs의 주의점

    OMV도 완벽하지는 않더라고요. 가끔 특정 플러그인이 최신 버전의 OMV와 호환되지 않거나, 설정이 꼬여서 문제를 일으키는 경우가 있었습니다. ⚠️ 이런 경우에는 플러그인 개발자 커뮤니티나 OMV 포럼을 확인하며 해결해야 했어요. 모든 플러그인이 항상 안정적인 것은 아니라는 점을 꼭 염두에 두어야 합니다.

    Btrfs 파일 시스템을 사용할 때는 몇 가지 주의할 점이 있습니다. 앞서 언급했듯이, 과거 RAID 5/6 구성에서의 안정성 이슈가 있었거든요. 물론 현재는 많이 개선되었지만, 여전히 데이터의 절대적인 안정성이 최우선이라면 ZFS를 사용하는 것이 더 안전하다고 생각합니다. 저는 OMV에서는 주로 Btrfs의 스냅샷 기능을 활용하고, 중요한 데이터는 별도의 백업 시스템으로 관리하는 방식으로 사용하고 있습니다.

    4. TrueNAS SCALE vs OpenMediaVault: 1년 사용 후 솔직한 비교 분석

    1년간 두 시스템을 직접 사용해보면서 느낀 점들을 표로 정리해 봤습니다. 어떤 환경과 목적에 더 적합할지 판단하시는 데 도움이 되기를 바랍니다.

    구분 TrueNAS SCALE OpenMediaVault (OMV)
    기반 OS Debian Linux Debian Linux
    주요 파일 시스템 ZFS Btrfs, ext4, XFS 등
    데이터 안정성 최상 (ZFS) 좋음 (Btrfs, ext4 등)
    시스템 요구 사양 높음 (특히 RAM) 낮음 ~ 보통
    설치 및 설정 난이도 중간 (ZFS 이해 필요) 쉬움
    컨테이너/VM 지원 강력함 (Docker, KVM) 좋음 (주로 Docker 플러그인)
    확장성 (플러그인/앱) 좋음 (TrueCharts 등) 매우 좋음 (다양한 플러그인)
    UI/UX 전문적, 기능 중심 직관적, 사용자 친화적
    추천 사용자 데이터 안정성 최우선, 홈 서버 확장성 중시, ZFS 경험자 NAS 초보자, 간편한 설정 선호, 다양한 서비스 실험 희망자
    TrueNAS SCALE vs OpenMediaVault 주요 특징 비교 인포그래픽

    [비교] 핵심 기능 비교 요약

    5. 결론: 당신에게 맞는 NAS는?

    1년이라는 시간 동안 TrueNAS SCALE과 OpenMediaVault를 직접 사용해보니, 두 시스템 모두 정말 훌륭한 NAS 운영체제라는 걸 다시 한번 느꼈어요. 하지만 명확한 차이점이 존재하며, 어떤 시스템이 더 좋다고 단정하기보다는 각자의 환경과 목적에 맞는 선택이 정말 중요합니다.

    • 데이터의 절대적인 안정성과 신뢰성이 최우선이고, RAM 등 시스템 사양에 대한 투자가 가능하다면 TrueNAS SCALE을 강력하게 추천합니다. ZFS의 강력한 데이터 보호 기능과 함께 Docker, KVM을 활용한 홈 서버 확장까지 고려한다면 정말 최고의 선택이 될 거예요.
    • 설치가 간편하고 빠르게 NAS를 구축하고 싶거나, 다양한 서비스를 유연하게 추가하며 사용하고 싶다면 OpenMediaVault가 정말 좋은 선택입니다. 특히 NAS를 처음 접하는 분들에게는 OMV가 훨씬 친숙하게 다가갈 수 있을 거라고 확신합니다.

    저 같은 경우, 현재는 두 시스템을 병행하여 사용하고 있습니다. 중요한 데이터 저장 및 백업용으로는 TrueNAS SCALE을, 다양한 실험용 홈 서버로는 OpenMediaVault를 활용하고 있죠. 이렇게 듀얼 시스템을 운영하는 것도 하나의 좋은 방법이 될 수 있습니다. 😊

    궁극적으로 NAS 선택은 개인의 경험과 선호도에 따라 달라질 수 있습니다. 이 글이 여러분의 NAS 비교와 선택에 조금이나마 도움이 되었기를 정말 바라며, 여러분의 홈 서버 라이프를 응원합니다! 혹시 더 궁금한 점이 있다면 언제든지 댓글로 남겨주세요. 제가 아는 선에서 최대한 답변해 드리겠습니다.

    다음 글에서는 더욱 흥미로운 홈랩 구축 이야기로 돌아오겠습니다. 기대해주세요! 🎉

  • [NAS 파일 시스템] Btrfs, 데이터 무결성을 위한 현명한 선택일까?

    [NAS 파일 시스템] Btrfs, 데이터 무결성을 위한 현명한 선택일까?

    [NAS 파일 시스템] Btrfs, 데이터 무결성을 위한 현명한 선택일까?

    안녕하세요, 13년차 서버실 지킴이입니다. 오늘은 NAS를 운영하시는 분들이라면 한 번쯤 고민해봐야 할 주제, 바로 Btrfs 파일 시스템에 대해 얘기해보려고 합니다. 저도 처음엔 ZFS(Zettabyte File System)만 최고인 줄 알았거든요. 근데 홈랩에서 다양한 파일 시스템을 직접 써보고 삽질도 좀 해보면서, Btrfs가 NAS 환경에서 얼마나 매력적인 선택지가 될 수 있는지 깨달았습니다. 특히 데이터 무결성(Data Integrity)을 중요하게 생각하신다면, 오늘 제 경험담이 도움이 될 거예요.

    소중한 데이터, 한순간의 실수나 하드웨어 오류로 날아가면 정말 끔찍하잖아요? 저도 예전에 백업 없이 중요한 자료를 날려본 경험이 있어서, 그때부터는 파일 시스템 선택에 정말 신중해졌습니다. Btrfs는 이런 걱정을 덜어줄 수 있는 강력한 기능들을 제공하더라고요. 과연 Btrfs가 여러분의 NAS 데이터를 안전하게 지켜줄 수 있을지, 함께 파헤쳐 봅시다!

    Btrfs 파일 시스템의 Copy-on-Write(CoW) 및 스냅샷 작동 방식 개념도

    Btrfs 파일 시스템의 Copy-on-Write(CoW) 및 스냅샷 작동 방식 개념도

    Btrfs, 너는 누구냐? 핵심 기능 파헤치기

    Btrfs는 ‘B-tree file system’의 약자로, 오라클에서 개발을 시작한 차세대 파일 시스템입니다. 리눅스 환경에서 널리 사용되고 있죠. 사실 처음엔 이게 뭔가 싶었는데, 몇 가지 핵심 기능들을 알고 나니 “이거 진짜 물건이더라고요!” 하는 생각이 들었습니다. 특히 NAS에 적용했을 때 빛을 발하는 기능들이 많더라고요.

    1. Copy-on-Write (CoW, 카피 온 라이트)

    이름 그대로 ‘쓸 때 복사한다’는 의미입니다. 기존 데이터를 변경할 때, 해당 데이터를 덮어쓰지 않고 새로운 위치에 변경된 데이터를 쓴 다음, 메타데이터(Metadata)만 업데이트하는 방식이죠. 이게 왜 중요하냐면요?

    • 데이터 손상 방지: 전원이 갑자기 나가거나 시스템에 문제가 생겨도, 작업 중이던 데이터는 손상될지언정 기존 데이터는 온전히 보존됩니다.
    • 스냅샷의 기반: 이 CoW 덕분에 스냅샷(Snapshot) 기능이 아주 효율적으로 작동합니다.

    사실 CoW 방식은 ZFS에서도 볼 수 있는 강력한 기능인데, Btrfs도 이걸 아주 잘 활용하고 있더라고요.

    2. 스냅샷 (Snapshot)

    스냅샷은 특정 시점의 파일 시스템 상태를 저장하는 기능입니다. 마치 게임에서 세이브 포인트를 만드는 것과 같아요. Btrfs의 스냅샷은 CoW 덕분에 용량을 거의 차지하지 않는다는 게 정말 큰 장점입니다. 변경된 블록만 저장하면 되니까요.

    • 실수로 파일 삭제/수정: 걱정 마세요! 스냅샷으로 쉽게 특정 시점으로 되돌릴 수 있어요.
    • 랜섬웨어 공격: 이것 때문에 저도 Btrfs를 더 신뢰하게 됐는데요, 만약 랜섬웨어에 감염되더라도 감염되기 전 스냅샷으로 복원하면 피해를 최소화할 수 있습니다. 정말 든든하죠!

    3. 데이터 무결성 (Data Integrity)을 위한 체크섬 (Checksum)

    Btrfs는 데이터 블록과 메타데이터 블록에 각각 체크섬을 적용합니다. 데이터를 읽을 때마다 체크섬을 확인해서, 혹시라도 데이터가 손상(Bit Rot, 비트 로트)되었는지 검사하죠. 만약 손상된 부분을 발견하면, RAID 1이나 RAID 10처럼 미러링된 구성에서는 자동으로 손상되지 않은 사본으로 복구해버립니다. 이게 바로 자가 복구(Self-Healing) 능력입니다.

    제가 실제로 써보니까, 이런 기능들이 작은 홈랩 NAS부터 기업용 스토리지까지 데이터의 신뢰성을 크게 높여주더라고요. 처음엔 “굳이 이렇게까지 해야 하나?” 싶었는데, 한 번 데이터를 잃고 나면 생각이 확 달라집니다.

    NAS에서 Btrfs 실전 활용: 어떻게 적용할까?

    많은 NAS 제조사들이 Btrfs를 채택하고 있습니다. 특히 Synology(시놀로지) 같은 경우 Btrfs를 적극적으로 활용해서 스냅샷, 데이터 무결성 기능을 사용자에게 제공하고 있죠. 하지만 직접 리눅스 서버에 NAS를 구축한다면, Btrfs를 직접 설정해야 합니다.

    1. Btrfs 파일 시스템 생성

    먼저 Btrfs로 포맷할 디스크를 준비해야 합니다. 저는 주로 여러 디스크를 묶어서 사용하는데요, Btrfs는 자체적으로 소프트웨어 RAID 기능을 제공합니다. (물론 안정성 측면에서는 하드웨어 RAID나 mdadm 위에 Btrfs를 쓰는 것도 고려할 수 있습니다.)

    # /dev/sdb, /dev/sdc 두 개의 디스크로 RAID1 Btrfs 파일 시스템 생성
    sudo mkfs.btrfs -d raid1 -m raid1 /dev/sdb /dev/sdc
    
    # 기존 디스크를 Btrfs 풀에 추가할 경우
    sudo btrfs device add /dev/sdd /mnt/btrfs_pool
    sudo btrfs balance start -dusage=50 /mnt/btrfs_pool # 데이터 분배

    이렇게 생성된 Btrfs 볼륨을 원하는 마운트 포인트에 마운트하면 됩니다.

    2. 서브볼륨 (Subvolume) 생성 및 관리

    Btrfs의 서브볼륨은 일반적인 디렉토리와 비슷하지만, 독립적인 스냅샷을 찍거나 할당량(Quota)을 설정할 수 있는 등 더 강력한 기능을 제공합니다. 저는 보통 용도별로 서브볼륨을 나눠서 사용해요. 예를 들어, ‘Documents’, ‘Media’, ‘Backup‘ 이런 식으로요.

    sudo mount /dev/sdb /mnt/btrfs_pool
    
    # 'data'라는 서브볼륨 생성
    sudo btrfs subvolume create /mnt/btrfs_pool/data
    
    # 'data' 서브볼륨을 /srv/nas에 마운트 (fstab에도 등록하여 부팅 시 자동 마운트)
    sudo mount -o subvol=data /dev/sdb /srv/nas

    3. 스냅샷 생성 및 관리

    이제 서브볼륨에 데이터를 저장하고, 주기적으로 스냅샷을 찍어줍니다. 스냅샷은 읽기 전용(Read-Only)으로 생성하는 것이 일반적입니다.

    # 'data' 서브볼륨의 스냅샷 생성
    sudo btrfs subvolume snapshot -r /srv/nas /srv/nas/.snapshots/data_$(date +%Y%m%d_%H%M%S)
    
    # 생성된 스냅샷 목록 확인
    sudo btrfs subvolume list -t -o /mnt/btrfs_pool

    스냅샷을 자동으로 찍어주는 스크립트나 서비스(예: <code>btrfs-autosnap, snapper)를 활용하면 훨씬 편리하게 관리할 수 있어요. 저도 처음엔 수동으로 찍다가, 나중엔 스크립트 걸어놓고 마음 편하게 쓰고 있습니다.

    Btrfs 파일 시스템을 활용한 NAS 구성 개념도

    Btrfs 파일 시스템을 활용한 NAS 구성 개념도

    ⚠️ 주의사항 및 트러블슈팅: 제가 겪었던 삽질들

    Btrfs가 만능은 아닙니다. 제가 직접 써보면서 몇 가지 주의할 점과 삽질 경험을 공유해 드릴게요.

    1. 성능 오버헤드 (Performance Overhead)

    Copy-on-Write 방식은 데이터 무결성을 높여주지만, 쓰기(Write) 작업 시 약간의 성능 저하가 발생할 수 있습니다. 특히 랜덤 쓰기(Random Write)가 많은 환경에서는 체감될 수 있어요. 처음엔 “왜 이렇게 느리지?” 싶었는데, 알고 보니 CoW 때문이더라고요. 그래서 고성능이 최우선인 환경보다는 데이터 안정성이 중요한 환경에 더 적합하다고 생각합니다.

    2. 디스크 공간 관리 (Disk Space Management)

    스냅샷은 공간을 효율적으로 사용하지만, 너무 많은 스냅샷을 오랫동안 보관하면 결국 디스크 공간을 많이 차지하게 됩니다. 특히 삭제된 파일이 스냅샷에 남아있다면 실제 공간은 회수되지 않거든요. 주기적으로 오래된 스냅샷을 삭제해주는 정책이 필요해요.

    # 오래된 스냅샷 삭제 예시 (가장 최신 스냅샷 10개만 남기고 삭제)
    # 실제 사용 시에는 신중하게 접근해야 합니다.
    LATEST_SNAPSHOTS=$(sudo btrfs subvolume list -t -o /mnt/btrfs_pool | grep 'snapshots' | sort -r | head -n 10 | awk '{print $9}')
    ALL_SNAPSHOTS=$(sudo btrfs subvolume list -t -o /mnt/btrfs_pool | grep 'snapshots' | awk '{print $9}')
    
    for SNAPSHOT in $ALL_SNAPSHOTS; do
        IS_LATEST=false
        for LATEST in $LATEST_SNAPSHOTS; do
            if [ "$SNAPSHOT" == "$LATEST" ]; then
                IS_LATEST=true
                break
            fi
        done
        if ! $IS_LATEST; then
            echo "Deleting old snapshot: $SNAPSHOT"
            sudo btrfs subvolume delete "$SNAPSHOT"
        fi
    done

    ⚠️ 경고: 스냅샷 삭제는 신중하게! 복구 불가능합니다.

    3. RAID 기능의 성숙도

    Btrfs는 자체 RAID0, RAID1, RAID5, RAID6 기능을 제공해요. 하지만 RAID5/6의 경우 초기에는 안정성 문제가 보고되기도 했습니다. 지금은 많이 개선되었지만, 아직까지는 mdadm RAID1 위에 Btrfs를 사용하거나, RAID10을 선호하는 경우가 많습니다. 저도 안정성을 위해 RAID10을 주로 사용하거나, 디스크 두 개만 쓰는 NAS에는 Btrfs RAID1을 쓰는 편입니다.

    ✅ 검증 및 결과: 내 데이터는 안전한가?

    Btrfs를 설정하고 나면, 데이터가 정말 안전하게 관리되고 있는지 확인해야겠죠? 저는 주기적으로 btrfs scrub 명령어를 실행해서 파일 시스템의 데이터 무결성을 검사합니다. 이 명령은 모든 데이터와 메타데이터 블록의 체크섬을 확인하고, 손상된 부분이 있으면 자동으로 복구해줍니다.

    # Btrfs 파일 시스템 스크럽 시작
    sudo btrfs scrub start /mnt/btrfs_pool
    
    # 스크럽 진행 상황 확인
    sudo btrfs scrub status /mnt/btrfs_pool

    스크럽이 완료되면 “드디어 됐다!” 하는 안도감이 들어요. 이 기능을 통해서 디스크 자체의 물리적인 오류나 비트 로트 현상으로부터 데이터를 보호할 수 있습니다. NAS를 며칠씩 켜놓는 저에게는 정말 필수적인 기능이라고 생각해요.

    Btrfs scrub 및 스냅샷 목록 확인 터미널 출력 화면

    Btrfs scrub 및 스냅샷 목록 확인 터미널 출력 화면

    마무리: Btrfs, NAS 데이터 무결성을 위한 현명한 선택일까?

    결론부터 말씀드리자면, Btrfs는 NAS 환경에서 데이터 무결성과 관리 유연성을 크게 향상시켜 줄 수 있는 현명한 선택지가 될 수 있습니다. 특히 스냅샷 기능은 랜섬웨어 방어나 실수로 인한 데이터 손실 복구에 엄청난 강점을 보여주거든요. CoW 기반의 효율적인 공간 활용도 정말 매력적입니다.

    하지만 성능 오버헤드나 RAID 기능의 성숙도 등 고려해야 할 부분도 분명히 있습니다. 완벽한 파일 시스템은 없으니까요. 여러분의 NAS 사용 목적과 중요도에 따라 Btrfs가 최적의 선택이 될 수도, 아닐 수도 있겠죠. 저처럼 홈랩에서 다양한 시도를 해보면서 자신에게 맞는 최적의 조합을 찾아가는 과정 자체가 인프라 엔지니어의 숙명 아닐까요? ㅎㅎ

    다음 글에서는 Btrfs와 ZFS를 좀 더 심층적으로 비교해보는 시간을 가져볼까 합니다. 혹시 Btrfs를 사용하면서 겪었던 재미있는 삽질 경험이 있으시다면 댓글로 공유해주세요! 저도 배우는 재미가 쏠쏠하거든요. 긴 글 읽어주셔서 감사합니다!

    Btrfs 파일 시스템의 NAS 적용 장단점 인포그래픽 요약

    Btrfs 파일 시스템의 NAS 적용 장단점 인포그래픽 요약

  • [Proxmox] ZFS vs Btrfs 비교: Proxmox 홈랩에서의 실측 성능과 데이터 무결성 분석

    [Proxmox] ZFS vs Btrfs 비교: Proxmox 홈랩에서의 실측 성능과 데이터 무결성 분석

    안녕하세요! 13년차 인프라 엔지니어, ’13년차의 서버실’ 주인장입니다.

    홈랩을 운영하다 보면 늘 새로운 기술에 대한 갈증과 함께 ‘어떻게 하면 더 효율적이고 안정적으로 운영할 수 있을까?’ 하는 고민에 빠지게 됩니다. 특히 스토리지 선택은 홈랩의 심장이나 다름없죠. Proxmox VE(Virtual Environment)를 사용하시는 분들이라면 한 번쯤은 ZFS와 Btrfs 사이에서 깊은 고민에 빠져보셨을 겁니다. 저도 처음엔 뭐가 뭔지 복잡하고, 어떤 게 제 홈랩 환경에 최적일지 갈피를 잡기 어려웠거든요. 스펙 시트만 봐서는 답이 안 나오더라고요.

    그래서 오늘은 제가 직접 Proxmox 홈랩에서 ZFS와 Btrfs 스토리지를 구성하고 사용해보면서 겪었던 경험과 함께, 실측 성능 (물론 ‘실측’이라는 게 제 개인적인 체감과 간단한 테스트 기준입니다만) 그리고 데이터 무결성 측면에서 두 파일 시스템을 꼼꼼하게 비교 분석해 보려고 합니다. 이 글이 여러분의 홈랩 스토리지 성능 고민과 ZFS, Btrfs 선택에 작은 이정표가 되었으면 좋겠네요. 삽질 끝에 얻은 저의 인사이트를 솔직하게 공유해 드릴게요! 🎉

    ZFS와 Btrfs는 Copy-on-Write(CoW) 개념을 기반으로 하는 최신 파일 시스템입니다. 이미지에서는 두 파일 시스템의 주요 특징과 구조를 시각적으로 비교하여 보여줍니다.

    ZFS와 Btrfs, 대체 뭐가 다른가요? (핵심 개념 파헤치기)

    본격적인 비교에 앞서, 두 파일 시스템의 핵심 개념을 먼저 짚고 넘어가야겠죠? 쉽게 말해 ZFS와 Btrfs 모두 ‘차세대 파일 시스템’으로 불리며, 기존 ext4 같은 파일 시스템보다 훨씬 강력한 기능들을 제공합니다.

    • Copy-on-Write (CoW, 카피 온 라이트): 이게 두 파일 시스템의 가장 중요한 공통점입니다. 데이터를 덮어쓰지 않고, 변경 사항이 생기면 새로운 블록에 쓰고 메타데이터만 업데이트하는 방식이죠. 덕분에 스냅샷(Snapshot) 생성이나 데이터 손상 복구에 아주 유리합니다.
    • 데이터 무결성 (Data Integrity): CoW 덕분에 데이터가 손상될 위험이 훨씬 적습니다. 체크섬(Checksum)을 사용해서 데이터가 올바른지 지속적으로 검증하거든요.

    ZFS(Zettabyte File System): 엔터프라이즈급 안정성의 대명사

    ZFS는 Oracle Solaris에서 시작되어 현재는 OpenZFS 프로젝트로 활발히 개발되고 있는 파일 시스템입니다. ‘강력한 데이터 무결성’이라는 키워드가 가장 잘 어울립니다. 제가 써보니 이 친구는 정말 든든하더라고요. 주요 특징은 다음과 같습니다.

    • 트랜잭션 기반 (Transactional): 모든 쓰기 작업이 트랜잭션으로 처리되어 데이터 손실 위험이 거의 없습니다.
    • 풀 관리 (Pool Management): 여러 디스크를 묶어 스토리지 풀(Storage Pool)을 구성하고, 그 위에 파일 시스템을 생성합니다. RAID-Z (RAID-Z1, RAID-Z2, RAID-Z3)와 같은 소프트웨어 RAID 기능이 내장되어 있어 별도의 하드웨어 RAID 컨트롤러 없이도 강력한 데이터 보호 기능을 제공합니다.
    • 자가 복구 (Self-Healing): 데이터 손상이 감지되면 체크섬을 통해 자동으로 복구하려고 시도합니다. 이게 진짜 매력적이죠.
    • 스냅샷 (Snapshot) 및 클론 (Clone): 거의 즉각적으로 스냅샷을 생성하고 관리할 수 있습니다. 백업이나 테스트 환경 구성에 아주 유용하죠.
    • 압축 (Compression) 및 중복 제거 (Deduplication): 데이터를 압축하여 공간을 절약하고, 중복되는 데이터를 제거하여 효율성을 높일 수 있습니다. 다만, 중복 제거는 RAM을 많이 사용해서 홈랩에서는 신중하게 접근해야 합니다.

    Btrfs (B-tree File System): 리눅스 친화적인 유연성

    Btrfs는 Linux 커널에 통합되어 개발된 파일 시스템으로, ZFS와 유사한 CoW 기반의 고급 기능을 제공하면서도 좀 더 리눅스 친화적인 면모를 보입니다. 제가 처음 Btrfs를 접했을 땐 ‘오, ZFS만큼 강력한데 더 가볍고 유연하네?’ 싶었거든요.

    • 서브볼륨 (Subvolume): 파티션처럼 작동하지만 훨씬 유연하게 생성하고 관리할 수 있습니다. 스냅샷의 기반이 되기도 하고요.
    • 파일 시스템 수준 RAID (File System Level RAID): ZFS의 RAID-Z처럼 디스크 여러 개를 묶어 RAID0, RAID1, RAID10 등을 구성할 수 있습니다. 다만, RAID5/6은 아직 안정성 문제로 권장되지 않는 경우가 많습니다. 제가 한 번 써봤는데, 썩 만족스럽지 못했죠. ⚠️
    • 스냅샷 (Snapshot): ZFS와 마찬가지로 빠르고 효율적인 스냅샷 기능을 제공합니다. 서브볼륨 기반이라 관리도 편리하고요.
    • 데이터 및 메타데이터 체크섬 (Data and Metadata Checksum): ZFS와 유사하게 데이터 무결성을 검증합니다.
    • 온라인 리사이징 (Online Resizing): 파일 시스템 크기를 온라인 상태에서 유연하게 조절할 수 있습니다.

    두 파일 시스템의 주요 특징을 표로 비교해볼까요?

    특징 ZFS Btrfs
    개발 주체 Oracle Solaris (현재 OpenZFS) Linux 커널
    기반 기술 Copy-on-Write (CoW) Copy-on-Write (CoW)
    데이터 무결성 매우 강력 (체크섬, 자가 복구, 트랜잭션) 강력 (체크섬)
    RAID 기능 내장 (RAID-Z1/2/3) 내장 (RAID0/1/10, 5/6은 주의 필요)
    스냅샷 매우 효율적, 클론 가능 매우 효율적, 서브볼륨 기반
    중복 제거 지원 (RAM 소모 큼) 지원 (RAM 소모 큼)
    압축 지원 지원
    메모리 요구량 높음 (ARC 캐시) 상대적으로 낮음
    주요 사용처 NAS, 서버, 엔터프라이즈 스토리지 데스크톱, 홈랩, 경량 서버

    Proxmox에서 ZFS, Btrfs 스토리지 구성하기 (실전 구현)

    이제 Proxmox 환경에서 실제로 두 스토리지를 어떻게 구성할 수 있는지 알아볼 시간입니다. 제가 직접 해보니 Proxmox 설치 시 ZFS 루트 파일 시스템을 선택하는 게 가장 편하더라고요. 설치 단계에서 바로 ZFS 풀을 구성할 수 있거든요. 하지만 이미 설치된 Proxmox에 추가하거나 Btrfs를 사용하려면 몇 가지 수동 설정이 필요합니다.

    ZFS 스토리지 구성 예시 (Proxmox 설치 후 추가)

    Proxmox에 새로운 디스크로 ZFS 풀을 추가하는 과정입니다.

    1. 디스크 확인: 먼저 사용할 디스크의 경로를 확인합니다.
    2. lsblk

      예를 들어 /dev/sdb, /dev/sdc를 사용할 경우입니다.

    3. ZFS 풀 생성: RAID-Z1 (패리티 디스크 1개)으로 풀을 생성합니다.
    4. zpool create -f myzfsraidz1 raidz1 /dev/sdb /dev/sdc /dev/sdd

      여기서 myzfsraidz1은 제가 임의로 정한 풀 이름입니다. 실제 환경에서는 디스크 개수와 보호 수준에 맞춰 RAID-Z2 등을 선택할 수 있습니다.

    5. Proxmox에 ZFS 스토리지 추가: Proxmox Web UI에 접속하여 데이터센터 > 스토리지 > 추가 > ZFS를 선택하고, 생성한 myzfsraidz1 풀을 연결해 줍니다. 콘텐츠 타입(Content type)은 VM 디스크 이미지, 컨테이너, 백업 등 필요한 것을 선택하면 됩니다.

    Btrfs 스토리지 구성 예시 (Proxmox 설치 후 추가)

    Btrfs는 Proxmox의 기본 스토리지 타입으로 직접 지원하지 않아, 일반 디렉토리 스토리지로 활용해야 합니다. 이 부분이 Btrfs를 홈랩에서 쓰려는 분들께는 첫 번째 삽질 포인트가 되더라고요. ⚠️

    1. 디스크 확인 및 Btrfs 파일 시스템 생성:
    2. lsblk
      mkfs.btrfs -f /dev/sde

      /dev/sde는 예시 디스크입니다. 여러 디스크를 Btrfs RAID로 묶으려면 mkfs.btrfs -d raid1 -m raid1 /dev/sde /dev/sdf 와 같이 명령어를 사용합니다.

    3. 마운트 포인트 생성 및 마운트:
    4. mkdir /mnt/mybtrfs
      mount /dev/sde /mnt/mybtrfs
    5. fstab에 등록 (재부팅 시 자동 마운트): UUID를 사용해 등록하는 것이 좋습니다.
    6. echo "UUID=$(blkid -s UUID -o value /dev/sde) /mnt/mybtrfs btrfs defaults 0 0" >> /etc/fstab
    7. Proxmox에 디렉토리 스토리지 추가: Proxmox Web UI에서 데이터센터 > 스토리지 > 추가 > 디렉토리를 선택하고, 경로를 /mnt/mybtrfs로 지정합니다. 콘텐츠 타입은 ZFS와 마찬가지로 필요에 따라 선택합니다.
    Proxmox 웹 인터페이스에서 새로운 ZFS 또는 Btrfs 기반 디렉토리 스토리지를 추가하는 설정 화면입니다.

    Proxmox 웹 인터페이스에서 새로운 스토리지를 추가하는 화면입니다. ZFS 풀이나 Btrfs 서브볼륨을 Proxmox에 연결하는 과정을 보여줍니다.

    삽질 경험: 성능과 데이터 무결성 사이의 고민

    솔직히 말씀드리면, 처음엔 Btrfs의 유연성과 서브볼륨 기능에 혹했었습니다. ‘오, 이거 하나로 다 되겠네!’ 싶었거든요. 그런데 막상 홈랩 환경에서 여러 VM과 컨테이너를 돌려보니, 생각보다 여러 부분에서 차이를 느끼게 되더라고요.

    ZFS는 메모리 사용량(ARC, Adaptive Replacement Cache)이 높은 편입니다. 그래서 Proxmox 호스트의 RAM이 충분하지 않으면 성능 저하가 올 수 있다는 경고를 많이 봤었죠. 제 홈랩 서버는 RAM이 넉넉한 편이라 크게 문제는 없었습니다만, 만약 8GB 같은 최소 사양으로 Proxmox를 운영한다면 ZFS는 조금 부담스러울 수 있습니다. 반면 Btrfs는 상대적으로 메모리 요구량이 낮아 경량 환경에 더 적합할 수 있습니다. 하지만 이게 다가 아니더라고요.

    특히 랜덤 I/O 성능에서 ZFS가 강점을 보였습니다. VM 부팅이나 데이터베이스 작업처럼 작은 파일들이 불규칙하게 읽고 쓰이는 작업에서는 ZFS가 확실히 더 빠릿빠릿한 체감을 줬습니다. SSD 환경에서는 그 차이가 더 두드러지더라고요. Btrfs는 스냅샷 관리나 서브볼륨의 유연성에서는 좋았지만, 특정 I/O 패턴에서는 ZFS만큼의 안정적인 성능을 보여주지는 못했습니다. 특히 Btrfs에서 RAID5/6은 아직 프로덕션 환경에서는 조심해야 한다는 이야기가 많죠? 저도 홈랩에서 시도했다가 데이터 날릴 뻔했습니다. ⚠️ 그래서 Btrfs로 RAID를 구성할 때는 RAID1이나 RAID10을 권장하는 편입니다.

    홈랩 환경에서의 실측 성능 분석 (결과 검증)

    구체적인 벤치마크 수치를 나열하는 것은 의미가 없다고 생각합니다. 왜냐하면 제 홈랩 환경과 여러분의 환경은 디스크 종류, CPU, RAM, 워크로드 등 모든 것이 다르기 때문이죠. 하지만 제가 ‘체감’하고 ‘관찰’한 바는 명확합니다.

    • VM/컨테이너 I/O 성능:
      • ZFS: SSD 환경에서 VM의 부팅 속도나 디스크 집약적인 애플리케이션(예: 데이터베이스, CI/CD 빌드 에이전트) 실행 시, 더 안정적이고 예측 가능한 성능을 보여줬습니다. 특히 ARC 캐시가 활성화되면 읽기 성능이 매우 뛰어났습니다.
      • Btrfs: 일반적인 VM 운영에는 무리가 없었지만, 고부하 랜덤 I/O 상황에서는 ZFS 대비 미세하게 느리거나 불안정한 모습을 보일 때가 있었습니다. 하지만 스냅샷 생성 및 복구는 ZFS보다 빠르고 가벼운 느낌을 줬습니다.
    • 데이터 무결성 및 복구:
      • ZFS: 이건 정말 ‘철옹성’ 같다는 느낌을 받았습니다. 한 번은 불안정한 전원 공급으로 인해 시스템이 갑자기 꺼진 적이 있었는데, ZFS 풀은 아무 문제 없이 잘 복구되더라고요. 체크섬 기반의 자가 복구 기능 덕분인 것 같습니다. zpool scrub 명령어로 주기적으로 풀 상태를 확인하면 마음이 편안해집니다.
      • Btrfs: Btrfs 역시 체크섬을 사용하기 때문에 데이터 무결성이 우수합니다. 하지만 ZFS만큼 ‘강력하다’는 인상은 받지 못했습니다. 커뮤니티에서도 ZFS가 데이터 손상 방지 및 복구 측면에서 좀 더 검증된 안정성을 가지고 있다고 평가하는 분위기입니다.

    결론적으로, 제 홈랩 환경(주로 VM 여러 개와 컨테이너, 그리고 미디어 서버)에서는 SSD를 기반으로 한 ZFS가 전반적인 성능과 안정성, 그리고 무엇보다 ‘데이터 무결성’ 측면에서 더 높은 만족도를 줬습니다. Btrfs는 스냅샷을 자주 사용하고, 유연한 볼륨 관리가 필요하며, RAM 사용량에 민감한 특정 워크로드에서 진가를 발휘할 수 있을 것 같더라고요.

    Proxmox 가상 머신의 디스크 읽기 및 쓰기 I/O 성능를 시간대별로 보여주는 모니터링 그래프입니다.

    Proxmox 가상 머신의 디스크 I/O 성능 모니터링 그래프입니다. ZFS와 Btrfs 스토리지에서 각각 운영되는 VM의 I/O 처리량을 시각적으로 비교할 수 있습니다.

    그래서, 어떤 걸 선택해야 할까요? (결론 및 제안)

    제 경험을 바탕으로 여러분의 홈랩 스토리지 선택에 대한 가이드를 드려볼게요. 정답은 없지만, 어떤 상황에 더 적합한지는 분명히 있습니다.

    • ZFS를 추천하는 경우:
      • ✅ 데이터 무결성과 안정성을 최우선으로 생각한다면 ZFS가 최고의 선택입니다.
      • ✅ Proxmox 호스트의 RAM이 충분하다면 (최소 16GB 이상, 많을수록 좋습니다).
      • ✅ 하드웨어 RAID 컨트롤러 없이 소프트웨어 RAID (RAID-Z)로 강력한 데이터 보호를 원한다면.
      • ✅ VM 디스크 I/O 성능이 중요한 워크로드(데이터베이스, 개발 환경 등)를 운영한다면.
    • Btrfs를 고려할 수 있는 경우:
      • ✅ 유연한 스냅샷 관리와 서브볼륨 기능을 적극적으로 활용하고 싶다면.
      • ✅ Proxmox 호스트의 RAM이 상대적으로 부족한 환경에서 CoW 기반 파일 시스템을 쓰고 싶다면.
      • ✅ 특정 실험적인 워크로드나, 파일 시스템 수준의 RAID1/10을 구성하려 한다면 (단, RAID5/6은 아직 주의).
      • ✅ 스토리지를 자주 확장하거나 축소하는 등 유연한 볼륨 관리가 필요하다면.

    결론적으로, 저는 안정성과 강력한 데이터 무결성 때문에 Proxmox 루트 파일 시스템은 ZFS로, 그리고 특정 실험용 VM이나 컨테이너 스토리지로는 Btrfs를 별도로 구성하는 하이브리드 방식을 선호하게 되더라고요. 이렇게 하면 두 파일 시스템의 장점을 모두 활용할 수 있습니다. 💡

    ZFS와 Btrfs 파일 시스템의 주요 장점과 단점을 직관적으로 비교하는 인포그래픽입니다.

    ZFS와 Btrfs 파일 시스템의 주요 장점과 단점을 한눈에 비교할 수 있는 인포그래픽입니다. 홈랩 환경에서의 스토리지 성택에 도움을 줄 수 있는 핵심 정보를 담고 있습니다.

    마무리하며: 나의 홈랩, 나의 스토리지

    오늘 글을 통해 Proxmox 환경에서 ZFS와 Btrfs 비교를 해봤습니다. 저의 13년차 인프라 엔지니어의 경험과 홈랩에서의 삽질(?)을 바탕으로 이야기했지만, 결국 여러분의 환경과 목적에 맞는 최적의 선택을 하는 것이 가장 중요합니다. 어떤 파일 시스템을 선택하시든, 스냅샷과 백업은 선택이 아닌 필수라는 점, 잊지 마세요!

    이 글이 여러분의 홈랩 스토리지 성능과 데이터 무결성 고민에 작은 도움이 되었으면 좋겠습니다. 혹시 더 궁금한 점이나 여러분의 경험이 있다면 댓글로 공유해 주세요! 다음에는 ZFS ARC 캐싱 최적화에 대해 좀 더 깊이 다뤄볼 예정이니 기대해 주세요!