Solaris 資料一覧

ZFSスナップショット作成/ロールバック/破棄

2008/12/5更新

対応バージョン: 10

ZFSのスナップショットを作成/ロールバック/破棄する手順を示す。

スナップショット作成

ここではrz2/fooストレージプールが/Users/fooにマウントされているものとし、1つファイルを作る度にスナップショットを取り、同じ操作を2回やってみる。

まず任意のファイルを作成する。

# dd if=/dev/random of=/Users/foo/file bs=1024 count=10

# digest -v -a md5 /Users/foo/file
md5 (/Users/foo/file) = e3a8f135f20af45e062a3e8ff5e6267e

次にこのストレージプールのスナップショットを取る。

# zfs snapshot rz2/foo@one

先ほどと同様の手順で任意のファイルを作成する。

# dd if=/dev/random of=/Users/foo/file bs=1024 count=10

# digest -v -a md5 /Users/foo/file
md5 (/Users/foo/file) = e17036a607b01e416d8fc35b19946f79

最初のファイルとはMD5値が違っている。

さらに2つ目のスナップショットを取る。

# zfs snapshot rz2/foo@two

三たび、任意のファイルを作成する。

# dd if=/dev/random of=/Users/foo/file bs=1024 count=10

# digest -v -a md5 /Users/foo/file
md5 (/Users/foo/file) = 1802165c4a2585ec77ead86f50b6238f

今回もMD5値が違っている。

ここまででスナップショット2つ、各スナップショットに任意のファイルが存在する状態になっている。

スナップショットには各ファイルシステムの先頭から.zfs/snapshotでアクセスできるので2つのスナップショットの状態を見てみる。

# ls -l /Users/foo/.zfs/snapshot/{one,two}/file
... 10240 12月  5日  03:20 /Users/foo/.zfs/snapshot/one/file
... 10240 12月  5日  03:21 /Users/foo/.zfs/snapshot/two/file

# digest -v -a md5 /Users/foo/.zfs/snapshot/{one,two}/file
md5 (/Users/foo/.zfs/snapshot/one/file) = e3a8f135f20af45e062a3e8ff5e6267e
md5 (/Users/foo/.zfs/snapshot/two/file) = e17036a607b01e416d8fc35b19946f79

このように各スナップショットにはそれぞれ独立したファイルが保存されているので必要なファイルを簡単に復元することができる。

# cp /Users/foo/.zfs/snapshot/one/file /Users/foo/file.old
# digest -v -a md5 /Users/foo/file*
md5 (/Users/foo/file) = 1802165c4a2585ec77ead86f50b6238f
md5 (/Users/foo/file.old) = e3a8f135f20af45e062a3e8ff5e6267e

スナップショットロールバック

直近のスナップショットをロールバックするには以下のようにする。

# zfs rollback rz2/foo@two

# digest -v -a md5 /Users/foo/file
md5 (/Users/foo/file) = e17036a607b01e416d8fc35b19946f79

より古いスナップショットをロールバックするには-rオプションを付ける。

# zfs rollback -r rz2/foo@one

# digest -v -a md5 /Users/foo/file
md5 (/Users/foo/file) = e3a8f135f20af45e062a3e8ff5e6267e

スナップショット破棄

スナップショットの状態は以下のようにして参照できる。

# zfs list -t snapshot
NAME          USED  AVAIL  REFER  MOUNTPOINT
rz2/foo@one      0      -  35.4K  -
rz2/foo@two      0      -  35.4K  -

スナップショットの破棄はdestroyサブコマンドを使用する。

# zfs destroy rz2/foo@one
# zfs destroy rz2/foo@two

# zfs list -t snapshot
no datasets available

関連資料・記事