あいつの日誌β

働きながら旅しています。

MacBook Pro (Retina, 13-inch, Late 2012)にSDカードを挿してSSDを増量したい

あらすじ

MacBook Pro の記憶容量がだいぶ少なくなってきました。というわけでこれを買いました。

iTunes のフォルダを移動させてシンボリックリンク貼ると結構容量に余裕がでます。やったね。

% /usr/sbin/diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *121.3 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                  Apple_HFS Macintosh HD            120.5 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *61.9 GB    disk1
   1:               Windows_NTFS MiniDrive               61.9 GB    disk1s1

問題発生

なんですが MacOSX では外部ストレージが装着されたままだと Deep Sleep してくれないらしいです。つまりある朝出かけようとすると MacBook Pro のバッテリーが無くなってしまっているなんてこった。

スリープモード

Mac はスリープモードになると、メモリーに電力供給が行われている状態と、そうでないモードが存在します。

モリーに電力供給が行われている状態、つまりメモリーにデータが保存された状態です。

そこから長時間スリープモードはメモリの内容を HDD(SSD) に書き出してメモリー電力供給を行わない状態に移行した状態がディープスリープです。

どうする?

sleep したタイミングを察知するスクリプトが存在するので、sleep, wakeup のタイミングで都度外部ストレージを mount, unmount すれば行ける気がする。

sleepwatcher

% brew install sleepwatcher
% echo "/usr/sbin/diskutil list | grep -e 'disk[1-9]s.*' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil unmount {}" >  ~/.sleep
% echo "/usr/sbin/diskutil list | grep -e 'disk[1-9]s.*' | sed 's/.*\(disk[0-9].*\)/\1/' | xargs -I{} /usr/sbin/diskutil mount {}" >  ~/.wakeup
% chmod +x ~/.sleep
% chmod +x ~/.wakeup

動作確認

% /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep --wakeup ~/.wakeup

この状態で別のターミナルを開いて sleep させる

% /usr/local/sbin/sleepwatcher --now

以下のようになっていればOK

% /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep --wakeup ~/.wakeup

Volume MiniDrive on disk1s1 unmounted
sleepwatcher: sleep: /Users/okamuuu/.sleep: 0
Volume MiniDrive on disk1s1 mounted
sleepwatcher: wakeup: /Users/okamuuu/.wakeup: 0

sleepwatcher を常時起動させる

% cp /usr/local/opt/sleepwatcher/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist ~/Library/LaunchAgents/
% launchctl  load ~/Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist

確認

% launchctl list | grep sleepwatcher
3022    0       de.bernhard-baehr.sleepwatcher

時々うまく動作していない時があるんだけど、まあ普段持ち歩かないので私の場合そこまで害はない。 持ち歩く用のPCの場合は素直に新しいPC買ったほうがいいかも。

おしまい。