|
Á¦ ¸ñ : 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
|