ZFS on Linuxの話

こんにちは、チーフSEの孟です。
今日はファイルシステムについて、お話したいと思います。

ZFSっていうファイルシステムですが、これは非常に素晴らしいファイルシステムです。 もっと使われても良いんじゃないでしょうか!? 

ZFSの何が素晴らしいかと言うと、PCパーツ販売店で買った数万円のパーツで、商用で販売している数百万円、数千万円のストレージサーバーと同じ機能を持つ高性能、高冗長性ストレージサーバーを作ることが出来るんです。

まず、ZFSの優れた機能の1つにRAIDがあります。 

LinuxではよくLVMが使われています。LVMもソフトウェアRAIDが組めますが、RAID 0RAID 1、 RAID 01に限られてます。

ZFSではRAID 0RAID 1、 RAID 01はもちろんRAID 5RAID 6RAID Z、RAID Z2も組めます!(RAID-ZはRAID 5の書き込みホールをソフトウェアだけで解決する、世界初のソリューションです。RAID 5アルゴリズムの弱点を克服したのがRAID-Zです)

ZFSのメリットRAIDだけではありません、ほかにも沢山のメリットがあります。

①重複排除機能 + RAID Z

このZFSで組んだ共有ストレージサーバにファイルを保存しても、容量は殆ど増えません。

例えば営業さんのメールをバックアップしようとした場合。1人分のデータが10GBとすると、100人分をバックアップした場合1TBの要領が必要です。メールのデータはメーリングリストやCC、BCCで配信されたメールが殆どです。ということは重複率が高いですよね。全員分のデータを圧縮すればいいかもしれませんが、圧縮ファイルはよく壊れるのであまり使いたくありません。

ここでZFSで組んだ共有ストレージを使ってみましょう。100人のバックアップを重複率70%で想定して計算すると、なんと300GBまで集約できるんです。
 
700GBの差はすごいですね!

こういう機能をPCパーツ販売店で購入した数万円のハードでも実現できるなんて、魅力的ですね。パーツに不安を感じるかもしれませんが、まぁRAID 01かRAID 6を組めば大丈夫でしょ。

②圧縮機能

上の例で話したケースでは、さらにZFSの圧縮機能をONにすることで、ディスクの使用率をさらに高めることができます。ZFSが自動的に保存されたファイルを圧縮するので、ユーザの操作は一切必要ありません。圧縮機能を使うとCPUを食いますが、アーカイブデータ等の長期的な保存には適してます。

③その他
チェックサム64ビット化
・ホットスペア(動いてるままディスク交換が可能)
・コピーオンライト(大きいファイルをコピーする途中で、ソース元のデータ変更したとしても大丈夫)
・クローンプロモーション

今まで高価な商用ストレージでしか実装されてない機能が、ローコストで実装できるようになります。そこが素晴らしいです。


さて、ここから話が変わります。
LinuxZFSを利用するためのZFS on Linuxの話をしたいと思います。

LinuxZFSを使うには、2つの方法があります。
1つはFUSEを使う方法です。FUSEを使う理由は、やっぱりライセンス問題がうるさいからですね。FUSEで使うと性能も悪いし、お勧めしません。なのでこれはスルーします。

もう1つの方法は、Nativeで実現されたZFS on Linuxを使う方法です。
※ここの記事を参考してください

新しいバージョン0.61が公開され、「実用段階」に達したと報告されています。LinuxZFSを利用するならこれでしょ。
※公式サイト

CentOSに導入する方法は、めっちゃ簡単です。たったの2行で済みます。

$ sudo yum install zfs 

※入れた後、再起動した方がいいかもしれません。

続いて、ZFSの使い方を説明します。

①ストレージプールの作成

zpool create tank /dev/sdd
※tankはストレージプールの指定で、この場合プールは/tankに作られます。/dev/sddはHDDデバイスです。

②FS作成

zfs create tank/hoge

③FSリスト確認

zfs list

④完了

これだけです!これで全ての構築完了。LVMより簡単すぎます。
/tank/hogeっていうマウントポイントが作られ、ここにファイルを置けばOKですね。


で、ここでtank/hogeでの重複排除の使い方を説明します。コマンド1行で済みます。

zfs set dedup=on tank/hoge

早速効果を見てましょう。
dd if=/dev/zero of=/tank/hoge/bigfile count=1024 bs=1M
※1GBの空ファイルを作成します。

よし、実際のサイズを見てみましょう。
 
lsで確認
# ls -lha /tank/hoge/bigfile
-rw-r--r-- 1 root root 1.0G Aug 16 21:53 /tank/hoge/bigfile

zpoolで確認
# zpool list tank
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
tank  9.94G   518K  9.94G     0%  8192.00x  ONLINE  -

lsで見たサイズは1GBですが、実際の利用空間は518Kしかないです。
重複排除率は↑のDEDUPカラムで確認できます。


ZFS on Linuxのお陰でLinuxでも簡単にZFSを導入することが出来ます。

今日のネタ以上になります。
ZFSの使い方もっと知りたい方、自分でぐぐってくださいね。

宜しくお願いします。