2007年 12月 17日 月曜日
やっぱり Sun がスキ!
ZFS スナップショット
今回は、 ZFS のスナップショット機能に関して少し掘り下げて説明します。
ZFS のスナップショットを作成すると、ご存じの通り変更後のファイル
システムをスナップショットの状態に戻す事ができます。
それでは、実際にスナップショットを作成して、ZFS がどのような動作をするか
見てみましょう。
まずは、testpool/home ファイルシステムにスナップショット @monday を作成します。
# zfs snapshot testpool/home@monday # zfs list NAME USED AVAIL REFER MOUNTPOINT testpool 2.16M 252M 38.2K /testpool testpool/home 2.04M 252M 2.04M /testpool/home testpool/home@monday 0 - 2.04M -
スナップショットの名前は、 @monday のように @ を付けて指定します。
このスナップショットの実体は、物理コピーでなく変更のあった差分だけデータ を保持しますので、最初は @monday スナップショットの USED が 0 Byte になります。
そこで、testpool/home ファイルシステムから差分を発生させる為、 1M Byte の ファイル aaa を消してみます。
# ls -l /testpool/home 合計 4108 -rw-rw-rw- 1 root root 1048576 12月 12日 17:26 aaa -rw-rw-rw- 1 root root 1048576 12月 12日 17:23 bbb # rm /testpool/home/aaa # zfs list NAME USED AVAIL REFER MOUNTPOINT testpool 2.26M 251M 38.2K /testpool testpool/home 2.07M 251M 1.04M /testpool/home testpool/home@monday 1.04M - 2.04M -1M Byte のファイルを消去しましたので、@monday スナップショットの USED が 1M Byte (消去したファイル分)になりました。
ここで、作成したスナップショットのデータはどこに存在しているのでしょうか?
作成したスナップショットは、ファイルシステム直下の隠しファイル .zfs/snapshot ディレクトリ以下に存在します。
# ls -al /testpool/home 合計 6170 drwxr-xr-x 2 root sys 5 12月 12日 16:31 . drwxr-xr-x 3 root sys 3 12月 12日 16:22 .. -rw-rw-rw- 1 root root 1048576 12月 12日 16:28 aaals -al オプションでリストを表示しても、.zfs ディレクトリはデフォルトで 表示されませんが .zfs/snapshot ディレクトリを直接指定してリストを表示 してみます。
# ls -l /testpool/home/.zfs/snapshot 合計 4 drwxr-xr-x 2 root sys 4 12月 12日 16:27 monday # ls -l /testpool/home/.zfs/snapshot/monday 合計 4108 -rw-rw-rw- 1 root root 1048576 12月 12日 16:28 aaa -rw-rw-rw- 1 root root 1048576 12月 12日 16:29 bbbこのスナップショットのデータは、読み込み専用で参照する事が可能なので、一部のファイル を戻したい時は、ここのディレクトリから直接コピーしてファイルを復旧する事ができます。
最後にロールバック機能を説明します。
下記例では、スナップショット @monday と @tuesday があり、新しい方の @tuesday をロールバックしてみます。
# zfs list NAME USED AVAIL REFER MOUNTPOINT testpool 3.24M 251M 38.2K /testpool testpool/home 3.11M 251M 2.04M /testpool/home testpool/home@monday 1.04M - 2.04M - testpool/home@tuesday 33.7K - 1.04M - # zfs rollback testpool/home@tuesday作成したスナップショットを戻す時は、rollback オプションを使用します。
最新のスナップショットではなく、何世代か前のスナップショット(ここでは @monday) をロールバックする時は、さらに -r オプションを付与して実行します。
# zfs rollback -r testpool/home@monday # zfs list NAME USED AVAIL REFER MOUNTPOINT testpool 2.16M 252M 38.2K /testpool testpool/home 2.04M 252M 2.04M /testpool/home testpool/home@monday 0 - 2.04M -補足として、何世代か前のスナップショットをロールバックすると、それより 新しい(この場合は @tuesday)スナップショットは消えてしまいます。
ZFS スナップショット機能は、早い、簡単、便利の3拍子揃っていますので、 是非お試し下さい!
Posted at 05:50午後 12 17, 2007 by Naoyuki Yamada in Sun | 投稿されたコメント[0]