「NAS」はいまや一家に一台……とまではいかないが、幅広いユーザ層に利用されているデバイスだ。Network Attached Storageという語源を知らなくても「ナス」で通じるし、テレビ視聴/録画機能を持たせた家電製品(ex. nasne)も多く存在する。NASと謳われてこそいないものの、Appleの「AirMac Time Capsule」という製品の基本コンセプトはNASそのものだ。
そのNASだが、共有領域のデフォルトのファイル共有プロトコルは「SMB」で事実上統一されていると言っていい。NFSやAFPなど他のプロトコルをサポートするNASは多いが、SMBをサポートしないNASというのは(量産機では)聞いたことがない。OS Xデフォルトのファイル共有プロトコルはいまやSMBということもあり、なんの疑問も持たずにSMBでマウントしている向きも多いことだろう。
前置きが長くなったが、お題の「NASのアクセス速度を改善する」とは、共有領域をSMBでマウントしたときのパフォーマンス改善と言い換えても言い過ぎではない。そして、macOS SierraのSMBサポートは、以前と多少変化している。
アクセス速度改善について考える前に、SMBが通信するしくみについて理解しておこう。ひとくちに「SMB」といっても単一仕様/後方互換のプロトコルではなく、バージョンごとに大きく仕様が異なる。そのため、セッションを開始するときには確認作業(ネゴシエーション)を行い、互いが対応しているもっとも高いバージョンのSMBで通信するしくみだ。ざっくりいえば、SMBのバージョンが上がれば性能も向上するため、SMB 1よりSMB 2、SMB 2よりSMB 3のほうが有利となる。
たとえば、SMB 3をサポートするmacOS Sierraを利用していても、NASなどSMBサーバ側がSMB 1しかサポートしていなければ、SMB 1での接続となる。互いのSMBのバージョンを確認し、"会話"が可能なもっとも高いバージョンを選択した結果だ。
利用しているSMBのバージョンを調べるには、「smbutil statshares -a」を実行し、「SMB_VERSION」行を見ればいい。以下に示す2つの図版は、上がEl Capitan、下がNAS(I/O DATA HLS-C2.0HF)。El CapitanのSMBサーバはSMB 3対応のため、同じくSMB 3をサポートするSierraでは「SMB_3.0」と表示されている。しかし、NASはSMB 1しか対応しないため「SMB_1」だ。
パケット署名を無効化する
つまり、NASのアクセス速度を改善するには、SMB 2/3をサポートする機種に乗り換えるか、(提供されているのならば)SMB 2/3を利用可能にするアップデータを適用することが近道だ。しかし、Sierraの場合、macOS側の仕様変更によりSMB 2/3をサポートするNASでも遅く感じてしまうことがある。それは「パケット署名」だ。
パケット署名とは、SMBプロトコルにデジタル署名を付加するセキュリティ機能のこと。暗号化処理は伴わないため、盗聴を防ぐことはできないものの、データの改ざんやなりすましの防止に効果がある。Sierraに用意されているSMBの実装では、SMB 2またはSMB 3で通信しているときデフォルトで有効にされている。
実はこの設定、通信速度の低下を招いてしまう。SMB 2/3に対応しているNASなのに遅く感じる場合は、このパケット署名が影響している可能性がある。だからパケット署名を無効化してしまおう、というのがもうひとつのNASのアクセス速度改善策だ。
パケット署名を無効化するには、Terminalから以下のとおり操作してテキストエディタ(nano)を起動し、下のスクリーンショットどおり「[default]」と「signing_required=no」の2行を入力してからファイルを保存すればいい。SMBサーバをマウントし直せばパケット署名が無効になり、ファイルの転送速度も改善されるはずだ。セキュリティは低下するが、家庭用LANのように閉じられた環境で利用するかぎり支障はないだろう。
$ sudo nano /etc/nsmb.conf
Password:
なお、SMBサーバとして使用するSierraのパケット署名を無効化したい場合には、システム環境設定「共有」パネルで「ファイル共有」のチェックを外し(SMBサーバをOFFにする)、Terminalから以下のコマンドラインを実行、その後「ファイル共有」のチェックを入れてSMBサーバを稼働させればOK。クライアント側の設定が必要なくなるため、MacをSMBサーバとして活用している場合には重宝することだろう。
$ sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server SigningRequired -bool FALSE