ZFS クローン、プロモーション機能 : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20080122 2008年 1月 22日 火曜日

ZFS クローン、プロモーション機能

前回 、 ZFS のスナップショット、ロールバック機能に関して解説しましたが、 今回は、ZFS のクローンとプロモーション機能を紹介します。

ZFS のクローン機能は、作成したスナップショットを複製する機能なのですが、 スナップショットのデータは Read Only でアクセス可能なのに対して、クローン を作成すると、複製したファイルシステムに対して Read/Write が可能になります。

さらに、プロモーション機能は、ZFS のクローンと、マスタとなるファイルシステム の依存関係を交換する事ができます。
この機能のおかげで、ZFS のクローンを残したままマスタのファイルシステムを削除する事が 可能になりました。
(通常、クローンは、マスタとなるファイルシステムと依存関係がある為、マスタの ファイルシステムを削除する際は、クローンも一緒に削除されてしまいます。)

それでは実際にクローンとプロモーション機能の動きを見てみましょう。

まずは、クローンを作成する準備をします。
testpool/home ファイルシステムに 1M Byte のファイル aaa,bbb を 作成します。

# mkfile 1m /testpool/home/aaa
# mkfile 1m /testpool/home/bbb
# ls /testpool/home
aaa  bbb
続いて 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  -
これで準備が整いました。

それでは、まずスナップショット testpool/home@monday からクローン testpool/test ファ イルシステムを作成してみます。
# zfs clone testpool/home@monday testpool/test

# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              2.17M   252M  39.6K  /testpool
testpool/home         2.04M   252M  2.04M  /testpool/home
testpool/home@monday      0      -  2.04M  -
testpool/test             0   252M  2.04M  /testpool/test
zfs list の結果から判る通り、クローンもスナップショットと同様、物理 コピーでなく差分で管理される為、最初の USED は 0 Byte になります。
作成した /testpool/test クローンに対して Write 可能かファイルを作成して 確かめてみます。
# mkfile 1m /testpool/test/ccc
# mkfile 1m /testpool/test/ddd

# ls /testpool/test
aaa bbb ccc ddd
正常に Write ができました。

今度は、プロモーションの機能を試す為、マスタとなるファイルシステム /testpool/home が破棄できない事を確かめてみます。
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              4.22M   250M  39.6K  /testpool
testpool/home         2.04M   250M  2.04M  /testpool/home
testpool/home@monday      0      -  2.04M  -
testpool/test         2.04M   250M  4.04M  /testpool/test

# zfs destroy -r testpool/home
'testpool/home' を破棄できません: filesystem に依存しているクローンがあります
次のデータセットを破棄するには、'-R' を使用してください:
testpool/test
予想通り、マスタのファイルシステムを破棄しようとすると、マスタを参照している クローンが依存している為、破棄できません。

それでは、プロモーション機能を使って、依存関係を交換してみます。
# zfs promote testpool/test

# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              4.22M   250M  39.6K  /testpool
testpool/home             0   250M  2.04M  /testpool/home
testpool/test         4.08M   250M  4.04M  /testpool/test
testpool/test@monday  33.7K      -  2.04M  -
これで依存関係が入れ替わりました。
ちなみに、依存関係が逆転した為、 @monday スナップショットが/testpool/test ファイル システムの方に移動しています。

それでは、本来マスタとなっていたファイルシステムを破棄してみましょう。
# zfs destroy testpool/home
 
# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              4.21M   250M  38.2K  /testpool
testpool/test         4.08M   250M  4.04M  /testpool/test
testpool/test@monday  33.7K      -  2.04M  -
正常に testpool/home ファイルシステムを破棄できました。

もし、クローンのファイルシステム名を元あったマスタのファイルシステム名と と同じにしたい場合は、リネームするコマンドがあります。
# zfs rename testpool/test testpool/home

# zfs list
NAME                   USED  AVAIL  REFER  MOUNTPOINT
testpool              4.21M   250M  38.2K  /testpool
testpool/home         4.08M   250M  4.04M  /testpool/home
testpool/home@monday  33.7K      -  2.04M  -

# ls /testpool/test
aaa bbb ccc ddd
はい、これで testpool/test が testpool/home にリネームされました。


(最後に)
今回紹介した ZFS の機能を含め、ZFS のスナップショット、ロールバック、クローン、プロモーション、 リネーム機能は是非試してみて下さい!


(参考情報) やっぱりSunがスキ! ZFS 関連 blog
- スナップショット、ロールバック機能紹介
- ファイルシステムの複製方法紹介
- ホットスペア機能紹介
- USB メモリで ZFS


投稿されたコメント:

コメント
  • HTML文法 不許可