今回は「Mavericksで変わってしまった共有機能」について。OS Xはレガシーを大胆に切り捨てつつ進化を遂げてきたOSだが、ユーザとしては「急に言われてもなあ」という部分もあるはず。リソースが完全に削除された機能の復活は難しいが、そうでなければ手の施しようはあるはずで、それを力技でどうにかしてしまおう、という趣旨だ。

復活できる機能、できない機能

OS Xのメジャーバージョンアップに付きものといえば「新機能」だが、「レガシーの廃止」も一種の風物詩となっている。かつての主要な通信プロトコル「AppleTalk」はSnow Leopardのとき姿を消し、他のUNIX系OSとの互換性を強調するためか長年標準装備されていた「X11」も、Mountain Lionでついにダウンロードを誘導するだけの存在となった。

かつての看板機能に対しても遠慮がない。第99回に書いたが、Mavericksで(マルチメディアAPIとしての)「QuickTime」は事実上終息し、iOSと同じAV Kitの時代がスタートした。AppleTalkが消え去った後もメインのファイル共有サービスとして君臨してきたAFP(Apple Filling Protocol)も、ついにその座をSMBに明け渡した。

Rosettaのようにリソース一式が取り去られた機能はともかく、システム環境設定における表示が変わった程度であれば対処方法は残されているかもしれない。リソースが残されているのならば、機能を復活させる余地はある。しかし、SMBとAFPの関係を整理するのは少々面倒だ。

Mountain Lionに引き続き、Mavericksでも「X11」はダウンロードを誘導するだけの存在だ

Mavericksでは、ファイル共有機能は「SMB」が優先されるようになった

SMB2を優先するせいでサーバにつながらない!?

Mavericksにアップグレード後NASに接続できなくなった、という声を耳にすることがある。その原因はおそらく、Mavericksからメインのファイル共有サービスに昇格した「SMB」……もとい、SMBと上位互換性がある「SMB2」にあると考えられる。

Mountain Lionまで、クライアント側のOS XはAFP→SMBの順に接続をトライしていたが、MavericksからはSMB2→AFPの順に変更された。Mavericks同士のファイル共有はSMB2が優先されるため支障ないが、サーバ側がLinuxなどOS X以外のとき、ややこしい事態が発生する。

一部のNASは、AFPサーバとしての機能をNetatalk(AFP互換のオープンソースソフトウェア)で、Windowsファイルサーバとしての機能をSamba(SMB/CIFS互換のオープンソースソフトウェア、かつてはOS XにもSambaが採用されていた)で代用している。これまではAFP→SMBの順にネゴシエートしていたため問題はなかったが、SMB2を優先するMavericksではそうならない可能性がある。

OS Xのファイルシステム(HFS+)には、独自のメタデータとしてリソースフォークとFinder情報があり、SambaとNetatalkではその扱いが異なる。WindowsにSMB接続したときはNTFSの代替データストリームに保存され、Netatalkも同等の機能を提供するが、現在のところSambaの代替データストリームにそのような機構は実装されていない。だから万全を期すにはAFP(Netatalk)で接続することが無難で、そうしようとなるとFinderの「サーバへ接続...」ダイアログに「afp://サーバ名」と入力して接続するしかない。

FinderのサイドバーからNASにアクセスせず、「サーバへ接続...」ダイアログからAFP接続を明示する

「NASに接続できない」というトラブルはこれとは別で、SMB2の仕様によるところが大きいと考えられる。Mavericksに収録されているSMB2スタックは、Appleにより独自実装されたもので、不明な点が多いのだ。

そのもっともシンプルな解決策は、SMB2を使わないこと……旧いSMB(SMB1)でNASなどのファイルサーバへ接続したほうが速度は劣るもののトラブルは少ない、という判断だ。AFPのときと同様、Finderの「サーバへ接続...」ダイアログに「cifs://サーバ名」と入力すれば、SMB2ではなくSMB1で接続できる。

それではMacらしくない、Finderで開いたら自動的にSMB1で接続してほしいという場合には、以下のコマンドラインを(クライアントとして利用するMacの)Terminalで実行し、リスト1の設定ファイルを作成しよう。ログインし直せば、SMB2を使わずSMB1で接続するようになるはずだ。

「smb://」ではなく「cifs://」とすれば、SMB1で接続できる

$ echo -e "[default]\nsmb_neg=smb1_only" > ~/Library/Preferences/snmb.conf

~/Library/Preferences/snmb.conf

[default]
smb_neg=smb1_only