ZFS 스냅샷: 스냅샷 생성, 복원 및 자동화 방법
10분 소요 - 2026년 5월 5일

Linux에서 ZFS 스냅샷을 만들고, 복원하고, 자동화하는 방법을 알아보세요. 명령어, 롤백, 보존 정책, Sanoid를 사용한 오프사이트 복제에 대해 다룹니다
ZFS 스냅샷: 생성, 복원 및 자동화하는 방법
ZFS 스냅샷은 파일 시스템의 읽기 전용, 특정 시점 복사본입니다. 즉시 생성되고 데이터가 변경될 때까지 공간을 차지하지 않으며 몇 초 만에 파일을 롤백하거나 복구할 수 있습니다. 서버, VPS 인스턴스 또는 데이터가 손실되어서는 안 되는 모든 것을 관리한다면 스냅샷은 워크플로우의 일부가 되어야 합니다.
이 글에서는 ZFS 스냅샷의 작동 방식, 사용 방법, 보존을 자동화하여 데이터가 쌓이지 않도록 하는 방법에 대해 설명합니다.
ZFS 스냅샷의 작동 방식
ZFS는 CoW(Copy-on-write) 모델을 사용합니다. 스냅샷을 만들 때 ZFS는 데이터를 복제하지 않습니다. 단순히 블록 포인터 트리의 현재 상태를 기록합니다. 새 쓰기는 빈 블록으로 이동하고 스냅샷은 원본을 계속 참조합니다.
즉, 스냅샷은 데이터 세트 크기에 관계없이 마이크로초 단위로 생성되며, 생성 시 추가 공간을 전혀 소비하지 않습니다. 스냅샷은 해제될 수 있는 원본 블록을 유지하므로 라이브 데이터 세트가 변경될 때만 공간을 사용하기 시작합니다.
이는 전체 파일을 스캔하고 복사하는 rsync나 tar와 같은 파일 수준 백업 도구와는 근본적으로 다릅니다. 10GB 파일 중 4KB를 변경하는 경우, rsync는 전체 파일을 복사합니다. ZFS는 4KB 블록만 저장합니다.
스냅샷도 변경할 수 없습니다. 커널 수준에서 읽기 전용으로 적용되므로 사용자 공간 프로세스(랜섬웨어 포함)가 수정할 수 없습니다. ZFS에 내장된 체크섬 기능과 결합하면 복원 시 데이터 무결성을 확인할 수 있습니다.
스냅샷 만들기
전제 조건
ZFS가 설치되어 있고 풀이 설정되어 있어야 합니다. Ubuntu 20.04 이상에서:
sudo apt update && sudo apt upgrade -y
sudo apt install zfsutils-linux -y
sudo modprobe zfs풀을 만듭니다. 단일 디스크의 경우(일반적으로 VPS에서):
sudo zpool create tank /dev/sdb전용 서버에서 미러링된 설정의 경우 재부팅 후 문제를 방지하려면 장치 이름 대신 디스크 ID를 사용하세요:
sudo zpool create tank mirror /dev/disk/by-id/ata-DISK1 /dev/disk/by-id/ata-DISK2압축 사용(LZ4가 빠르고 효과적임):
sudo zfs set compression=lz4 tank그런 다음 워크로드에 대한 데이터 세트를 만듭니다:
sudo zfs create tank/web
sudo zfs create tank/databases스냅샷 찍기
기본 명령입니다:
sudo zfs snapshot tank/web@before-update타임스탬프가 있는 이름의 경우(cron과 함께 유용):
sudo zfs snapshot tank/db@$(date +%Y%m%d_%H%M%S)모든 하위 데이터세트를 한 번에 캡처하려면 재귀 플래그를 사용합니다:
sudo zfs snapshot -r tank@daily_backup다음으로 확인합니다:
sudo zfs list -t snapshot스냅샷에서 복원하기
개별 파일 복원
모든 ZFS 데이터 세트에는 마운트 지점에 숨겨진 .zfs/snapshot 디렉터리가 있습니다. Ls에는 표시되지 않지만 직접 탐색할 수 있습니다:
ls /tank/web/.zfs/snapshot/before-update/단일 파일을 복원하려면 다음과 같이 하세요:
cp -p /tank/web/.zfs/snapshot/before-update/config/app.conf /tank/web/config/P 플래그를 사용하면 권한과 타임스탬프가 유지됩니다.
전체 데이터 세트 롤백
예를 들어 업그레이드에 실패한 후 모든 것을 되돌릴 필요가 있는 경우:
sudo zfs rollback tank/web@before-updateZFS는 데이터를 복사하는 대신 블록 포인터를 업데이트하므로 거의 즉각적으로 복구할 수 있습니다. 하지만 스냅샷 이후에 변경된 모든 내용이 영구적으로 손실된다는 파괴적인 단점이 있습니다.
대상과 현재 상태 사이에 최신 스냅샷이 존재하면 ZFS는 롤백을 차단합니다. 롤백을 강제로 실행하고 중간 스냅샷을 제거하려면 -r을 사용하세요:
sudo zfs rollback -r tank/db@20260426_090000좋은 습관: 롤백하기 전에 현재(손상된) 상태를 스냅샷하여 필요한 경우 폴백할 수 있도록 하세요.
| 복구 방법 | 속도 | 데이터 손실 위험 | 최상의 대상 |
|---|---|---|---|
.zfs를 통한 파일 복원 | 파일 크기에 따라 다름 | 없음 | 실수로 인한 삭제, 단일 파일 복구 |
| 전체 롤백 | 즉시 | 높음(스냅샷 이후의 모든 변경 내용 손실) | 업그레이드 실패, 시스템 전반의 문제 |
| 테스트용 복제 | 즉시 | 없음(병렬 데이터 세트 생성) | 롤백 커밋 전 확인 |
스냅샷 관리 및 정리하기
스냅샷은 제로 크기에서 시작하지만 그 아래에서 라이브 데이터가 변경됨에 따라 크기가 커집니다. 공간 사용량을 확인합니다:
zfs list -t snapshot -o name,used,refer,creationUSED 열은 해당 스냅샷에 고유한 공간의 양을 보여줍니다. 참조 열에는 스냅샷을 찍었을 때 데이터 세트의 총 크기가 표시됩니다.
스냅샷을 삭제하려면 다음과 같이 하세요:
sudo zfs destroy tank/web@before-update패턴별로도 삭제할 수 있습니다:
sudo zfs destroy tank/web@daily-2026-04-%항상 먼저 드라이러닝하세요:
sudo zfs destroy -nv tank/web@daily-%ZFS는 기술적으로 수백만 개의 스냅샷을 처리할 수 있지만, 데이터 세트당 몇 천 개를 넘으면 성능이 저하됩니다. Zfs list, zfs destroy와 같은 명령은 속도가 눈에 띄게 느려집니다. 보존을 엄격하게 유지하세요.
Sanoid로 리텐션 자동화
Sanoid는 ZFS 스냅샷 생성 및 가지치기를 자동화하기 위한 표준 도구입니다. Sanoid.conf에서 보존 정책을 정의하면 나머지는 자동으로 처리됩니다.
일반적인 프로덕션 구성은 다음과 같습니다:
| 워크로드 유형 | 시간별 | 매일 | 매주 | 월별 |
|---|---|---|---|---|
| 표준 생산 | 24-48 | 30 | 8 | 12 |
| 데이터베이스(높은 이탈률) | 72 | 30 | 12 | 24 |
| 로그 / 낮은 우선순위 | 12-24 | 7 | 0 | 3 |
| 정적 미디어 | 0 | 7 | 0 | 3 |
Sanoid는 또한 자주 매개변수를 통해 1시간 미만의 스냅샷을 지원합니다. 자주 = 96, 자주_기간 = 15로 설정하면 15분마다 스냅샷을 생성합니다.
Cron을 통해 1분마다 또는 15분마다 실행되도록 Sanoid를 예약하면 자동으로 스냅샷을 생성하고 정리합니다.
Zfs send를 사용한 오프사이트 복제
단일 서버의 스냅샷은 우발적인 변경 및 소프트웨어 장애로부터 보호하지만 하드웨어 손실에 대해서는 보호하지 못합니다. 이를 위해 SSH를 통해 zfs 보내기 및 zfs 받기를 사용하여 오프사이트 복제를 수행하세요:
zfs send tank/web@backup | ssh user@remote zfs receive backup/web증분 전송(마지막 스냅샷 이후 변경된 내용만 전송)의 경우:
zfs send -i tank/web@old_snap tank/web@new_snap | ssh user@remote zfs receive backup/webSanoid의 동반 도구인 syncoid는 이 프로세스를 자동화하고 증분 전송, 오류 복구, 로깅을 처리합니다.
랜섬웨어 보호에 대한 참고 사항
ZFS 스냅샷은 커널 수준에서 읽기 전용이므로 표준 멀웨어는 이를 수정하거나 암호화할 수 없습니다. 이는 강력한 방어 계층입니다. 하지만 공격자가 루트 액세스 권한을 얻으면 데이터를 암호화하기 전에 스냅샷을 삭제할 수 있습니다.
스냅샷은 보다 광범위한 전략에서 하나의 계층으로 사용해야 합니다. 오프사이트 복제, 제한된 루트 액세스, 네트워크 수준 보안과 결합하세요. 스냅샷에만 의존하지 마세요.
동영상 추천

Linux 서버 워크로드 최적화를 위한 튜닝된 프로필
GPU, 데이터베이스 및 고대역폭 Linux 서버를 위한 튜닝된 프로필을 선택, 적용 및 사용자 지정하는 방법과 예제 및 Ansible 배포 팁을 제공합니다.
16분 소요 - 2026년 6월 9일
VPS를 위한 Linux OOM 킬러 튜닝: 실용적인 가이드
12분 소요 - 2026년 6월 8일

질문이 있거나 맞춤형 솔루션이 필요하신가요?
유연한 옵션
글로벌 도달 범위
즉시 배포
유연한 옵션
글로벌 도달 범위
즉시 배포