« KVM on Fedora 7 test 4 | トップページ | VMware Fusion (Beta 3)のネットワークアドレスを変更する »

LinuxからHFS+ボリュームを読み書きする (HFS+ as cross-platform file system)

以前のエントリ「Mac OS XからNTFSパーティションを読み書きする - MacFUSE + NTFS-3G」において、クロスプラットフォームなファイルシステムとしてNTFSを検討してみましたが、Mac OS XにおけるNTFS-3Gのパフォーマンスがよくないという問題がありました。Mac版NTFS-3Gの改善を待つという手もありますが、他の方法を検討してみたところMac OS Xがネイティブで使用しているHFS+も候補として悪くないことが分かりました。

最近のLinuxカーネルは(少なくとも現在試用しているFedora 7では問題なく)、デフォルトでHFS+パーティションのマウントと読み書きに対応しています。しかも、パフォーマンスに関しても全く問題なく、手元にあるUSB外付けHDで、30MB/s程スピードでファイルの書き込みができました。漢字のファイル名についても、Linux側でロケールをja_JP.UTF-8にしている限りは問題ありません。

一方、WindowsはデフォルトではHFS+ボリュームのマウントはできませんが、Mediafour MacDrive ($49.95)をWindowsにインストールすることで、HFS+の読み書きを問題なく行うことができます。私はちょっと古いMacDrive 5しか所有していませんが、Windows XPから日本語ファイル名を含むHFS+ボリュームへのアクセスが問題なくでき、パフォーマンス上の問題もないことを確認しています。最新のMacDrive 7では、Windows VistaとBoot Campにも対応しているそうです。

残念ながらSolarisからHFS+ボリュームにアクセスする手段はないようなので、Solarisとのファイル共有だけネットワーク経由にすることにすれば、HFS+はMac OS X、Linux、Windowsで共通に使用できるローカルな共有ファイルシステムとして有効な選択であると言うことができます。

GNOMEデスクトップのLinux環境では、USB外付けディスクであれば接続しただけで、自動的に/mediaディレクトリ配下に接続したディスクのHFS+パーティションがマウントされ、デスクトップにはマウントしたディスクのアイコンが現れます。

ただし、マルチブート構成にした内蔵HDのMac OS Xパーティションは、自動的にはマウントされないため、以下のようにmountコマンドで明示的にマウントする必要があります。

$ sudo mkdir /mnt/macosx
$ sudo mount -t hfsplus /dev/sda2 /mnt/macosx

なお、LinuxにおけるHFS+パーティションの読み書きは、現状ジャーナリングがオフの場合に限定されています。ジャーナリングが有効になっているHFS+パーティションでは読み込みだけができるようになっています。HFS+のジャーナリングをオフにするときは、Mac OS X上のコマンドラインで、

$ diskutil disableJournal disk0s2
Journaling has been disabled on disk0s2

のように実行し、オンにするときは、

$ diskutil enableJournal disk0s2
Journaling has been enabled on disk0s2

とすることで、いつでもジャーナリングをオン/オフすることができます。

ジャーナリングは、思いがけない電源断においてもファイルシステムを安定に保つための有効な手段です。そのため、Mac OS X全体のボリュームのジャーナリングをオフにしてLinuxからHFS+への書き込みを常用するのはお勧めしません。Mac OS Xとユーザのホームディレクトリはジャーナリングオンを保ち、LinuxやWindowsとの共有専用のパーティションや外付けディスクを用意し、そこだけジャーナリングを無効にするのが安全であろうと思います。

なお、HFS+はUNIXベースのファイルパーミッションと互換性があるため、Mac OS XとLinuxとで使用するユーザのUID/GIDを合わせておくと都合がいいです。Mac OS XのUID/GIDは501番から採番され、Linuxでは500番から採番されるため、多くの場合、両者のUID/GIDはずれているはずです。この問題を修正するには、Linux側でrootでログインし直し、/etc/passwordと/etc/group内の該当ユーザのUID/GIDを修正した後、ホームディレクトリと/tmpディレクトリの一時ファイルの所有者を変更します。

# chown -R <user>.<group> /home/<user>
# find /tmp -user 500 -exec chown <user>.<group> {} \;

ここで、<user>がアカウント名、500が/etc/passwd修正前のLinuxのUIDです。以上の作業が完了後、該当ユーザでログインすれば、マウントしたHFS+パーティションのアクセスが両OS共通のアカウントでシームレスにアクセスできるようになります。

|

« KVM on Fedora 7 test 4 | トップページ | VMware Fusion (Beta 3)のネットワークアドレスを変更する »

linux」カテゴリの記事

mac」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/181807/15291022

この記事へのトラックバック一覧です: LinuxからHFS+ボリュームを読み書きする (HFS+ as cross-platform file system):

« KVM on Fedora 7 test 4 | トップページ | VMware Fusion (Beta 3)のネットワークアドレスを変更する »