テクニカルコラム かんたん♪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 月


 (高田 浩生)

(c) Core Micro Systems Inc., All rights reserved.