2012年11月1日木曜日

ZFS on Mac (2) ZEVOのインストール

前回からだいぶ時間が経ってしまいましたが、ZFS on Macの続きです。

前回はZFSを取り巻く状況について軽く触れ、Mac向けZFSとしてZEVOなるものが存在することを紹介しました。
さて今回はZEVOについて・・・と行きたいところですが、前回「Solaris以外でのZFSについて」なんて書いたばっかりにSolarisとそれ以外のOSにおけるZFSの関係について完全にスルーしてました。まずはそちらにちょっと触れておきたいと思います。
このあたりの歴史的経緯については勘違いが含まれている恐れがあるので、気付いた場合は指摘していただけると幸いです。

今更ですが、元来のZFSはSolaris用に開発されたものです。リアルタイムに追っていた頃では無いので時期は前後するかも知れませんが、Solaris開発がオープン路線に転換し、OpenSolarisがリリースされたのに伴ってZFSのソースコードもオープンになりました。以降、各種OSへの移植が進むことになります。
その結果近年まではOpenSolarisのバージョンアップに伴い順調に更新されてきたZFSですが、Sunの買収など情勢の変化によってOpenSolarisの更新は止まり、Solaris 11からはまたクローズドソースになってしまいました。以後OpenSolaris自体はOpenIndianaにForkして開発が続いていますが、オープンソースなZFSのバージョンはOpenSolaris最終版のv28で止まっており、Solaris 11に搭載されたv33とはバージョンが離れてしまっています。
このような経緯によって、現在の(本家Solaris以外における)ZFSの最新版はv28ということになります。勝手に独自実装でオレオレZFS(っぽい何か)にするわけにもいかないので、OSSの世界でのZFSといえばv28ということになるんだと思います。
要は、(図らずも)OSS的にはZFSの仕様はfixされたので、今後は公式のアップデートを追いかけることもなくv28というゴールを目指した開発へシフトしているということです(多分)。

話が大分逸れてしまいました。ZEVOに戻ります。
前回書いたとおりZEVOというのは現在GreenBytesというストレージ屋さんで開発されているMac向けのZFSで、v28となっています。このZEVOの無料版であるZEVO Community Edition(以下CE)なるものが配布されているので、今回はこのZEVO CEを実際にインストールしてみます。

用意したのはみんな大好き仮想マシン、ということでMountain Lion on VMware Fusionです。VMだと仮想HDDをバンバン追加して実験できるので非常に便利です。
というわけでまずはZEVO CEを落としてきます。
http://zevo.getgreenbytes.com
この公式サイトの「Downlink ZEVO」からダウンロードできますが、無料の会員登録が必要なので「Downlink ZEVO」から一度飛ばされるフォーラムに登録してログイン&ダウンロードしましょう。
ZEVOCommunityEdition.dmg をダウンロードしてきたら特に難しいこともなく開いてインストール&再起動します。
公式サイトから落とせるZEVO CEのバージョンは1.1ですが、2012/11/1現在1.1.1がリリースされています。1.1.1はシステム環境設定のZEVO Preference→Check For Updates...からダウンロードすることが出来るのでインストールしておきましょう。

大抵のことは付属のZEVO QuickStart Guideを読めばわかりますが、とりあえず適当にいじってみることにしましょう。
まずインストール&再起動したらターミナルから色々確認してみます。
$ zpool upgrade -v
でv28なのが確認できると思います。ちなみに一般的なZFSと違い、状態確認系のサブコマンドはrootでなくても使用できるようです。
早速プールを作ってみます。まずはディスクの確認。
$ diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *42.9 GB    disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            42.1 GB    disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *2.1 GB     disk1
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *2.1 GB     disk2
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                                                   *2.1 GB     disk3
OSが入っているのがdisk0です。今回はdisk1,2,3を利用します。
まずはdisk1,2でミラー構成を試してみます。
$ sudo zpool create -f mypool mirror /dev/disk1 /dev/disk2
プール作成にはroot権限が必要なのでsudoします。また、自動でパーティションを作ってもらうために-fオプションを付与しています。
では作ったプールを確認してみます。
$ zpool status
  pool: mypool
 state: ONLINE
 scan: none requested
config:

 NAME                                           STATE     READ WRITE CKSUM
 mypool                                         ONLINE       0     0     0
   mirror-0                                     ONLINE       0     0     0
     GPTE_A384D925-0031-42F3-8D2F-DA4B69F1142D  ONLINE       0     0     0  at disk1s1
     GPTE_9806760F-ADA2-4498-B62B-AFB84F89939F  ONLINE       0     0     0  at disk2s1

errors: No known data errors
$ zfs list
NAME      USED   AVAIL   REFER  MOUNTPOINT
mypool   434Ki  1.83Gi   371Ki  /Volumes/mypool
ミラー構成でmypoolが作られ、/Volumes以下にマウントされているのがわかります。
ここで謎なのがzpool statusで表示されるデバイス名です。/dev/diskXの形になっていません。これはZEVO独自の仕様で、プールを構成する各デバイスにユニークIDを持たせて管理することで、起動毎にディスク番号(diskXのX)が変わっても追随できるようになっています。
具体的には、これらのユニークなデバイス名は/dev/dsk以下に配置されるデバイスへのシンボリックリンクとして存在しています。
$ ls -l /dev/dsk/
total 16
lrwxr-xr-x  1 root  wheel  12 11  1 02:13 GPTE_9806760F-ADA2-4498-B62B-AFB84F89939F -> /dev/disk2s1
lrwxr-xr-x  1 root  wheel  12 11  1 02:13 GPTE_A384D925-0031-42F3-8D2F-DA4B69F1142D -> /dev/disk1s1
このようになります。

次にRAIDZプールの作成を試してみます。
$ sudo zpool destroy mypool
$ sudo zpool create -o ashift=12 rzpool raidz /dev/disk1 /dev/disk2 /dev/disk3
$ zpool status
  pool: rzpool
 state: ONLINE
 scan: none requested
config:

 NAME                                           STATE     READ WRITE CKSUM
 rzpool                                         ONLINE       0     0     0
   raidz1-0                                     ONLINE       0     0     0
     GPTE_9B2B44FD-A76C-4AC5-AF6C-B1302B453204  ONLINE       0     0     0  at disk1s1
     GPTE_6DCC0CC3-12F8-49E5-A976-E87161B057AC  ONLINE       0     0     0  at disk2s1
     GPTE_10AEF2DE-B392-424E-A380-58933B925E0E  ONLINE       0     0     0  at disk3s1

errors: No known data errors
$ zfs list
NAME      USED   AVAIL   REFER  MOUNTPOINT
rzpool   470Ki  3.67Gi   390Ki  /Volumes/rzpool
なんてことはなくできました。-o ashift=12というのはAFT用のオプションです。本来は512Bセクタでashift=9、4KBセクタでashift=12が自動的に選択されるのですが、512Bエミュレーションを行っているAFTのHDDではashift=9と誤認識してしまうため、ashiftを強制的に指定することができます。
ファイルシステムの作成を試してみます。
$ sudo zfs create rzpool/fs1
普通に作れます。デスクトップに(rzpoolと共に)fs1がマウントされているかと思います。
ですが、sudoで作っているので中にファイルを作れません。sudo無しで作ろうとすると
$ zfs create rzpool/fs2
cannot mount '/Volumes/rzpool/fs2': failed to create mountpoint
filesystem successfully created, but not mounted
マウントできないと怒られます。
親ファイルシステムの権限を変えてみます。
$ sudo chmod 777 /Volumes/rzpool
$ zfs mount -a
マウントできました。ユーザ権限で作っているので、読み書きも可能です。
権限を変更しているので
$ zfs create rzpool/fs3
今度は正常に作成できます。

そんなわけで、非常に簡単ですがプールとファイルシステムの作成までを行ってみました。
留意する点としてはデバイス名とユーザ権限で実行するコマンドくらいで、ZEVO特有の問題がこれといってあるわけではありません。他のプラットフォームでZFSを使ったことがあればごく自然に使えるかと思います。
次回は(かなり先になりそうですが)、もうちょっと実用を視野に入れてZEVOが「どれくらい使えるか」を検証していきたいと思っています。

0 件のコメント:

コメントを投稿