ラベル ZFS の投稿を表示しています。 すべての投稿を表示
ラベル ZFS の投稿を表示しています。 すべての投稿を表示

2018/04/07

ZFSの新機能?デバイス取り外しを試す

実に2016年以来のZFSネタです。

ZFSといえば私の信奉する最強ファイルシステムということで、特にMacでの利用について思い返せば5年以上前から取り上げていたものです。

何が最強かというと色々あるわけですが、強力なのは論理ボリュームマネージャに相当する機能が組み込まれておりRAID・領域切り出し・スナップショット等々が自由自在というあたりです。

が、自由自在なZFSでも数少ない不自由がスケールアップが簡単でもスケールダウンができないこと。つまり、2台ミラーリングのプールに更に2台ミラーリングを追加して容量拡大するのは容易ですが、容量に空きがあってもそこからディスク本数を減らすことは基本的にできなかったのです。

なんですが、なんとついにこの機能が実装されたらしい。まだあらゆる環境で使えるわけではないですが、意外なことにMacで簡単に試せるので試してみました。

結論から言うとRAID-Zでは使えなかったので過度な期待は禁物ですが、それ以外は期待した動作をしてくれました。

2016/07/18

ZFSミラーのアップグレード


毎回毎回GPD WINのネタばかりでもあれなんで、たまには自作の話でも。

OpenZFS on OS Xを導入しているosx86機でHDDを交換する話を備忘録がてら記録しておこうと思います。

2014/07/28

OpenZFS on OS X (10) 1.3.0リリース

速報でもなんでもないですが、表題の通りOpen ZFS on OS X(以下O3X)の1.3.0がリリースされました。
7月24日のリリースですが、6月にリリースされた本家ZFS on Linux 0.6.3を早くも取り込んでいます。
詳しいことは公式のchangelogを見るとして、とりあえず導入してみて感じたことをまとめると以下のようになります。

・GUIの通知が出るようになった
・正常シャットダウンができるようになった
・rootじゃなくても色々操作できるようになった(っぽい)
・zpool historyが出てくる
・rc.local無しでホームディレクトリのマウントができるようになった

2014/06/02

壊れたZFSホームディレクトリを復旧する

Open ZFS on OS Xの1.2.7がリリースされました
おいおいちゃんとテストしてんのかよってツッコミたくなるような間隔でRCが乱発されていたので(ここらへん見るととってもヤバイ感じです)、ちょっと尻込みもしましたがまあ別に1.2.0もさして安定してないし入れてみました。

アプデ内容としては、1.2.0で全然使ってなかったメモリをちゃんと使うようになったのが大きいんじゃないかと思います。特に超遅かったzvolやzpool scrubに効果がありそう。「ありそう」なのはまだ試せてないからです。まだ社会人の生活リズムに慣れてないもんで時間が・・・


わかりやすいところだと、snapshotがマウントできるようになりました。1.2.0まではマウントができなかったため、snapshotにアクセスするためには一時的にzfs cloneしてからcloneファイルシステムをマウントし、使い終わったらcloneファイルシステムをdestroy、という煩雑な作業が必要でした。zfs mountだけでマウントできるようになったので、TimeMachine的な使い方がしやすくなりました。

で、今回はそのZFS snapshotを利用したTimeMachineごっこの話。

2014/04/27

OpenZFS on OS X (9) ZFSをホームディレクトリにする

前回の後半でZFSをホームディレクトリにするとマウントが間に合わず自動ログインできない、ということを書いていましたが解決しました。
わかってしまえばどうということはなく、zpool importをlaunchdスクリプトではなくrc.localに記述すればいいというだけの話。rc.localは後方互換性のためだけに残されてて優先順位は低いと思ってたので盲点でした。

以下、細かい注意点など。

2014/04/26

OpenZFS on OS X (8) では、いじってみる。

もはやZFSの話しかしていないこのブログ・・・VAIO Duo以降さしたるガジェットも買ってないし。と思ったらそういえばiPad mini retinaを買っていた。UMPCが本当にジャンルごと死んでしまったので、Ultrathin Keyboard Folio for iPad mini買ってUMPC風に使ってます。便利すぎてPC好きとしては逆に辛かったり。

で、結局OpenZFS on OS X(O3X)の話題です。ある程度ZEVOをリプレースする目処が立ったので、メインマシンの環境をZEVOから移行してMavericksにアップグレードしました。
しかし、現状ではEAやACL周りの挙動が怪しい、zvolがかなり遅い、ARCが小さいので全体的に遅い、などかなり未完成な印象なので、検証用以外のストレージに導入するのはまだオススメできません。
自分はZEVOの時点でメインのストレージ(3TBx2)をZFSにしちゃったんでもう後には引けないですがw 今更AppleRAIDにも戻りたくない。

今回は特にまとまってないZFS on MacあるいはO3X固有の話題についてつらつら書いていこうかと。

2014/04/06

OpenZFS on OS X (7) 拡張属性の互換性

OpenZFS on OS X(O3X)検証の続きということで、拡張属性(Extended Attributes)編です。
特に、ZEVOから利用しているデータセットをO3Xに移行する際の問題についてそれなりに詳細に記しています。

基本的にZEVOについて書いた昔の記事の流れを汲んだものです。


2014/03/31

OpenZFS on OS X (6) ファイル名関連の挙動

「ZFS on Mac」というタイトルで続けてきたこのシリーズですが、OpenZFS on OS Xの正式リリースに対応して改題しました。
本命中の本命ですし、ZFS on Macに「次」は多分無いでしょうから・・・

しかし長い名前ですね。長いのでOpenZFS on OS X=OoO X=O3Xという略称が提唱されています。
MacZFSの後継として名前を継承するか、OpenZFSの一味として名前を付けるかで若干モメたっぽいですが、OpenZFSを採ったようです。
(英語の微妙なニュアンスもわからない上、一番活発なircを見ておらずMLだけ斜め読みした感覚なので完全に余談ですが、旧来のMacZFSを開発してきた人達とZFS on Linuxベースで開発を進めてきた人達はあまり仲良くなさそうな気がします。まあMacZFS側からすると黒船襲来っぽい感じで(違うか)わからないでもないけど・・・)

さて、今回からはOpenZFS on OS X(以下O3X)について検証していきたいと思います。
思いつく範囲だと
・HFS+との差異
・ZEVOとの相互運用性
・ZFS on Linux等他のZFS実装との相互運用性
・netatalk+ZFS環境との相互運用性
こんなところでしょうか。

一番気になるのはZEVOとの相互運用性です。
というか、(一方通行な)ZEVOからの移行問題ですね。移行できればもうZEVOに戻ってくることはないので。

その他の相互運用性は蛇足ですが、トラブル時のデータ復旧などでは他のプラットフォームでマウントできた方が嬉しいことが多いです。
netatalk動いてるサーバーが死んだ際に取り急ぎHDDだけMacに繋いでデータが読めれば便利ですし、本家たるillumosで読める状態で運用できれば安心感が増します。
実際、ZFS on Linuxでresilverが延々繰り返されるトラブルに遭遇した際、OpenIndianaでimportしたら何事もなく完了した、なんてこともあったし。
このあたりについてはillumos・FreeBSD・ZoL・O3Xは共にOpenZFS陣営なのでfeature flagsの対応/非対応だけ注意してれば容易にimportできます。
-o version=28でzpool createしておけばSolaris11でも読めるはずです。

とりあえず今回の話題は(大して問題のなさそうな)ファイル名についてです。

2014/03/25

ZFS on Mac (5) OpenZFS on OS X、リリース

ZFS on Macが大きなマイルストーンに到達しました。
開発中だったMacZFSのalpha版OpenZFS on OS Xとして3/13にリリースされました。
ZFS on Linux 0.6.2ベースのバリバリの最新版、Snow LeopardからMavericksまで対応と非の打ち所のないZFSです。

じゃあちょっと経緯書くわ。

2013/09/07

ZFS on Mac (4.1) MacZFS alpha近況

大して内容が無いので5じゃなく4.1。

MacZFS alpha版の開発がかなり進んでいるみたいです。前回は「フォルダコピーでクラッシュ」というのもとうに解決され、今ではちょっと試したくらいでは不具合が見つからない程度まで安定している(ように思えます)。
バリバリの開発途上なので常用できるわけではもちろん無いですが、ビルド済みのバイナリが上がっているので手軽に遊んでみることはできます(貼っていいかはわからないが、登録せずに参照できるMLに貼られているURLだからよしとしよう・・・)。


ZFSといえば、ZFS on Linuxもstableが0.6.2になりましたが、既にMacZFSにも取り込まれているという・・・何やら凄いスピードで開発が進んでます。
OpenSolarisベースではなくZFS on Linuxベースの開発に移行してから、(どうやら)スーパーハカーならぬスーパーデベロッパーが降臨したらしく半年ほどで「とりあえずモジュールがロードできる」から「だいたい動く」まで進んでいるらしい。速すぎてわけがわからない。ファイルシステムですよ?

ZEVOで問題のあったフォルダのカスタムアイコンなんて言うに及ばず、ZEVOでは非対応だったzvolまで既に対応していたり。zvolがあればZFSのプール上にHFS+のボリュームも作れるので、正規化等々HFS+との互換性が問題になるケースでも問題を起こさず運用できる見通しが立ちます。
NAS→ZFS→zvol→iSCSI→Macでようやく動かせたHFS+ on zpoolがいとも簡単にできるようになる(はず)。

そんなわけで、約1年前に書いた動向なんて何の役にも立たないほど状況が激変してます(ZEVOの逝去含め)。

いやーstableなMacZFSの停滞、ZEVO CEがリリースされるまでの牛歩のような日々を考えると、ここまで情報を追いかけるのが大変になるとは思わなかった。
LeopardにZFSが載るという話が出てから今日までの(そしてこれからも続くであろう) 紆余曲折はそれだけでもちょっとした本になりそう(言い過ぎ?)。

ここまでハイペースで開発が進んでいると、Mavericksに本格的に移行するまでにはstable(少なくともrcくらい)は間に合うんじゃないかと期待してしまいますね。

2013/08/18

zfs send/recvについての考察

MacZFSのalpha版、試しているのですがちゃんと動きません。具体的にはFinderからZFSボリュームにフォルダをコピーするとクラッシュ。カーネルパニックすらなく突然再起動。
自分のビルド/導入方法が悪いのかとも思ったが少し古め(20130730)のビルド済み版でもクラッシュ。実機でもクリーンインストールしたVMでもダメだったので環境依存では無さそうだが・・・

本当にバグのようならレポートしないといけないですね。しかしMLも複数あるしgithubやircもあるしで、いったいどこに報告すればいいのやら・・・


さて、表題の話です。
ZFSはsnapshotを利用した高度なバックアップが実現できることが魅力ですが、これらsnapshotの受け渡しに利用されるzfs send/recvの挙動は中々謎が多いです(個人的には)。
公式のドキュメントを読めばいいはずなのですが、素人には少々難解で正直何を言っているか掴みきれない面があります。何かと直訳っぽいのが難解さの主要因ですが、かといって本家英語版ドキュメントを読んでも自分の頭では理解しきれなかったりします。

というわけで後々のために、今回は自分に必要な機能について検証してみたいと思います。
環境はZEVO・・・ではなくZFS on Linux 0.6.1です。

2013/08/04

ZFS on Mac (4) ZEVOの問題点

前回までにMac向けZFSとしてZEVOの紹介や簡単な検証を行ってきたわけですが、何もかもうまくいくわけではなく多少の問題があることもわかってきました。
これまでの記事を読んで「ZEVO使えるかな?」と思って導入したら困った、という人が出ないようにZEVOのダメなところも気付いた範囲でまとめてみようかと思います。

その中でも特に大きかったのが前々回の更新から半年以上浦島太郎していたことによるZEVOを取り巻く状況の変化です。これについては後半に書きます。

2013/07/30

ZFS on Mac (3) ZEVOとHFS+の互換性

前回から長いこと放置してしまったわけですが、そろそろ本格的にZEVOを導入したくなってきたのでちゃんと検証してみようかと。

そんなこんなしてる間にZFS on Linuxもstableになったり長らく休眠してたMacZFSも更新されてたりしますが、ZEVOは相変わらず1.1.1のままなので特に取り巻く状況は前回から変わらず。

本格的に使っていくにあたって、検証しておきたいこととしては
・本家SolarisのZFSv28と比較し各機能(サブコマンド・Snapshot等)はどれだけ実装できているか?
・SolarisやZFS on Linuxとの相互利用はどれだけ可能か?(緊急時のサルベージを考慮して)
・現在使っているオレオレバックアップスクリプトは動くか?
・パフォーマンスは実用レベルか?
・不安定になったり、特定の操作でカーネルパニックになったりしないか?(重要)
・データ消えない?(最重要&しかし完全検証不可)
・リソースフォークや拡張属性、AppleDoubleの動作がどうなっているか
・大文字/小文字の区別やUnicode正規化など、HFS+と同様に扱えるか
といった点が挙げられますが、ZFS独自のメリットを享受する以前にHFS+で動いていたものが動かなくなると大変なので、まずは後ろ2つについて検証してみる。

2013/01/25

ZFSの障害発生をメールで自動通知

ほったらかしにしてたら1ヶ月経ってしまった。
筆が遅くて数十分でブログネタ一本書いたりとかできないタイプなので、
ちょーっと忙しくなると(優先順位が低いだけに)放置しがちである。

というわけで(?)今回は軽いネタ。
表題の通りZFSが動いてるサーバーでディスクが逝ったなどの障害が起こった際に指定したメールアドレスへ障害発生通知を送ってもらいましょう。それだけ。
「ん?mailコマンドで送って終了だろ?」で終了といえば終了だが、サーバーが動いている家のプロバでは(多分)OP25Bとやらでローカルからメールが送れないので、OP25Bを回避するためにGmailアドレスから送信する。
これもmailなりsendmailを色々いじればいけるんだろうけど、知らんのでRubyになんとかしてもらう。
これやるためにサーバーにRubyするのは限りなく不毛(他のやり方があるはず)だと思われるので元からRuby入れてる人向け。いちおう1.9でやってます。

2012/12/11

ZFSで「マスターの無い共有ストレージ」は作れるか?


こんな記事がありました。

遠隔地のHDD内のデータを自動同期、クラウドストレージより高速に使用可能な「トランスポーター」とは?
http://gigazine.net/news/20121209-transporter/

どうやら、マスターとなるストレージが(ユーザから見て)存在せず、自動的に同期が行われるネットワークストレージみたいなものらしい。
普通のファイル共有はマスターとなるサーバーがあって、そのマシンがある場所以外からはネットワーク越しのアクセスになってしまうところを、この「トランスポーター」では全機器にローカルデータが

存在しているからアクセスが速いぜ、ということらしい。これは確かに嬉しい。
似たようなものとしてDropboxがあるけど、こっちだとずっと使用料払わなきゃならんしデータがマスターとなるDropboxに置かれるクラウドサービスだからなんか嫌だよねと。これもわかる。
自分も実際クラウドストレージとか便利なのはわかるけどなんか好きじゃない、という理由で自鯖立ち上げて外から繋いでいるわけだし。

で、(自称)ZFS教徒のb00tとしては「これZFS snapshotをうまくゴニョれば似たようなものができねーかな?」と思ってしまったわけだ。
もちろんこの「トランスポーター」をdisっているわけではなく、このサイズでオールGUIで設定できて同期できるネットワークストレージというものは市場には無いし価値があると思う。が、PC1台分のサイズ食ってオールCUIで同期できる偽物を作れるなら面白そう。

実際、「AppleのTimeMachine便利だわー」と思ってPC1台分のサイズでオールCUIでZFS rolling snapshot+send/recvを行うスクリプトを動かすTimeMachineの偽物を面白がって作っていたりする。まぁこれの話は別の機会に。

にしても、「ストレージ」と聞くとすぐ「ZFS!」と思ってしまうこの哀れな思考回路、別にZFS関係無く似たようなものが作れそうな気もするのでちょっと考えてみる。

・基本方針
物理的に離れたところにある2つのNASをマスター/スレーブの区別なく同期させる。
USB-HDDなどのローカルストレージとしなかったのは、ソフトウェアだけで実現するとなるとストレージを繋ぐ先のPCで何らかの同期スクリプトを走らせなければならず、クロスプラットフォームで動かすには厳しいから。NASならば、NASのOS構成を決めうちにしてその上でSamba/Netatalk等を動かせば良い。NASに対してLAN経由で繋げばGbEなのでローカルストレージに近い速度は出せる。マシンに一台ではなく(物理的な)一家に一台で良いし。というか自分はNASしか作れない。

とまぁそれなりに大規模なシステムになることが想定されるので、Dropboxでは厳しいTBクラスのストレージを同期させて、バックアップも兼ねるということを目標にする(じゃないと意味が無い)。

・双方向rsync
 「ストレージ」「同期」と聞いて誰もが(?)すぐ思いつくのはやっぱり大正義rsyncだろう。
ssh経由で動かすこともできるので遠隔地のマシンと同期を取ることも可能。
とは言ってもrsyncはA→Bの片方向同期(Aの更新をBに反映)しかできず、Bの更新をAに反映するにはA側だけではなくB側でもrsyncを動かす必要がある。この点はZFS snapshotも同じことではあるが。
双方向で--updateと--deleteオプション付きでrsync動かせばできそうな気がする。
また、lsyncを使って更新チェックすればほぼリアルタイムで同期が行えそう。

Unison
異なるコンピュータ間の同期ツールとしてUnisonがある。最初から双方向同期をするためのツールとして開発されているので、rsyncを双方で動かすとかよりもトラブルが起きにくそう。一方、lsyncみたいなツールはないので自動同期を行うにはcronとかで定期実行する必要がある。

・ZFS snapshot
ZFS本来の機能として備わっているのはsnapshot生成機能とsnapshotのsend/recvによる転送機能(sshは経由できる)だけである。というわけで同期スクリプトは自前で作る必要がある。

まずは任意の1台でsnapshotを生成し、それを各マシンへsendによってコピーして全てのマシンに共通のsnapshotを持たせることから始める。
次に全マシンでcronを動かし同時刻にsnapshotを生成し、一番前回との差分が大きいsnapshotをマスターとして他のマシンにsendする(他のマシンのsnapshotは上書きされる)という感じだろうか。「一番前回との差分が大きいsnapshotを調べる」という動作をどのマシンがやるかという問題はあるが(1台に固定するとマスターが存在することになってしまう)。
この方法だと、前のsnapshotを生成してから同期を行うまでの間に複数のマシンでデータが更新されると、更新したデータ量が少ないsnapshotは問答無用で消されるという問題がある。
inotifyあたりを上手く使って、ファイル更新に合わせてsnapshot生成が動けばほとんど回避できる気はする。
ZFSを使うメリットとしては、古いsnapshotを即時削除しなければ世代バックアップもついでに行えるという点だろうか。

とまぁちょっと(本当にちょっと)調べた限りだと双方向rsyncが安定して動くなら一番便利そうではある。次点はUnisonだろうか。ZFSはsnapshot同期で安定しなさそう、双方で編集してた場合にデータが保全される保証がない、など一番イケてないように思える。そりゃそうだ。rsyncとUnisonは同期のために設計されたちゃんとしたツールだし、一方ZFSの方は思いつきで考えた方法を書いただけだ。

というわけで実際に「トランスポーターもどき」を作ろうと思ったらZFSを利用してというのは選択肢に入らない。が、「rsyncで双方向同期!」なんて普通にやられてる(「rsync 双方向」でググれば色々出てくる)し、rsync素人の自分が導入してみました、じゃネタにもならない。Unisonも同じく。

なのでZFSで遊んでみよう。でもってrsyncやUnisonと比べてみる。検証してるフリして結論ありきだなオイ!
まぁ、UMPC話もZEVO検証もオチまで辿り着いてないのにブログネタ増やしても仕方ないんだが・・・


あとがき inotifyについて
この手の同期を行う上でキモとなるのがファイル更新検知である。これができないとcronで定期チェックとかになってしまうが、cronを用いずにファイル更新検知による動作ができるならコンフリクトの可能性はかなり減らせる。大人数でガンガン編集する共有領域ならそれでも問題となるが、個人で拠点毎にそれぞれストレージを置くならコンフリクトはまず起きなくなるはず。

rsyncの場合、lsyncdを使えばそれが実現できるが、他のツールに転用はどうやら無理そう。
lsyncdが使ってるのはinotifyというLinuxのイベント監視機能なので、UnisonやZFSでファイル更新検知を実現するならinotifyの機能を使おうということになる(多分)。

で、inotifyを使うツールとなると何やら色々存在する。inotify-tools、incron、fsniper、gamin・・・名前的に用途に一番近そうなのはincronだが、なんだかよくわからないので調べたり試す必要がありそうである。

2012/11/19

ZFS on Linux 0.6.0 rc12リリース

表題の通りZFS on Linuxがバージョンアップしました。
って、5日ほど前ですが・・・w

0.6.0がrcに入ってからかれこれ1年半以上経ってrc12まで達してしまい、おいおいrc取れるのかよと不安にはなるものの、一応それなりに安定して使えてます。
ファイルシステムが「それなり」じゃダメだろ、というツッコミはあるけどね。とりあえず自宅では1年半近くデータロスト無く運用はできてます。HDD4台交換(1台ずつ)とかも経験したし。

LinuxでZFSがネイティブに動くっていうのはかなりの有難みを感じられるので、ヒトバシラーな方は是非お試しを。

すいませんZEVOの検証も近いうちにやります・・・(100日以内という意味)

2012/11/01

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が「どれくらい使えるか」を検証していきたいと思っています。

2012/10/09

ZFS on Mac (1) 最近の動向

ZFSというファイルシステムを知っていますか。
元はSolaris向けに開発されたファイルシステムですが、数々の先進的機能を持っているため現在では様々なOS向けの移植プロジェクトが存在しています。今回は日本語情報が少ない、Mac向けZFSの話を中心に書いていくつもりです。

今回に限らず、このブログでは主にSolaris以外でのZFSについて書いていこうと思ってますので、ZFSそのものを知らないという人にはよくわからない話が続くと思います。

さて、様々なOSに移植されていると書いたZFSですが、私の知るところではFreeBSD、Linux、Macあたりに移植されています。
従来のソフトRAIDより優れた点が多いため、自作NAS等で用いられる機会の多いZFSですが、自作機でSolarisを動かすハードウェア的なハードルなどもあって最近はFreeBSD(あるいはFreeBSD派生のFreeNAS)で使われることが多いんじゃないでしょうか。
Linux向けのZFSとしてはzfs-fuseが有名ですが、最近はZFS on Linuxというfuseによらないネイティブ移植版も随分と使えるようになってきました。こちらについても機会があったら色々書きたいと思っています。

 で、本題のMac向けZFSですが、こちらはあまり芳しくない状況でした。
 Leopard〜Snow Leopardの頃はOS標準のファイルシステムがHFS+からZFSに移行するという話もあり、Apple公式の開発プロジェクトも盛んだったのですが、白紙に。公式プロジェクトも閉鎖されてしまいました。
成果物を引き継いだOSSのプロジェクトがmac-zfsとして発足しましたが、本家OSSの最終版であるv28に対してv8と、バージョンが古いものになってしまっています。安定版ではあるものの、最新の機能を使いたかったり4年?前のバージョンでは・・・という人もいるんじゃないかと思います。
そんな中、Apple公式のプロジェクトに携わってきた社員が設立したベンチャーから「ZEVO」という名称でv28ベースのMac向けZFSが出るという話が1,2年前ほどに出てきて、実際に今年の頭に出ました。が、有償製品であるとか肝心のRAIDZが使えるバージョンがまだ出てない(そして出ないまま終わった)とかで、ZEVOの期待外れ感は否めないものでした。

そんな折、今年の7月に先述のベンチャー(Ten's Complement)がGreenBytesというストレージ屋さん?に買収されました。ああこれでZEVOは使える製品が出ないままBtoBの世界へ消えていくのね・・・という感じでオワタ、という流れだったのですが。
数日後、なんと「ZEVO Community Edition」という形で無料のZEVOが9/15にリリースされると発表されました。フリーではなく無料というのが微妙なところで、つまりバイナリで配布とのことなんですが、それってライセンス的にどうなのとか致命的な機能制限とかはないのとか色々疑問もありましたがとにかく大きな動きでした。
(ソースコードに関する後日談ですが、「元のZFSはCDDLなんだからソースよこせ」と先述のmac-zfsの開発者がメール送ったらくれたみたいです。)

そして実際に、9/15にZEVO CEがリリースされました(1日くらい見逃してたけど!)。
無償版の制限としてプールのサイズ上限が16TBまでなのと、dedupが使えないこと、将来提供予定?のGUIツールが無い(要らん要らん)などがありますが、それ以外はRAIDZ1,2,3や圧縮等々一通り使えるとのことでかなりいけそうな感じになっています。やったね!
(zvolに関してはmac-zfs、ZEVO共に未実装で使えません。これは残念。)

今後は、ZEVOのセットアップとZEVO(&Mac)固有の挙動についてと、casesensitivityやnormalization等のHFS+との相互運用性に関する部分についての検証を書いていけたらなと思います。