Oracle Solaris ZFS 管理ガイド

ZFS スナップショットを作成および破棄する

スナップショットは、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 スナップショットの保持

異なる自動スナップショットポリシーを実装しており、送信側にもう存在しないという理由で古いスナップショットが zfs receive によって意図せず破棄されてしまう場合、スナップショット保持機能の使用を検討することができます。

スナップショットを「保持」すると、そのスナップショットは破棄されなくなります。また、この機能と zfs destroy -d コマンドを使用することにより、最後のクローンの消去を保留しながら、クローンが存在するスナップショットを削除できます。個々のスナップショットには、初期値が 0 のユーザー参照カウントが関連付けられます。このカウントは、スナップショットの保持を設定するたびに 1 増加し、保持を解除するたびに 1 減少します。

以前の Solaris リリースでは、スナップショットを破棄するには、スナップショットにクローンが存在しない状態で zfs destroy コマンドを使用する必要がありました。この Solaris リリースでは、さらにスナップショットのユーザー参照カウントが 0 である必要があります。

1 つのスナップショットまたはスナップショットの集合を保持できます。たとえば次の構文は、保持タグ keeptank/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 スナップショットの名前を変更する

スナップショットの名前を変更することはできますが、名前を変更するときはそれらが作成された同じプールとデータセットの中で行う必要があります。次に例を示します。


# 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  -