Macのストレージ問題を解決する方法にSDカードやUSBメモリを利用する事が多いですよね。最近だとMacの筐体から飛び出さないような特殊形状のSDカードもあります。しかし問題点が。SDカードを挿したままMacの蓋を閉じると完全なスリープに移行せず、スリープ状態にも関わらずバッテリーがモリモリ減っていくことがあります。
対策としてTranscendのJetDrive Lite では、JetDrive Toolboxを導入することでスリープ時にSDカードを自動アンマウントするようなパワーセーブ機能があります。通常のSDカードやMicroSDカード使用者は、Jettisonという600円ほどのシェアウェアを使うことで対策ができます。
いやしかし、自力でなんとかならないものか、、、と思って調べたらフリーソフトウェアとシェルスクリプトで上記機能を実現できたので書き残しておきます。
用意するもの
- SleepWatcher ( macOS Sierra は2.2以降をダウンロード) http://www.bernhard-baehr.de
以上です。SleepWatcherはMacのスリープ時と復帰時にトリガーして指定のスクリプトを実行することができるソフトウェアです。ソースも付いてくるみたいです。
インストール
ダウンロードしたファイルを解凍すると以下のファイルが出てくるかと思います。
├── ReadMe.rtf ├── config │ ├── de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist │ ├── de.bernhard-baehr.sleepwatcher-20compatibility.plist │ ├── rc.sleep │ └── rc.wakeup ├── sleepwatcher ├── sleepwatcher.8 └── sources ├── Makefile ├── sleepwatcher.c └── sleepwatcher.xcodeproj ├── bb.pbxuser ├── bb.perspectivev3 └── project.pbxproj
ターミナルを起動して解凍したフォルダに移動しましょう。
ターミナル上で
sudo cp ./sleepwatcher /usr/local/sbin sudo cp ./sleepwatcher.8 /usr/local/share/man/man8 sudo cp ./config/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchDaemons/de.berhard-baehr.sleepwatcher.plist sudo cp ./config/rc.* /etc/ sudo mkdir -p /opt/sdsleep sudo chmod -R 660 /opt/sdsleep sudo touch /opt/sdsleep/disk sudo touch /opt/sdsleep/sleep.log
とします。/etc/以下に rc.sleep と rc.wakeup があり、これがsleepwatcherのトリガー時に実行されるスクリプトとなります。
rc.sleepとrc.wakeupの最後の行にそれぞれ・・・
# rc.sleep # Auto Unmount volume="SDcard" path=`diskutil info /Volumes/$volume | awk 'match($0, /\/dev\/disk.*$/) {print substr($0, RSTART, RLENGTH)}'` disk=`echo $path | awk 'match($0, /disk.*$/) {print substr($0, RSTART, RLENGTH)}'` touch /opt/sdsleep/disk echo $disk > /opt/sdsleep/disk /usr/sbin/diskutil unmount $disk echo "[`date +%Y%m%d_%H:%M:%S`] Unmounted $path" >> /opt/sdsleep/sleep.log
rc.sleepのvolumeには、いまマウント中のSDカードの名称を入れてください。
# rc.wakeup # Auto Mount touch /opt/sdsleep/disk disk=`cat /opt/sdsleep/disk` /usr/sbin/diskutil mount /dev/$disk echo "[`date +%Y%m%d_%H:%M:%S`] Mounted $disk" >> /opt/sdsleep/sleep.log
保存したら、再起動してください。
起動後、しばらくしたらMacの蓋を閉じて、しばらくしたらまた開いてください。/opt/sdsleep/sleep.log にマウントとアンマウントのログが出ていれば成功です。
# /opt/sdsleep/sleep.log [20170101_12:00:01] Unmounted /dev/disk3s2 [20170101_12:01:01] Mounted disk3s2 [20170101_12:02:01] Unmounted /dev/disk3s2 [20170101_12:03:01] Mounted disk3s2
注意点
- DropBoxなどのクラウドストレージをSDで同期している場合、DropBox等のエージェントアプリによってSDカードが常にビジー状態になるので自動アンマウントできないことがあります。
- HDD等の回転体ストレージの場合、スピンアップ時間を考慮して自動マウント時にsleepコマンドで少し時間を開けてからマウントすると良いでしょう。
- macOS Sierraで確認しています。他のバージョンではわかりません。
- 普通にSDカード挿すとはみ出るので、Mac Book Pro/Air用MicroSDアダプタを使用するのがおすすめです。
- 基本的にはSleepWatcherに同梱されているReadMe.rtfを読もう
もう電源に悩まされない。出先に持っていって50%とかだったら絶望するタイプなのでとても精神的に楽になりました。
私はMicroSDをこれに挿して使ってます。
JetDrive LiteってMacの世代によってサイズが異なるんですね。間違って買わないように・・・