テクニカルコラム かんたん♪ZFS
第六回:スナップショット(2010年4月15日発行)

  四月です。春の風が心地よい今日この頃、みなさんいかがお過ごしでしょ
  うか。

  このコラムでは、 よく使われているファイルシステムと ZFS の違いを
  ケーススタディをもとにご紹介していきます。

  今までのファイルシステムとは一味違う ZFS  を活用して面倒なファイ
  ル管理の苦労を減らしましょう!

 -------------------------------------------------------------------

   情報システム部へやってきた根久善太の勧めに従い、 Nexenta OS を
  インストールしたAさん。いろいろと ZFS の機能を試しています。

  「少しかっこいい機能も使ってみたいな」Aさんは根久が操作しているコ
  ンソールを覗き込みながら言いました。

  「じゃあ、次はスナップショットを試してみましょう」

   根久はコンソールからコマンドを打ちました。

   # zfs list

   NAME        USED   AVAIL   REFER   MOUNTPOINT
   tank        476K   299.5G    21K   /tank
   tank/data    18K   299.5G    18K   /tank/data

   # zfs snapshot tank/data@snap000

  「これで tank/data のスナップショットが作成されました。 ZFS はファ
   イル操作をトランザクションとして扱います。スナップショットはトラ
   ンザクションの静止点を記録するだけですので、システムに余分な負荷
   を与えません」

  「どのくらい容量が必要なんだい?」

  「スナップショット自身の容量はわずかです。スナップショットが作成さ
   れると更新があっても古いデータへの参照が保持されます。領域がスト
   レージプールへ返却されないので、更新されたデータ領域の分だけ容量
   が増えます」

  「回数に制限があるのかい?」

  「ファイルシステム毎に 2^48 回ですので、ほぼ無制限と言ってもいいで
   しょう」

  「スナップショットからファイルを取り出すのに、別のマシンが必要だっ
   たりすると面倒だな」

  「そんなことはないですよ。ZFS にはクローンという機能が用意されてい
   ます。スナップショットをクローンとしてマウントすれば、書き込み可
   能なイメージとしてスナップショットを取り出すことができます。実際
   にやってみましょう。まずファイルを作成します」

   # touch /tank/data/foo
   # ls /tank/data
   foo

  「次にスナップショットを作成します」

   # zfs snapshot tank/data@snap001
   # zfs list -t snapshot
   NAME                             USED  AVAIL  REFER  MOUNTPOINT
   tank/data@snap000                 16K      -    19K  -
   tank/data@snap001                   0      -    20K  -

  「ファイルを変更します」

   # echo "TEST" > /tank/data/foo

  「クローンを使うのは簡単です。ZFS ファイルシステムと同じようにスト
   レージプール上にマウントするだけで読み書き可能なイメージとして現
   れます」

   # zfs clone tank/data@snap001 tank/snap001

  「tank/snap001 にスナップショットがマウントされました。 このクロー
   ン上のファイル foo は変更が加えられる前の状態のはずですね」

   # zfs clone tank/data@snap001 tank/snap001

   # diff -u /tank/snap001/foo  /tank/data/foo
   --- /tank/snap001/foo  2010-03-29 21:57:48.795670100 +0900
   +++ /tank/data/foo   2010-03-29 22:03:53.976800370 +0900
   @@ -0,0 +1 @@
   +TEST

  「う~ん、簡単だねえ。このクローンを書き換えるとスナップショットは
   どうなるんだい?」

  「静止点を記録しているだけですので、スナップショットそのものが書き
   換えられるわけではないです。クローンは別のブランチとして派生して
   いくことになります」

   根久はノートを取り出して図を書きました。

  tank/data@snap001 -------------------------------> tank/data
                |
                    +--------------------> tank/snap001

  「じゃあ tank/snap001 に変更を加えた後、オリジナルのスナップショッ
   トにアクセスしたくなった時には、別のクローンを作ればいいんだな」

  「そうです。ソースコードとか共通のデータが多い開発の現場だと便利な
   機能ですよね」

  「そうだな。ストレージ容量の節約にもなるな。他にはどんな機能がある
   んだい?」

  「スナップショットを取った時点にロールバックすることもできます。こ
   れをやるとスナップショット以降に行われた変更は全て取り消されます」

   # cat /tank/data/foo
   TEST

   # zfs rollback tank/data@snap001

   # cat /tank/data/foo
   #

   Aさんは感心したようにうなずきました。

  「次はデータの送信と受信をやってみますか」根久は若者らしい屈託のな
   い笑顔を向けてきました。

  (つづく)


  ■ 参考文献

   (1) サンマイクロシステムズ、"Solaris ZFS 管理ガイド"、
     Part No. 819-6260-15、2009 年 4 月

 (高田 浩生)
世界最高峰の技術で、世界最高性能のストレージを
Copyright 2020 Core Micro Systems Inc., All rights reserved.