탐색 링크 건너뛰기 | |
인쇄 보기 종료 | |
Oracle Solaris 11.1 관리: ZFS 파일 시스템 Oracle Solaris 11.1 Information Library (한국어) |
1. Oracle Solaris ZFS 파일 시스템(소개)
3. Oracle Solaris ZFS 저장소 풀 관리
5. Oracle Solaris ZFS 파일 시스템 관리
6. Oracle Solaris ZFS 스냅샷 및 복제 작업
7. ACL 및 속성을 사용하여 Oracle Solaris ZFS 파일 보호
스냅샷은 파일 시스템 또는 볼륨에 대한 읽기 전용 복사본입니다. 즉시 만들 수 있으며 처음에는 풀 내에서 추가 디스크 공간을 사용하지 않습니다. 그러나 활성 데이터 세트 내의 데이터가 변경되면 스냅샷은 기존 데이터를 계속 참조하기 위해 디스크 공간을 사용하므로 디스크 공간이 해제되지 않습니다.
ZFS 스냅샷의 기능은 다음과 같습니다.
시스템 재부트 후에도 지속됩니다.
이론상 최대 스냅샷 수는 264입니다.
스냅샷은 별도의 보조 저장소를 사용하지 않습니다. 스냅샷이 생성된 파일 시스템 또는 볼륨과 동일한 저장소 풀에서 직접 디스크 공간을 사용합니다.
순환 스냅샷은 하나의 기본 단위 작업으로 신속하게 생성됩니다. 스냅샷은 한꺼번에 동시에 생성되거나, 아니면 전혀 생성되지 않습니다. 기본 단위 스냅샷 작업의 이점은 종속 파일 시스템에서도 스냅샷 데이터를 항상 하나의 일관된 시간에 가져온다는 점입니다.
볼륨 스냅샷은 직접 액세스할 수는 있지만, 복제, 백업, 롤백 등은 불가능합니다. ZFS 스냅샷 백업에 대한 자세한 내용은 ZFS 데이터 전송 및 수신을 참조하십시오.
스냅샷은 zfs snapshot 또는 zfs snap 명령으로 생성되는데, 이 명령은 만들 스냅샷의 이름만 인수로 사용합니다. 스냅샷은 이름은 다음과 같이 지정됩니다.
filesystem@snapname volume@snapname
스냅샷 이름은 ZFS 구성 요소 명명 요구 사항의 조건을 충족해야 합니다.
다음 예에서는 friday라는 이름의 tank/home/cindy 스냅샷이 생성됩니다.
# zfs snapshot tank/home/cindy@friday
-r 옵션을 사용하면 모든 종속 파일 시스템에 대한 스냅샷을 만들 수 있습니다. 예를 들면 다음과 같습니다.
# zfs snapshot -r tank/home@snap1 # zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home@snap1 0 - 2.11G - tank/home/cindy@snap1 0 - 115M - tank/home/lori@snap1 0 - 2.00G - tank/home/mark@snap1 0 - 2.00G - tank/home/tim@snap1 0 - 57.3M -
스냅샷에는 수정 가능한 등록 정보가 없습니다. 스냅샷에 적용할 수 있는 데이터 세트 등록 정보도 없습니다. 예를 들면 다음과 같습니다.
# zfs set compression=on tank/home/cindy@friday cannot set property for 'tank/home/cindy@friday': this property can not be modified for snapshots
스냅샷은 zfs destroy 명령을 사용하여 삭제됩니다. 예를 들면 다음과 같습니다.
# zfs destroy tank/home/cindy@friday
데이터 세트의 스냅샷이 있을 경우에는 데이터 세트를 삭제할 수 없습니다. 예를 들면 다음과 같습니다.
# zfs destroy tank/home/cindy cannot destroy 'tank/home/cindy': filesystem has children use '-r' to destroy the following datasets: tank/home/cindy@tuesday tank/home/cindy@wednesday tank/home/cindy@thursday
또한 스냅샷에서 생성된 복제본은 스냅샷을 삭제하기 전에 삭제해야 합니다.
destroy 하위 명령에 대한 자세한 내용은 ZFS 파일 시스템 삭제를 참조하십시오.
보내는 측에 더 이상 있지 않다는 이유로 zfs receive 명령으로 오래된 스냅샷을 무단으로 삭제하는 것과 같은 여러 자동 스냅샷 정책을 사용하는 경우 스냅샷 유지 기능을 사용할 것을 고려해 볼 수 있습니다.
스냅샷 유지 기능을 사용하면 스냅샷이 삭제되지 않습니다. 또한 이 기능을 사용하면 클론이 있는 스냅샷의 경우 zfs destroy -d 명령을 사용하여 마지막 클론을 제거하지 않는 한 해당 스냅샷을 삭제할 수 있습니다. 각 스냅샷에는 연관된 user-reference 카운트가 있는데, 이 카운트는 0으로 초기화되어 있습니다. 이 카운트는 스냅샷이 유지될 때마다 1씩 늘어나고 유지가 해제될 때마다 1씩 줄어듭니다.
이전 Oracle Solaris 릴리스에서는 복제본이 없는 경우 zfs destroy 명령을 통해서만 스냅샷을 삭제할 수 있었습니다. 이 Oracle Solaris 릴리스에서는 스냅샷의 user-reference 카운트도 0이어야 합니다.
스냅샷 또는 스냅샷 세트를 유지할 수 있습니다. 예를 들어, 다음 구문은 tank/home/cindy/snap@1에 유지 태그인 keep을 삽입합니다.
# zfs hold keep tank/home/cindy@snap1
-r 옵션을 사용하면 모든 종속 파일 시스템의 스냅샷을 반복적으로 유지할 수 있습니다. 예를 들면 다음과 같습니다.
# zfs snapshot -r tank/home@now # zfs hold -r keep tank/home@now
이 구문은 단일 참조인 keep을 스냅샷 또는 스냅샷 세트에 추가합니다. 각 스냅샷에는 고유한 태그 이름 공간이 있으며 유지 태그는 해당 공간 내에서 고유해야 합니다. 유지된 스냅샷이 있는 경우 zfs destroy 명령을 사용하여 유지된 해당 스냅샷을 삭제하려고 하면 삭제되지 않습니다. 예를 들면 다음과 같습니다.
# zfs destroy tank/home/cindy@snap1 cannot destroy 'tank/home/cindy@snap1': dataset is busy
유지된 스냅샷을 삭제하려면 -d 옵션을 사용하십시오. 예를 들면 다음과 같습니다.
# zfs destroy -d tank/home/cindy@snap1
zfs holds 명령을 사용하면 유지된 스냅샷 목록이 표시됩니다. 예를 들면 다음과 같습니다.
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Fri Aug 3 15:15:53 2012
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindy@now keep Fri Aug 3 15:15:53 2012 tank/home/lori@now keep Fri Aug 3 15:15:53 2012 tank/home/mark@now keep Fri Aug 3 15:15:53 2012 tank/home/tim@now keep Fri Aug 3 15:15:53 2012 tank/home@now keep Fri Aug 3 15:15:53 2012
zfs release 명령을 사용하면 스냅샷 또는 스냅샷 세트에 대한 유지가 해제됩니다. 예를 들면 다음과 같습니다.
# zfs release -r keep tank/home@now
스냅샷이 해제되면 zfs destroy 명령을 사용하여 스냅샷을 삭제할 수 있습니다. 예를 들면 다음과 같습니다.
# zfs destroy -r tank/home@now
스냅샷 유지 정보는 다음 두 등록 정보로 식별할 수 있습니다.
zfs destroy -d 명령을 사용하여 스냅샷이 삭제 지연으로 표시된 경우 defer_destroy 등록 정보가 on입니다. 그렇지 않은 경우 이 등록 정보는 off입니다.
userrefs 등록 정보가 이 스냅샷에 대한 유지 수로 설정됩니다. 이를 user-reference 카운트라고도 합니다.
스냅샷의 이름을 바꿀 수는 있지만, 스냅샷이 생성된 것과 동일한 풀 및 데이터 세트 내에서 이름을 바꿔야 합니다. 예를 들면 다음과 같습니다.
# zfs rename tank/home/cindy@snap1 tank/home/cindy@today
또한 다음 단축 구문은 위의 구문과 같습니다.
# zfs rename tank/home/cindy@snap1 today
스냅샷이 생성된 풀 및 파일 시스템과 대상 풀 및 파일 시스템이 다르기 때문에 다음 스냅샷 이름 바꾸기 작업은 지원되지 않습니다.
# zfs rename tank/home/cindy@today pool/home/cindy@saturday cannot rename to 'pool/home/cindy@today': snapshots must be part of same dataset
zfs rename - r 명령을 사용하면 스냅샷의 이름을 반복적으로 바꿀 수 있습니다. 예를 들면 다음과 같습니다.
# zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@yesterday 0 - 38K - users/home/lori@yesterday 0 - 2.00G - users/home/mark@yesterday 0 - 1.00G - users/home/neil@yesterday 0 - 2.00G - # zfs rename -r users/home@yesterday @2daysago # zfs list -t snapshot -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home@now 23.5K - 35.5K - users/home@2daysago 0 - 38K - users/home/lori@2daysago 0 - 2.00G - users/home/mark@2daysago 0 - 1.00G - users/home/neil@2daysago 0 - 2.00G -
기본적으로 스냅샷은 zfs list 출력에 더 이상 표시되지 않습니다. zfs list -t snapshot 명령을 사용하여 스냅샷 정보를 표시해야 합니다. 또는 listsnapshots 풀 등록 정보를 사용으로 설정하십시오. 예를 들면 다음과 같습니다.
# zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots off default # zpool set listsnapshots=on tank # zpool get listsnapshots tank NAME PROPERTY VALUE SOURCE tank listsnapshots on local
파일 시스템 스냅샷은 파일 시스템 루트 내의 .zfs/snapshot 디렉토리에서 액세스할 수 있습니다. 예를 들어, tank/home/cindy가 /home/cindy에 마운트된 경우 tank/home/cindy@thursday 스냅샷 데이터는 /home/cindy/.zfs/snapshot/thursday 디렉토리에서 액세스할 수 있습니다.
# ls /tank/home/cindy/.zfs/snapshot thursday tuesday wednesday
다음과 같이 스냅샷을 나열할 수 있습니다.
# zfs list -t snapshot -r tank/home NAME USED AVAIL REFER MOUNTPOINT tank/home/cindy@tuesday 45K - 2.11G - tank/home/cindy@wednesday 45K - 2.11G - tank/home/cindy@thursday 0 - 2.17G -
다음과 같이 특정 파일 시스템용으로 생성된 스냅샷을 나열할 수 있습니다.
# zfs list -r -t snapshot -o name,creation tank/home NAME CREATION tank/home/cindy@tuesday Fri Aug 3 15:18 2012 tank/home/cindy@wednesday Fri Aug 3 15:19 2012 tank/home/cindy@thursday Fri Aug 3 15:19 2012 tank/home/lori@today Fri Aug 3 15:24 2012 tank/home/mark@today Fri Aug 3 15:24 2012
스냅샷이 생성되면 처음에는 디스크 공간이 스냅샷과 파일 시스템 간에 공유됩니다. 이전 스냅샷의 경우에도 마찬가지입니다. 그러나 파일 시스템이 변경되면 이전에 공유되던 디스크 공간을 스냅샷에서만 사용하게 되므로, 스냅샷의 used 등록 정보가 카운트됩니다. 또한 스냅샷을 삭제하면 다른 스냅샷에서 사용하던 고유 디스크 공간의 양(used 등록 정보)이 늘어날 수 있습니다.
스냅샷 공간의 referenced 등록 정보 값은 스냅샷이 만들어졌을 때의 파일 시스템 등록 정보 값과 동일합니다.
used 등록 정보 값이 사용되는 방식에 대한 추가 정보를 확인할 수 있습니다. 새 읽기 전용 파일 시스템 등록 정보가 복제본, 파일 시스템 및 볼륨에 대한 디스크 공간 사용량을 설명합니다. 예를 들면 다음과 같습니다.
$ zfs list -o space -r rpool NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 124G 9.57G 0 302K 0 9.57G rpool/ROOT 124G 3.38G 0 31K 0 3.38G rpool/ROOT/solaris 124G 20.5K 0 0 0 20.5K rpool/ROOT/solaris/var 124G 20.5K 0 20.5K 0 0 rpool/ROOT/solaris-1 124G 3.38G 66.3M 3.14G 0 184M rpool/ROOT/solaris-1/var 124G 184M 49.9M 134M 0 0 rpool/VARSHARE 124G 39.5K 0 39.5K 0 0 rpool/dump 124G 4.12G 0 4.00G 129M 0 rpool/export 124G 63K 0 32K 0 31K rpool/export/home 124G 31K 0 31K 0 0 rpool/swap 124G 2.06G 0 2.00G 64.7M 0
이러한 등록 정보에 대한 설명은 표 5-1을 참조하십시오.
zfs rollback 명령을 사용하면 특성 스냅샷이 생성된 이후에 발생한 파일 시스템의 변경 사항을 모두 무시할 수 있습니다. 파일 시스템의 상태는 스냅샷 생성 시점으로 되돌아갑니다. 기본적으로 이 명령은 가장 최근의 스냅샷만 롤백할 수 있습니다.
이전 스냅샷으로 롤백하려면 중간 스냅샷을 모두 삭제해야 합니다. -r 옵션을 사용하면 이전 스냅샷을 삭제할 수 있습니다.
중간 스냅샷 복제본이 있을 경우 -R 옵션을 지정하여 복제본도 삭제해야 합니다.
주 - 롤백하려는 현재 파일 시스템이 현재 마운트된 경우 마운트가 해제되었다가 다시 마운트됩니다. 파일 시스템을 마운트 해제할 수 없으면 롤백이 실패합니다. -f 옵션은 필요한 경우 파일 시스템을 강제로 마운트 해제합니다.
다음 예에서는 tank/home/cindy 파일 시스템이 tuesday 스냅샷으로 롤백됩니다.
# zfs rollback tank/home/cindy@tuesday cannot rollback to 'tank/home/cindy@tuesday': more recent snapshots exist use '-r' to force deletion of the following snapshots: tank/home/cindy@wednesday tank/home/cindy@thursday # zfs rollback -r tank/home/cindy@tuesday
이 예에서는 이전 tuesday 스냅샷으로 롤백했으므로 wednesday 및 thursday 스냅샷이 삭제되었습니다.
# zfs list -r -t snapshot -o name,creation tank/home/cindy NAME CREATION tank/home/cindy@tuesday Fri Aug 3 15:18 2012
ZFS 스냅샷 차이점은 zfs diff 명령을 사용하여 확인할 수 있습니다.
예를 들어, 다음 두 스냅샷이 생성된다고 가정해 보겠습니다.
$ ls /tank/home/tim fileA $ zfs snapshot tank/home/tim@snap1 $ ls /tank/home/tim fileA fileB $ zfs snapshot tank/home/tim@snap2
예를 들어, 두 스냅샷 간의 차이를 확인하려면 다음과 비슷한 구문을 사용하십시오.
$ zfs diff tank/home/tim@snap1 tank/home/tim@snap2 M /tank/home/tim/ + /tank/home/tim/fileB
출력 결과에서 M은 디렉토리가 수정되었음을 나타냅니다. +는 fileB가 나중 스냅샷에 존재함을 나타냅니다.
다음 출력 결과에서 M은 스냅샷에 포함된 파일의 이름이 변경되었음을 나타냅니다.
$ mv /tank/cindy/fileB /tank/cindy/fileC $ zfs snapshot tank/cindy@snap2 $ zfs diff tank/cindy@snap1 tank/cindy@snap2 M /tank/cindy/ R /tank/cindy/fileB -> /tank/cindy/fileC
다음 표는 zfs diff 명령으로 식별되는 파일 또는 디렉토리 변경 사항을 요약하여 보여줍니다.
|
자세한 내용은 zfs(1M)를 참조하십시오.