スナップショット
スナップショットとは,ある時点のファイルをまるごと保存して置くことを指す.
当時の状態を参照したり,当時の状態に戻したり (rollback
),当時の状態のコピーを作成したり (clone
)できる.
Oracle Solaris ZFS 管理ガイド "スナップショットとクローンの操作"
http://docs.oracle.com/cd/E19253-01/819-6260/gavvx/index.html
スナップショットの作成
スナップショットは,データストア名@スナップショット名
で表現し,zfs snapshot
コマンドで作成できる.
例として,一つファイルを作成した状態で,スナップショットを作成してみる.
(デフォルトでは所有権がrootになっているため,最初に書き込み権限を付与している)
$ sudo zfs create pool0/hoge
$ sudo chmod 777 /pool0/hoge
$ echo "Hello World" > /pool0/hoge/hello.txt
$ sudo zfs snapshot pool0/hoge@first
スナップショットの確認
zfs list
に-t snapshot
オプションを指定してスナップショットが確認できる.
$ sudo zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
pool0/hoge@first 0 - 49.1K -
スナップショットの参照
スナップショットは,データストアのマウントポイントの下の .zfs/snapshots
に展開されているため,いつでも参照することができる.
$ echo "This file was modified." > /pool0/hoge/hello.txt
$ cat /pool0/hoge/hello.txt
This file was modified.
$ cat /pool0/hoge/.zfs/snapshot/first/hello.txt
Hello World
上記の例ではテキストファイルを変更したが,firstスナップショット以下のファイルは変更前のままであることが確認できる.
スナップショットのロールバック
zfs rollback
コマンドにより,一つ前の時点のスナップショットの状態に戻すことができる.
このコマンドでは,そのスナップショット以降の変更が削除されるため,注意が必要である.
$ sudo zfs rollback pool0/hoge@first
もしも一つ以上前のスナップショットを指定すると次のようなエラーが発生する.
cannot rollback to 'pool0/hoge@first': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
このような場合には,-r
オプションを指定することで,途中のスナップショットを破棄して強制的にロールバックすることができる.
この場合も途中のスナップショットは削除されることに注意されたい.
スナップショットの削除
zfs destroy
コマンドにより,任意の時点のスナップショットを削除することができる.
スナップショットの削除は,その当時の状態に戻せなくなるというだけであり,現在のファイルには影響がない.
$ sudo zfs destroy pool0/hoge@second
クローンの作成
zfs clone
コマンドにより,あるスナップショットを元に,異なるデータセットを作成することができる.
この場合にも単純なスナップショット同様に,その後の変更分のディスクサイズしか消費しない.
sudo zfs clone pool0/hoge@first pool0/fizz