読者です 読者をやめる 読者になる 読者になる

FreeBSDでzfsを試してみた その3

今回はスナップショットを使ってみる。

とりあえず普通にストレージプールとディレクトリの作成。

# zpool create -m /zdevel zpool0 da0s1 da1s1
# zfs create zpool0/hamaco

スナップショット作成

zfs snapshotコマンドでスナップショットを作成できる。適当にファイルを作ってスナップショットを作成してみる。

# mkfile 64M /zdevel/hamaco/hogehoge
# zfs snapshot zpool0/hamaco@first

ストレージプール名@スナップショット名という形で指定する。出来上がったスナップショットの中身を見る場合は、以下の様にスナップショットを作成したディレクトリの下にあるzfsディレクトリを見れば良い。

# ls /zdevel/hamaco/.zfs/snapshot/first
hogehoge

スナップショットを作成しても、ストレージプールの使用量に変化はない。もちろんスナップショットなのでファイルの追加とかの操作は一切出来ない。

# zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zpool0               64.2M   912M    19K  /zdevel
zpool0/hamaco        64.0M   912M  64.0M  /zdevel/hamaco
zpool0/hamaco@first      0      -  64.0M  -

元のディレクトリに何かファイルを追加してもスナップショットの中身には全く変化なし。ただ、何か情報が増えたのか微妙にUSEDは増えている。それにしてもzfs listで見ると、容量表示がおかしい。

shana# mkfile 32M /zdevel/hamaco/fugafuga
shana# zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zpool0               88.6M   887M    19K  /zdevel
zpool0/hamaco        88.4M   887M  88.4M  /zdevel/hamaco
zpool0/hamaco@first    17K      -  64.0M  -

# df -h /zdevel /zdevel/hamaco /zdevel/hamaco/.zfs/snapshot/first
Filesystem            Size    Used   Avail Capacity  Mounted on
zpool0                880M      0B    880M     0%    /zdevel
zpool0/hamaco         976M     96M    880M    10%    /zdevel/hamaco
zpool0/hamaco@first   944M     64M    880M     7%    /zdevel/hamaco/.zfs/snapshot/first
# ls /zdevel/hamaco
fugafuga hogehoge

# ls /zdevel/hamaco/.zfs/snapshot/first
hogehoge

とりあえず、この時点でもスナップショットを作成しておく。

# zfs snapshot zpool0/hamaco@second
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
zpool0                96.2M   880M    19K  /zdevel
zpool0/hamaco         96.1M   880M  96.0M  /zdevel/hamaco
zpool0/hamaco@first     17K      -  64.0M  -
zpool0/hamaco@second      0      -  96.0M  -

スナップショットからの復元

zfs rollbackコマンドでスナップショットから復元が出来る。この時に指定したスナップショットよりも新しいスナップショットがある場合警告が出る。

# zfs rollback zpool0/hamaco@first
cannot rollback to 'zpool0/hamaco@first': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
zpool0/hamaco@second
  • rオプションを付ければ復元することが出来るが、新しいスナップショットは全て消えてしまう。
# zfs rollback -r zpool0/hamaco@first
shana# zfs list
NAME                  USED  AVAIL  REFER  MOUNTPOINT
zpool0               64.2M   912M    20K  /zdevel
zpool0/hamaco        64.0M   912M  64.0M  /zdevel/hamaco
zpool0/hamaco@first      0      -  64.0M  -

# ls /zdevel/hamaco
hogehoge

スナップショットの破棄

zfs destroyコマンドで破棄出来る。

# zfs destroy zpool0/hamaco@first

また、そのディレクトリのスナップショットを全て破棄したい場合は以下の様に-rオプションを付ければ良い。

# zfs destroy -r zpool0/hamaco

まとめ

zfsでは凄く簡単にスナップショットが作成出来る。なにか影響のありそうな事をやる前にとっておけば、なにかあった時にすぐに戻せて便利。
次はスナップショットのバックアップとかをやってみる。