Web更新

UbuntuでZFSを使ってみよう 第13回 スナップショットとクローン機能について知ろう

前回は、ARCとZILについて説明しました。今回は、ZFSのスナップショットとクローン機能について説明します。

スナップショット

ZFSのスナップショットは、スナップショットを作成した時点での、ファイルシステムの内容を書き込み不可の状態で保持する機能です。スナップショットはファイルシステムおよびボリュームを対象とし、スナップショット名をつけて作成できます。

$ sudo zfs snapshot rpool/USERDATA/user_z0ox2d@name
$ zfs list rpool/USERDATA/user_z0ox2d@name
NAME                                  USED  AVAIL     REFER  MOUNTPOINT
rpool/USERDATA/s-miyaza_z0ox2d@hoge     0B      -     28.9G  -

スナップショット作成の仕組みを説明すると、以下のようになります。

  1. 新しいスナップショットを作成
Snapshot作成時

2. Nodeを下位ノードのリンクごとコピー

ノードコピー

実データ(ブロック)をコピーしないため、スナップショットの作成は数秒で行われます。この時間は、スナップショットおよびクローンの数に依存します。

スナップショットを作成した場合、ファイル書き込みに違いが発生します。

  1. ファイル更新部分のブロックを新たに作成し、新しいNodeを作成するまでは通常と同じです。
ファイルコピー

2. 通常の書き込みではNode1とBlock2が削除されるのですが、snapshot側のNodeがNode1とリンクしているため、削除されません。

書き込み完了

このためファイルの削除や更新した場合、スナップショットの容量が増加し、全体のファイル使用容量は増加します。ノードやファイルブロックは、参照する上位ノードがなくなるまで削除されません。またスナップショット元の変更内容が、スナップショットに反映されることがありません。

スナップショットの削除は、zfs destroyで行います。

$ sudo zfs destroy rpool/USERDATA/s-miyaza_z0ox2d@hoge

スナップショットの削除で行うのは、上記図のsnapshotとそれにつながるNodeを削除するだけです。参照元の無くなったNode1やBlock2は、自動的に削除されます。

クローン

クローンはスナップショットから作成される、読み書き可能なファイルシステムを作成できます。作成するファイルシステム名は任意の名称を指定できますが、同じzpool以下に限定されます。マウントポイントは任意の場所を指定できます。

$ sudo zfs clone rpool/USERDATA/user_z0ox2d@name rpool/USERDATA/user1
$ zfs list rpool/USERDATA/user1
NAME                   USED  AVAIL     REFER  MOUNTPOINT
rpool/USERDATA/user1   128K   815G     28.9G  /user1
$ sudo zfs destroy -r rpool/USERDATA/user1
$ sudo zfs clone -o mountpoint=/home/user1 rpool/USERDATA/s-miyaza_z0ox2d@hoge rpool/USERDATA/user1
% zfs list rpool/USERDATA/user1
NAME                   USED  AVAIL     REFER  MOUNTPOINT
rpool/USERDATA/user1     8K   815G     28.9G  /home/user1

クローンの作成の仕組みはスナップショットと同様で、元となるスナップショットのNodeをコピーするだけです。

スナップショット同様に、オリジナルの書き込み内容はクローンに反映されません。

スナップショットと異なるのは、クローンは書き込みができるということです。クローンの書き込みの仕組みを説明します。

  1. 通常のファイル書き込みと同様に、新しいファイルブロックとノードを作成します。
クローン新ノード作成

2. 次に、cloneのNodeからNew Nodeへリンクを切り替えます。

リンク切り替え

このように、元となるZFS、スナップショットに影響することなくクローンのファイル変更を行います。

クローンの削除もsnapshot と同様にzfs destroyで削除できます。ただし、クローンに対するスナップショットが存在する場合もあります。含まれるスナップショットもすべて削除する場合、zfs destroy -r とオプションを付けると削除されます。

終わりに

今回は、ZFSのスナップショットとクローン機能との違いを説明しました。次回は、スナップショット機能について細かく説明します。次回をお楽しみに。

さて、このコラムを掲載いただいているデジタル・ヒュージ・テクノロジー社は老舗のOSSインテグレーターです。特にLinuxは強く、OSSを活用した業務システムの実績も多いです。興味がある方は以下のページもご覧ください。
DHT OSS導入コンサルティングサービス

関連記事一覧