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 스냅샷은 커널 수준에서 읽기 전용이므로 표준 멀웨어는 이를 수정하거나 암호화할 수 없습니다. 이는 강력한 방어 계층입니다. 하지만 공격자가 루트 액세스 권한을 얻으면 데이터를 암호화하기 전에 스냅샷을 삭제할 수 있습니다.
스냅샷은 보다 광범위한 전략에서 하나의 계층으로 사용해야 합니다. 오프사이트 복제, 제한된 루트 액세스, 네트워크 수준 보안과 결합하세요. 스냅샷에만 의존하지 마세요.
동영상 추천

ZFS 스냅샷: 스냅샷 생성, 복원 및 자동화 방법
Linux에서 ZFS 스냅샷을 만들고, 복원하고, 자동화하는 방법을 알아보세요. 명령어, 롤백, 보존 정책, Sanoid를 사용한 오프사이트 복제에 대해 다룹니다
10분 소요 - 2026년 5월 5일
VPS에 Redis를 설치하고 사용하는 방법
9분 소요 - 2026년 1월 7일

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