Unix/Open Solaris

ZFS 스냅샷에 대해

ForceCore 2009. 1. 5. 22:57
http://blogs.sun.com/erwann/entry/zfs_on_the_desktop_zfs
http://wikis.sun.com/display/OpenSolarisInfo/How+to+Create+a+ZFS+File+System+Snapshot

스냅샷이 뭔지는 virtual box같은 것을 써보면 알 것이다. 고스트 이미지를 뜨지 않고, 현재 상태를 저장할 수 있다. 그 상태를 저장하는 것도 1초면 된다(1초도 많이 적어준거임;; 눈깜짝할 새에 된다). 원리는? 현재 하드에 저장된 상태를 딱 끊어서 앞으로 일어나는 차이점만 기록하는 것이다… 하지만?... virtualization이 없이도 snapshot을 쓸 수 있다면 정말로 편할 것이다 :D 요즘은 그게 가능하다.

$ mount
로 현재 마운트를 보자.
뭔가 이상하다.

/ on rpool/ROOT/opensolaris read/write/setuid/devices/dev=2d90002 on Thu Jan  1 09:00:00 1970
엉?

$ df –h
이것도 이상하다.
Filesystem            Size  Used Avail Use% Mounted on
rpool/ROOT/opensolaris
                      910G  2.3G  908G   1% /
라고 주장한다.
흠흠…
/dev/sda1 이런 장치가 아니라니, 수상하지 않은가?

그건 왜냐하면… rpool/ROOT/opensolaris는 스냅샷이기 때문이다.

시스템 전체 스냅샷이나 찍어보자...
그 전에... 스냅샷에 대해 조금 알아보긴 해야 할텐데...

$ zfs list
NAME                        USED  AVAIL  REFER  MOUNTPOINT
rpool                      6.48G   907G    72K  /rpool
rpool/ROOT                 2.37G   907G    18K  legacy
rpool/ROOT/opensolaris     2.37G   907G  2.24G  /
rpool/dump                 2.00G   907G  2.00G  -
rpool/export                120M   907G    19K  /export
rpool/export/home           120M   907G  29.5K  /export/home

이런 식으로 나온다. rpool에 있다고 해서 무조건 스냅샷은 아니다...;;

이제 스냅샷을 진짜로, 찍어보자.
$ zfs snapshot rpool/ROOT/opensolaris@20081221
이렇게. 20081221은 찍을 스냅샷 이름이다.

$ zfs list –t snapshot
으로 찍힌 스냅샷을 확인해보자. 혹은... 현존하는 스냅샷이라고 해야 할까?

NAME                              USED  AVAIL  REFER  MOUNTPOINT
rpool/ROOT/opensolaris@install    131M      -  2.21G  -
rpool/ROOT/opensolaris@20081221  70.5K      -  2.24G  -

아직 설정한 것이 얼마 안 되어서 용량이 작다. :D /etc를 좀 깨작깨작 건드렸을 뿐이다.



여기서 시간이 약간 흘러서, 시스템 설정이 정말 "약간" 바뀌었다. 전에 찍은 200812212 스냅샷은 없애되, 현재의 설정이 바뀐 상태를 유지하고 싶긴 했다. 어떻게 해야 하지?

zfs destroy 명령어로 하면 다행해도, 현 상태가 유지되면서 스냅샷이 제거 되었다. 휴우… 이런 실험은 초반에 해볼 필요가 있다. 괜히, destory하면, 스냅샷을 찍은 그 상태까지 “roll back”된다면 나중에 치명적인 낭패를 볼 수도 있는 그런 사항이다.



이제 파괴 실험을 해보자. 스냅샷을 우선 찍어둔다.
시스템 전체 스냅샷을 미리 찍어놓고, perl라이브러리가 있는 디렉토리를 rm -rf로 테러하자.
복구하면 다시 perl이 다시 살아나는 것은 확인할 수 있다.

이제... 부분적인 파괴와 복구가 되는지도 테스트해보자.

새로운 부분을... "create"를 해보자.
root@docu:/export/home# ls
pressit  force
root@docu:/export/home# zfs create rpool/export/home/data
root@docu:/export/home# ls
data  pressit  force
root@docu:/export/home#

이제 data안에 음악을 넣고
/usr/perl5는 rm -rf로 통째 테러를 했다.
빈 data를 스냅샷찍고 거기 음악을 넣었다.

root@docu:/# zfs rollback rpool/ROOT/opensolaris@20081221

음악은 살아있다 (!)

그렇다. 독립해 나오는 것이다. 우왕 ㅋ 굳 ㅋ
이런 식의 create 명령어면
DB, 홈페이지, 메일 을 따로따로 관리하여
스냅샷을 따로따로 찍고, 롤백하고 할 수 있는거다.

이상으로 zfs 스냅샷 기능 테스트가 끝났다.