Archive for the ‘OCFS2’ tag
OCFS2のreflink機能
OCFS2はLinuxカーネルのメインストリームに採用されているクラスターファイルシステムで、Oracle VMにおいて仮想マシンのデータを格納する共有ストレージはOCFS2でフォーマットします。(NFSの場合を除く)
このOCFS2ですが、現在魅力的な新機能が開発されています。それはreflinkです。
このreflinkについてOracle VMの責任者Wimが最近ブログエントリーを書いています。
OCFS2 reflink by Wim Coekaerts on May 4, 2009
以下はこのブログエントリを簡潔にまとめたものです。
reflinkとは簡単に言えばファイルのスナップショット機能です。あるファイルをreflinkするとそのファイルがコピーされたようになりますが、実際のデータブロックは複製せずに同じ実体を共有しており、新たに作成するはのはその新規ファイルを指すinodeだけです。そして該当データに書き込みが会った場合にはじめてデータをチャンクと呼ばれる単位でコピーするというCoW(コピー・オン・ライト)という仕組みを使っています。したがってreflinkした時点では新しいファイルはディスクを消費しません。その後も変更されないデータブロックについては共有したままとなり、特にVM環境でのテンプレートプロビジョニングにおいて大幅なディスク消費削減が見込まれます。CoWは新しいプロセスをfolkしたときのメモリのコピーにも同様の仕組みが採用されていたり、考え方自体は目新しいものではありません。ただし、このファイルベースのCoWは通常特殊なファイルフォーマットを必要とします。例えばVMwareのvmdkやMicrosoftのVHDです。OCFS2の場合はユーザはそれを意識する必要はありません。違うのはファイル複製時にcpではなくreflinkコマンドを使用するというだけです。reflink元のファイルもreflink後のファイルも通常のファイルとして扱うことができ、ユーザもOS(VFSまでの上位レイヤ)もその違いを意識することはありません。そしてOCFS2のファイルなので当然クラスターの中で安全にどのサーバからも取り扱うことができます。
実際このreflink機能の開発をはじめたのはOracle VMを見据えてとのこと。前述したVMテンプレートのプロビジョニングや既存VMの複製、バックアップではこの機能はめちゃくちゃ重宝しそうです。まだOracle VM用のreflink対応OCFS2バイナリはでていませんが、近々テストパッケージをリリースするようです。楽しみですね。
OCFS2をローカルだけで使うには
OCFS2は主にFibreChannelやiSCSIで接続されたボリュームを複数サーバからマウントしてサーバ間でデータを共有できるようにするためのクラスターファイルシステムです。
OCFS2でボリュームをフォーマットしたりマウントするためには、通常クラスタの情報を記述したcluster.confファイルが必要になります。なので気軽に使うにはちょっと面倒、と感じている方もいらっしゃるかもしれません。しかし実はこのOCFS2、クラスタファイルシステムとしてではなく、ローカルだけで(スタンドアロンで)使用するファイルシステムとしても利用できます。その場合はcluster.confといった設定ファイルも作成する必要がありません。
OCFS2をローカルのみで使用するようにするには、ボリュームを”-M local”オプションをつけてフォーマットするだけです。
# mkfs.ocfs2 -M local --force /dev/sdb
これでOKです。あとは普通にマウントすれば使えるようになります。
# mount /dev/sdb /var