スナップショット

スナップショットとは,ある時点のファイルをまるごと保存して置くことを指す.

当時の状態を参照したり,当時の状態に戻したり (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

results matching ""

    No results matching ""