今回は「ファイルシステムの追加」について。ユーザ空間で稼働するファイルシステムを実装するためのフレームワーク「FUSE」のOS X移植版をもとに、未サポートのファイルシステムを利用する術を探ってみよう。
ユーザ空間で動作するファイルシステム「FUSE」
OS Xのファイルシステムは、KEXTを用意することで拡張できる。実際、標準構成ではサポートされないファイルシステムを追加する試みがユーザ有志によりなされてきた歴史があり、「Mac ZFS」はその代表格といえるだろう。しかし、数は決して豊富とはいえず、多くのユーザはシステム標準構成を使い続けてきた。
そこで期待されたのが、ファイルシステムをユーザ空間に実装する実装系「FUSE(Filesystem in USErspace)」をOS Xに移植する試みだ。そのパフォーマンスはカーネルに近い空間で動作するファイルシステムより見劣りするものの、比較的容易に実装できるため、簡易的・実験的なファイルシステムの運用に適している。実行環境さえあれば、OSに依存しないファイルシステムも用意できる。FUSEをOS Xで、という動きが出るのも当然だ。
FUSEはLinuxで誕生し、後にFreeBSDなど他のUNIX系OSへ移植され、2007年頃OS Xにも「MacFUSE」という期待のプロジェクトが発足した。しかし、安堵もつかの間、MacFUSEは2009年頃からメンテナンスが滞りはじめ、64bit環境をサポートしない状態のまま64bitカーネルをデフォルトとするOS X Lionの時代を迎えてしまった。それが、MacFUSEからフォークした「OSXFUSE」と「FUSE4x」というプロジェクトが誕生した背景だ。
どちらを利用するかだが、互換性を重視するユーザはMacFUSE互換レイヤーを持つOSXFUSEを、Mac PortsやHome Brewのパッケージに採用されている関係からTerminal愛好者はFUSE4xを選択しているようだ。本稿では、システム環境設定パネルでバージョンアップやアンインストールを実行できるなど扱いやすさを重視し、OSXFUSEを例に解説を進めていくことにする。
手はじめに「sshfs-gui」を導入
OSXFUSEの導入は、パッケージを開きインストーラの指示に従い進めれば完了する。ポイントはひとつ、MacFUSE互換レイヤーをインストールするかどうかだ。デフォルトではインストールしない設定だが、わずか112KBを節約できるだけの差なので、カスタムインストール画面でチェックしておこう。最後にシステムを再起動すれば、インストールは完了だ。
OSXFUSEには(プログラムとしての)ファイルシステムが含まれないため、別途MacFUSE上で動作するプログラムが必要となる。手はじめに、SSH(SFTP)を使いリモートホストの領域をマウントする「sshfs」のGUI版、「sshfs-gui」をインストールしてみよう。最新版は2010年公開のMacFUSE向けだが、互換性レイヤーを備えるOSXFUSEであれば特に支障なく動作する。
ただし、sshfs-guiは入力したパスワードで認証することができないため、事前に作成しておいた公開鍵をリモートホスト側に用意しておかなければならない。Terminalから以下のとおりコマンドを実行し、コピーしよう。
$ ssh-keygen -t rsa
$ scp ~/.ssh/id_rsa.pub ユーザ名@リモートホスト:.ssh/authorized_keys2
これで、SSH(SFTP)経由でリモートホスト上の領域を読み書きできる。アクセス速度はネイティブ動作するファイルシステムに比べれば劣るが、SSHの高い安全性というアドバンテージが得られることがポイントだ。なお、ボリュームアイコンがFinderのサイドバーに表示されないことがあるため、以下の要領で手動アンマウントする方法も知っておいたほうがいいだろう。
$ umount -f /Volumes/ユーザ名\@リモートホスト名
次回は、OSXFUSEで動作する"変化球的な"ファイルシステムをいくつか紹介する予定だ。