ZFS 스냅샷 기반 데이터 마이그레이션
ZFS 스냅샷을 이용한 ZFS 서버 간 데이터 마이그레이션
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 설정
- 송신 측 export 세팅
vi /etc/exports
- ADD-TO
/zfs [private_ip/cidr](rw,sync,no_root_squash)
- 변경사항 반영
exportfs -ra
- 현재 Export 상태 확인
exportfs -v
수신 ZFS 서버 설정
사전 설정
- 디스크/파티션 연결 및 준비
- EBS 연결
ZFS 설치
- EPEL 리포지토리 등록
dnf install epel-release -y
- 커널 버전 업데이트
dnf update kernel kernel-devel kernel-headers -y
- 커널 버전 변경 적용
reboot
- ZFS 리포지토리 설치
dnf install https://zfsonlinux.org/epel/zfs-release-2-8$(rpm — eval “%{dist}”).noarch.rpm -y
- ZFS kmod 설치
dnf config-manager — disable zfs
dnf config-manager — enable zfs-kmod
- ZFS 패키지 설치
dnf install zfs -y
- ZFS 리포지토리 활성화 확인
dnf repolist all | grep zfs
kmod 방식으로 커널 모듈 설치하도록 설정
- 출력 확인

- ZFS 패키지 설치
dnf install zfs -y
- 부팅 시 ZFS 커널 자동 로드 설정
echo zfs > /etc/modules-load.d/zfs.conf
OpenZFS 커널 모듈은 ZFS Pool이 감지되면 자동 로드
- ZFS 모듈 확인
modprobe zfs
- 모듈 로드 확인
lsmod | grep zfs
- 출력 확인

zpool 생성
- 볼륨 연결 확인
lsblk
- 출력 확인

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

data 출력 시, 해당 디스크에 작성된 데이터가 없다는 의미
- Zpool 생성
zpool create mypool02 /dev/nvme1n1 -m /user
- Zpool 생성확인
df -h
- 출력 확인

- Zpool 요약 정보 확인
zpool list
- 출력 확인

- Zpool 상세 정보 확인
zpool status
- 출력 확인

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

ZFS Migration
전체 백업
- 원본 서버에서 Dataset + 스냅샷 전체 전송
zfs snapshot -r mypool01@testuser01
- 스냅샷 확인
zfs list -t snapshot
- 출력 확인

- 스냅샷 전송
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
- 클라이언트에서 스냅샷 전송 확인
zfs list -t snapshot
- 출력 확인

- Dataset 확인
cd /user/testuser01
- 데이터 확인
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