ぎっくり腰からのリハビリで記事を一つ書きます。
私はずっと悩んでいました。automount
を使って、外部のNASドライブをSMBでマウントしていると、どんなにがんばっても7日間で切断される減少が発生します。運がいいとそのまま継続して利用できますが、にっちもさっちもいかない場合は、再認証させつつ、umount
& mount
の繰り返しを余儀なくされる上、次、いつマウントが外れるかも謎です。(参考→ Mac Sierra がブートしなくなった原因と対処方法)
こんなにアホらしいことはないので、解決策を別の視点から探し、ついにたどり着きました。結論から行くと、フツーに mount
せよです。
launchctl で、home directory 配下に NASドライブを mount する
とは言え、/etc/fstab
などはないので、launchctl
を利用して、shell を書いて、それを実行させます。ポイントは2つあります。
- home directory 配下にマウントさせる場合、login ユーザの権限で mount させること
-
mkdir -p
しておくこと
mount shell の作成
まずは、login user で実行可能な場所に、mount するための shell script を配置します。例えば、iTunes
のディレクトリを外部NAS で共有しているケースでは次のような書き方になります。
# !/bin/sh
mkdir -p /Users/<username>/Music/iTunes
mount_smbfs '//<domain name>;<smb user>:<smb password>@<hostname>/<shared directory name>/<folder>' /Users/<username>/Music/iTunes
< >
内は適宜おきかえて読んで・書き換えてください。ふつーの mount_smbfs
を実行しているだけです。
先にも書いたように mkdir -p
は埋めておいてください。mount すると、起動時に勝手に消してるケースが少なくないです。
launchctl の書き方
次に、この shell script を自動実行させるために、launchctl
を使います。これは (1)起動時 (2)ログイン時、の二通りで記載するファイルが変わりますが、今回は「起動時」で行きます。作り方は
- /Library/LaunchDaemons/ 配下に、起動用の
plist
を作成する - 作成したファイルの所有権を
root:wheel
にする
だけです。サンプルはコチラ。ファイル名の規則はよくわかっていませんが、com.<vendor>.<function>.plist
あたりになってれば問題なさげです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.<vendor>.<function></string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>ProgramArguments</key>
<array>
<string><実行ファイル名></string>
</array>
<key>UserName</key>
<string><ログインユーザ名></string>
</dict>
</plist>
これで、7日以上経過しても mountしたままでいけます。実行する shell script 内で chmod
や chown
をうまく使いながらやれば、/Volume/
配下に起動時マウントさせる方法もできるようです。