← Back to list

ZFS 스냅샷 기반 데이터 마이그레이션

ZFS 스냅샷을 이용한 ZFS 서버 간 데이터 마이그레이션

해달 · 2025-08-30 13:53 · 0 claps · 5.5 min read
#linux #redhat-linux #rhel-8 #zfs #zfs-snapshot
Open on Medium ↗
Wiki topics: 🔓 · Open Source

ZFS 스냅샷 기반 데이터 마이그레이션

기존 스토리지 환경에서는 서버 간 데이터 이동은 파일 복사 또는 Rsync 기반으로 수행되었습니다. 그러나 이 방식은 전송 중 장애가 발생하면 데이터가 손상되거나 중단된 시점부터 다시 복사해야 하는 불편함이 있습니다. ZFS 스냅샷은 특정 시점의 파일 시스템 상태를 그대로 저장하므로, 데이터의 안정적인 복제가 가능합니다. 이를 통해 관리자는 서버 간 데이터 이동을 안전하게 수행할 수 있고, 운영 중인 서비스의 데이터 일관성을 유지할 수 있도록 설계했습니다.

ZFS(Zettabyte File System)

  • 기존 Unix 파일 시스템(ext4, xfs) 대체하는 차세대 파일 시스템
  • 디스크를 zpool이라는 단위로 관리하며, 논리적 볼륨 관리, Quota, NFS 공유 기능 → LVM과 NFS 장점 통합
  • 저장 장치를 추가하면 zpool 파일 시스템에서 즉시 새 공간 사용 가능

ZFS 스냅샷(Snapshot)

  • ZFS Dataset의 특정 시점 상태를 읽기 전용 가상 이미지로 저장
  • 필요할 때, 해당 시점으로 바로 롤백 가능 → 데이터 손실이나 장애 발생 시 복원 가능

ZFS 스냅샷 명령어

  • zfs send -r [스냅샷]: 스냅샷 스트림 생성
  • -r: 스냅샷 하위 Dataset 포함
  • zfs receive -F [풀]: 풀에 스냅샷으로 복원
  • *zfs receive -R -I [스냅샷]: 생성된 스트림을 다른 서버/풀로 수신
  • -R: 풀 및 하위 데이터셋까지 모두 포함
  • -i/-I: 증분 스냅샷 전송
  • zfs send -i [이전스냅샷] [현재스냅샷]: 증분 스냅샷 전송

*-R: 풀 및 하위 데이터셋까지 모두 포함

*-i/-I: 증분 스냅샷 전송

마이그레이션(Migration)

  • 원본 서버 데이터를 다른 서버에 그대로 이전
  • *zpool과 그 하위 Dataset 전체를 다른 서버로 전송

전송 도중 데이터 변경에도 일관성 유지 가능

송신 ZFS 서버 설정

시나리오

  • 송신 서버: /user이 mypool01/testuser01에 마운트됨
  • 수신 서버: /user이 mypool02/testuser01에 마운트됨

Export 설정

  1. 송신 측 export 세팅
vi /etc/exports
  • ADD-TO
/zfs [private_ip/cidr](rw,sync,no_root_squash)
  1. 변경사항 반영
exportfs -ra
  1. 현재 Export 상태 확인
exportfs -v

수신 ZFS 서버 설정

사전 설정

  1. 디스크/파티션 연결 및 준비
  • EBS 연결

ZFS 설치

  1. EPEL 리포지토리 등록
dnf install epel-release -y
  1. 커널 버전 업데이트
dnf update kernel kernel-devel kernel-headers -y
  1. 커널 버전 변경 적용
reboot
  1. ZFS 리포지토리 설치
dnf install https://zfsonlinux.org/epel/zfs-release-2-8$(rpm — eval “%{dist}”).noarch.rpm -y
  1. ZFS kmod 설치
dnf config-manager — disable zfs
dnf config-manager — enable zfs-kmod
  1. ZFS 패키지 설치
dnf install zfs -y
  1. ZFS 리포지토리 활성화 확인
dnf repolist all | grep zfs

kmod 방식으로 커널 모듈 설치하도록 설정

  • 출력 확인

  1. ZFS 패키지 설치
dnf install zfs -y
  1. 부팅 시 ZFS 커널 자동 로드 설정
echo zfs > /etc/modules-load.d/zfs.conf

OpenZFS 커널 모듈은 ZFS Pool이 감지되면 자동 로드

  1. ZFS 모듈 확인
modprobe zfs
  1. 모듈 로드 확인
lsmod | grep zfs
  • 출력 확인

zpool 생성

  1. 볼륨 연결 확인
lsblk
  • 출력 확인

  1. 파일 시스템 유형 확인
file -s /dev/nvme1n1
  • 출력 확인

data 출력 시, 해당 디스크에 작성된 데이터가 없다는 의미

  1. Zpool 생성
zpool create mypool02 /dev/nvme1n1 -m /user
  1. Zpool 생성확인
df -h
  • 출력 확인

  1. Zpool 요약 정보 확인
zpool list
  • 출력 확인

  1. Zpool 상세 정보 확인
zpool status
  • 출력 확인

사용자 생성

  1. 사용자 생성
adduser testuser01
  1. 사용자 생성 확인
cat /etc/passwd | grep test
  • 출력 확인

ZFS Migration

전체 백업

  1. 원본 서버에서 Dataset + 스냅샷 전체 전송
zfs snapshot -r mypool01@testuser01
  1. 스냅샷 확인
zfs list -t snapshot
  • 출력 확인

  1. 스냅샷 전송
zfs send -R mypool01/testuser01@snap01 | ssh [private_ip] zfs recv mypool02/testuser01
  • 다중 Dataset 전송 시
for x in $(ls /zfs); do zfs send -R mypool01/”$x”@migration | ssh [private_ip] zfs recv mypool01/”$x” done
  1. 클라이언트에서 스냅샷 전송 확인
zfs list -t snapshot
  • 출력 확인

  1. Dataset 확인
cd /user/testuser01
  1. 데이터 확인
ls -lart
  • 출력 확인


메타데이터
post_id
307e301df6cf
slug
zfs-스냅샷-기반-데이터-마이그레이션-307e301df6cf
url
https://medium.com/@haedall/zfs-%EC%8A%A4%EB%83%85%EC%83%B7-%EA%B8%B0%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-307e301df6cf
canonical_url
https://medium.com/@haedall/zfs-%EC%8A%A4%EB%83%85%EC%83%B7-%EA%B8%B0%EB%B0%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-307e301df6cf
author_url
https://medium.com/@haedall
status
ok
fetched_at
2026-06-24 16:30:55