커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
*
HanIRC의 #coffeenix 방
[
장비 및 회선 후원
]
> Forum <
IT 일정
N
e
w
!
자동화 프로젝트
HOME
>
시스템 관리 / 서버운영
>
디스크 관리 / 파일시스템 / mount
도움말
검색 :
사이트
WHOIS
웹서버 종류
ZFS 파일시스템의 snapshot(스냅샷) 기능
작성일 : 2010/08/02 18:14
글쓴이 : 좋은진호 (
http://coffeenix.net/
)
조회수 : 21779
[
이전화면
/
수정
] 비밀번호 :
제 목 : ZFS 파일시스템의 snapshot(스냅샷) 기능
작성자 : 좋은진호(truefeel,
http://coffeenix.net/
)
작성일 : 2010.6.21(월)
수정일 : 2010.8.2(월) FreeBSD에서 ZFS 버전 정보 추가
ZFS 파일시스템은 snapshot(스냅샷) 기능을 제공하여, 원하면 언제든지 snapshot시점으로 복원할 수 있다. 명령어 한줄로 snapshot을 만들고, 명령어 한줄로 복원한다. snapshot 생성을 매일 1회 이상 자동으로 실행되도록 해주면, 데이터 복원에 유용할 것이다.
참고로 FreeBSD 8.0은 ZFS v13을, 8.1은 v14를 지원한다. FreeBSD 8.2 또는 9.0에서는 v15를 지원할 예정이다.
ZFS v15는 Solaris 10 update 8과 FreeBSD간의 호환성이 좋아졌으며, ZFS파일시스템에 php 코드가 있을경우에 기존보다 15~20%정도 RPS가 향상되었다.
1. snapshot 만들기
ZFS 파일시스템은 snapshot 기능을 지원한다. 따라서 파일 시스템의 백업과 특정 시점으로의 rollback(롤백)이 쉽다.
이론적으로 snapshot은 최대 2의 64제곱개까지 만들 수 있다. snapshot은 같은 스토리지 풀(파일시스템, 볼륨)의 공간을 사용한다.
snapshot을 만들어보자. snapshot시에 형식은 '파일시스템@snapshot명' 또는 '볼륨@snapshot명'이다. snapshot 이름은 기존 이름과 중복되지 않으면 임의로 만들면 된다.
#
zfs snapshot data/log@2010_0621_1740_Mon
snapshot이름은 개인적으로 '년월일' 형식을 선호한다. snapshot 목록을 볼 때, 별도 속성 옵션(-o creation)을 줘야 생성일자를 볼 수 있는 불편함 때문이다. 좀 더 직관적으로 표기하기위해 요일까지 붙여줘도 좋다.
2. snapshot 확인하기
생성된 snapshot 목록을 살펴보자. 생성일시를 알고 싶다면 -o creation의 추가 옵션이 필요하다.
#
zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
... 생략 ...
data/log@2010_0619_0701_Sat 26K - 20.9M -
data/log@2010_0620_0701_Sun 30K - 21.5M -
data/log@2010_0621_0701_Mon 31K - 21.5M -
data/log@2010_0621_1740_Mon 0 - 28.5M -
#
#
zfs list -o name,used,referenced,creation -t snapshot
NAME USED REFER CREATION
... 생략 ...
data/log@2010_0619_0701_Sat 26K 20.9M Sat Jun 19 7:01 2010
data/log@2010_0620_0701_Sun 30K 21.5M Sun Jun 20 7:01 2010
data/log@2010_0621_0701_Mon 31K 21.5M Mon Jun 21 7:01 2010
data/log@2010_0621_1740_Mon 0 28.5M Mon Jun 21 17:40 2010
스토리지 풀의 history 정보에서도 snapshot 생성 일시를 확인할 수 있다. history에서는 스토리지 풀 생성, 삭제, 그리고 snapshot 생성, 복구, 삭제 등 모든 변경 정보를 확인할 수 있다.
#
zpool history
History for 'data':
2010-06-08.10:13:05 zpool create data amrd0s1h
2010-06-08.10:13:18 zfs create data/log
... 생략 ...
2010-06-20.07:01:02 zfs snapshot data/log@2010_0620_0701_Sun
2010-06-21.07:01:02 zfs snapshot data/log@2010_0621_0701_Mon
2010-06-21.17:40:57 zfs snapshot data/log@2010_0621_1740_Mon
snapshot의 각종 속성 정보(Property)를 확인해보자.
#
zfs get all data/log@2010_0621_0701_Mon
NAME PROPERTY VALUE SOURCE
data/log@2010_0621_0701_Mon type snapshot -
data/log@2010_0621_0701_Mon creation Mon Jun 21 7:01 2010 -
data/log@2010_0621_0701_Mon used 31K -
data/log@2010_0621_0701_Mon referenced 21.5M -
data/log@2010_0621_0701_Mon compressratio 1.00x -
data/log@2010_0621_0701_Mon devices on default
data/log@2010_0621_0701_Mon exec on default
data/log@2010_0621_0701_Mon setuid on default
data/log@2010_0621_0701_Mon shareiscsi off default
data/log@2010_0621_0701_Mon xattr on default
data/log@2010_0621_0701_Mon version 3 -
data/log@2010_0621_0701_Mon utf8only off -
data/log@2010_0621_0701_Mon normalization none -
data/log@2010_0621_0701_Mon casesensitivity sensitive -
data/log@2010_0621_0701_Mon nbmand off default
data/log@2010_0621_0701_Mon primarycache all default
data/log@2010_0621_0701_Mon secondarycache all default
3. snapshot rollback하기
rollback은 snapshot 방법과 동일하다. 특정 시점으로 되돌리고 싶으면 해당 'snapshot명'을 지정하기만 하면 된다.
#
zfs rollback data/log@2010_0621_1740_Mon
cannot rollback to 'data/log@2010_0621_1740_Mon': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
data/log@2010_0621_1750_Mon
data/log@2010_0621_1813_Mon
위의 경우는 data/log@2010_0621_1740_Mon 스냅샷 이후(즉, 보다 최근)에 2개의 스냅샷이 존재하기 때문에 나오는 메시지이다. 이를 무시하고 롤백하려면 -r 옵션(Recursively)을 주면 된다.
#
zfs rollback -r data/log@2010_0621_1740_Mon
4. snapshot 지우기
'zfs destroy snapshot명' 형식으로 snapshot을 지운다.
#
zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
... 생략 ...
data/log@2010_0621_1824_Mon 0 - 28.5M -
data/log@2010_0621_1825_Mon 0 - 28.5M -
#
zfs destroy data/log@2010_0621_1825_Mon
#
zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
... 생략 ...
data/log@2010_0621_1824_Mon 0 - 28.5M -
#
5. snapshot을 파일로 저장 (send & receive)
zfs send 명령으로 snapshot을 파일로 저장한다. 저장된 파일은 별도 서버에 보관해두고, 필요시 복구할 수 있다.
#
zfs send data/log@2010_0621_0701_Mon > /data/snapshot_2010_0621
#
ls -l /data
drwxr-xr-x 49 root wheel 113 Jun 21 15:57 log
-rw-r--r-- 1 root wheel 20139288 Jun 21 16:47 snapshot_2010_0621
파일로 보관했던 snapshot을 복구하려면 어떻게 할까? 현시점의 파일시스템을 다른 이름으로 바꾼다. 그리고, 새로운 파일시스템으로 snapshot을 복구한다.
[ 이름 변경 ]
#
zfs rename data/log data/log_old
#
zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 99.6M 27.7G 67.8M /data
data/log_old 31.0M 27.7G 28.5M /data/log_old
[ snapshot파일에서 복구 ]
#
zfs receive data/log < /data/snapshot_2010_0621
#
zfs list
NAME USED AVAIL REFER MOUNTPOINT
data 128M 27.7G 67.8M /data
data/log 28.5M 27.7G 28.5M /data/log
data/log_old 31.0M 27.7G 28.5M /data/log_old
6. snapshot 생성, 조회하는 간단한 스크립트
snapshot명을 날짜형식(예. data/log@YYYY_MMDD_HHmm_요일)으로 생성해주는 간단한 스크립트를 만들었다. snapshot 목록 볼 때, 여러 옵션 넣는게 귀찮은데, 이 것도 쉽게 할 수 있도록 했다.
- 목록 조회 : ./zfs_snapshot.sh list
- 생성 : ./zfs_snapshot.sh create data/log
- 속성 조회 : ./zfs_snapshot.sh status data/log@2010_0621_0701_Mon
*
snapshot 스크립트
내려받기
#!/bin/sh
#
# zfs snapshot 스크립트
# - list(조회), create(생성), status(상세 속성)
#
# 2010.6.18(금)
# by 좋은진호(truefeel,
http://coffeenix.net/
)
PATH=$PATH:/sbin
case "$1" in
# snapshot 목록
"list" )
zfs list -o name,used,referenced,creation -t snapshot
;;
# snapshot 만들기
"create" )
DATE=`date +'%Y_%m%d_%H%M_%a'`
if [ "$2" = "" ]; then
echo "Usage: $0 $1
"
echo "Exam: $0 $1 data/log"
echo
zfs list
exit 1
fi
zfs snapshot -r data/log@$DATE
;;
# snapshot 상세 속성 조회
"status" )
if [ "$2" = "" ]; then
$0 list
echo
echo "Usage: $0 $1
"
exit 1
fi
zfs get all $2
;;
*)
echo "Usage: $0 {list|create|status}"
exit 1
esac
매일 아침 07:01분에 data/log 파일시스템에 대한 snapshot을 만드려면 다음과 같이 /etc/crontab에 넣어주면 된다.
1 7 * * * root /root/bin/zfs_snapshot.sh create data/log > /dev/null 2>&1
7. 참고자료
1) ZFS 관련
* FreeBSD 7.x에서 ZFS 사용 & 성능 (2009.2, 글 좋은진호)
http://coffeenix.net/board_view.php?bd_code=1662
* ZFS, Btrfs 파일시스템에 대해 (2009.9)
http://coffeenix.net/bbs/viewtopic.php?p=5816#5816
* FreeBSD 8.0 릴리즈 (공식발표) (2009.11)
http://coffeenix.net/bbs/viewtopic.php?p=5963#5963
* All welcome ZFS v15 in FreeBSD
http://ivoras.sharanet.org/blog/tree/2010-07-13.all-welcome-zfs-v15-in-freebsd.html
2) ZFS snapshot 관련
* Chapter 6. Working With ZFS Snapshots and Clones
http://docs.huihoo.com/opensolaris/solaris-zfs-administration-guide/html/ch06.html
* ZFS Best Practices Guide
http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide
* 스토리지 유틸리티 실습: ZFS 스냅샷과 Amazon S3 연동
http://blog.sdnkorea.com/blog/545
커피닉스 카페 최근 글
[08/25]
#gpt_question_subje
[08/20]
From what I've seen
[08/14]
сайт
[06/16]
[질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
[04/22]
Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
[10/20]
Cross Compiler 깔
[07/14]
SSL АО
[04/26]
Re: 도스화면 원격조종 여부
[04/25]
도스화면 원격조종 여부
[10/30]
Cshell에서 난수 설정
[10/23]
공항철도주식회사 SE 구인 件
[01/26]
Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/25]
wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
[01/11]
특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
[08/01]
DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
N
e
w
! 최근에 등록한 페이지
KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
오픈캐스케이드 캐드 (OpenCASCADE CAD)
QCad for Windows --- GNU GPL (Free Software)
The Hello World Collection
IPMI를 활용한 리눅스 서버관리
DNS 설정 검사
nagiosgraph 설치 방법
Slony-I 설치 방법 (postgresql replication tool)
Qmail기반의 Anti spam 시스템 구축하기
clusterssh
[ 함께하는 사이트 ]
운영진 :
좋은진호(truefeel)
, 야수(yasu), 범냉이, sCag
2003년 8월 4일~