スナップショットは、zfs snapshot コマンドを使って作成します。引数として、作成するスナップショットの名前だけを指定できます。スナップショット名は次のように指定します。
filesystem@snapname volume@snapname |
スナップショット名は、「ZFS コンポーネントに名前を付けるときの規則」の命名要件に従って付ける必要があります。
次の例では、tank/home/ahrens のスナップショットが friday という名前で作成されます。
# zfs snapshot tank/home/ahrens@friday |
すべての子孫ファイルシステムのスナップショットを作成するには、-r オプションを使用します。次に例を示します。
# zfs snapshot -r tank/home@now # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT rpool/ROOT/zfs2BE@zfs2BE 78.3M - 4.53G - tank/home@now 0 - 26K - tank/home/ahrens@now 0 - 259M - tank/home/anne@now 0 - 156M - tank/home/bob@now 0 - 156M - tank/home/cindys@now 0 - 104M - |
スナップショットには、変更できるプロパティーはありません。また、データセットのプロパティーをスナップショットに適用することもできません。次に例を示します。
# zfs set compression=on tank/home/ahrens@now cannot set compression property for 'tank/home/ahrens@now': snapshot properties cannot be modified |
スナップショットを破棄するには、zfs destroy コマンドを使用します。次に例を示します。
# zfs destroy tank/home/ahrens@now |
データセットのスナップショットが存在する場合、そのデータセットを破棄することはできません。次に例を示します。
# zfs destroy tank/home/ahrens cannot destroy 'tank/home/ahrens': filesystem has children use '-r' to destroy the following datasets: tank/home/ahrens@tuesday tank/home/ahrens@wednesday tank/home/ahrens@thursday |
また、スナップショットからクローンが作成されている場合は、スナップショットを破棄する前にクローンを破棄する必要があります。
destroy サブコマンドの詳細については、「ZFS ファイルシステムを破棄する」を参照してください。
異なる自動スナップショットポリシーを実装しており、送信側にもう存在しないという理由で古いスナップショットが zfs receive によって意図せず破棄されてしまう場合、スナップショット保持機能の使用を検討することができます。
スナップショットを「保持」すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy -d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。個々のスナップショットには、初期値が 0 のユーザー参照カウントが関連付けられます。このカウントは、スナップショットの保持を設定するたびに 1 増加し、保持を解除するたびに 1 減少します。
以前の Solaris リリースでは、スナップショットを破棄するには、スナップショットにクローンが存在しない状態で zfs destroy コマンドを使用する必要がありました。この Solaris リリースでは、さらにスナップショットのユーザー参照カウントが 0 である必要があります。
1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keep を tank/home/cindys/snap@1 に付与します。
# zfs hold keep tank/home/cindys@snap1 |
-r オプションを使用すると、すべての子孫ファイルシステムのスナップショットを再帰的に保持できます。次に例を示します。
# zfs snapshot -r tank/home@now # zfs hold -r keep tank/home@now |
この構文は、単一の参照 keep を特定のスナップショットまたはスナップショットの集合に追加します。個々のスナップショットには独自のタグ名前空間があり、その空間内で保持タグが一意である必要があります。スナップショットに保持が設定されている場合、保持されたそのスナップショットを zfs destroy コマンドを使って破棄しようとしても失敗します。次に例を示します。
# zfs destroy tank/home/cindys@snap1 cannot destroy 'tank/home/cindys@snap1': dataset is busy |
保持されたスナップショットを破棄する場合は、-d オプションを使用します。次に例を示します。
# zfs destroy -d tank/home/cindys@snap1 |
保持されたスナップショットの一覧を表示するには、zfs holds コマンドを使用します。次に例を示します。
# zfs holds tank/home@now NAME TAG TIMESTAMP tank/home@now keep Thu Jul 15 11:25:39 2010 |
# zfs holds -r tank/home@now NAME TAG TIMESTAMP tank/home/cindys@now keep Thu Jul 15 11:25:39 2010 tank/home/mark@now keep Thu Jul 15 11:25:39 2010 tank/home@now keep Thu Jul 15 11:25:39 2010 |
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/cindys@083006 tank/home/cindys@today |
また、次のショートカット構文は前の構文と同等です。
# zfs rename tank/home/cindys@083006 today |
次のようなスナップショット名の変更操作はサポートされていません。ターゲットのプールとファイルシステムの名前が、スナップショットの作成されたプールとファイルシステムと異なるためです。
# zfs rename tank/home/cindys@today pool/home/cindys@saturday cannot rename to 'pool/home/cindys@today': snapshots must be part of same dataset |
zfs rename -r コマンドを使用すると、スナップショットの名前を再帰的に変更することができます。次に例を示します。
# zfs list NAME USED AVAIL REFER MOUNTPOINT users 270K 16.5G 22K /users users/home 76K 16.5G 22K /users/home users/home@yesterday 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@yesterday 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@yesterday 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@yesterday 0 - 18K - # zfs rename -r users/home@yesterday @2daysago # zfs list -r users/home NAME USED AVAIL REFER MOUNTPOINT users/home 76K 16.5G 22K /users/home users/home@2daysago 0 - 22K - users/home/markm 18K 16.5G 18K /users/home/markm users/home/markm@2daysago 0 - 18K - users/home/marks 18K 16.5G 18K /users/home/marks users/home/marks@2daysago 0 - 18K - users/home/neil 18K 16.5G 18K /users/home/neil users/home/neil@2daysago 0 - 18K - |