スナップショットは、zfs snapshot コマンドまたは zfs snap コマンドを使って作成します。引数として、作成するスナップショットの名前だけを指定できます。スナップショット名は次のように指定します。
filesystem@snapname volume@snapname
スナップショット名は、ZFS コンポーネントに名前を付けるときの規則の命名要件に従って付ける必要があります。
次の例では、tank/home/cindy の friday という名前のスナップショットが作成されます。
# 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 送受信操作の一部である場合、操作は失敗する可能性があります。このシナリオを回避するには、スナップショットの保留を検討してください。
スナップショットを「保持」すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy –d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。個々のスナップショットには、初期値が 0 のユーザー参照カウントが関連付けられます。このカウントは、スナップショットの保持を設定するたびに 1 増加し、保持を解除するたびに 1 減少します。
以前の Oracle Solaris リリースでは、スナップショットを破棄するには、スナップショットにクローンが存在しない状態で zfs destroy コマンドを使用する必要がありました。この Oracle Solaris リリースでは、さらにスナップショットのユーザー参照カウントが 0 である必要があります。
1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keep を tank/home/cindy/snap@1 に付与します。
# 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
スナップショットの保持情報を示す 2 つの新しいプロパティーがあります。
zfs destroy –d コマンドを使ってスナップショットの遅延破棄が予約されている場合、defer_destroy プロパティーがオンになります。それ以外の場合、このプロパティーはオフです。
userrefs プロパティーの値は、このスナップショットに設定されている保持の数に設定されます。この数のことをユーザー参照カウントとも呼びます。
スナップショットの名前を変更することはできますが、名前を変更するときはそれらが作成された同じプールとデータセットの中で行う必要があります。例:
# 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 -