Mac OS Xではデフォルトというか出荷状態でのファイルシステムは大文字と小文字を区別しません。UNIX的に使いたいときには大文字と小文字が区別できた方がいいなぁ、Androidのソースとかも大文字小文字区別するファイルシステムじゃないとビルドしてくれないし、と思っていました。
ところが、NativeScriptとかGenymotionとかAcrobat ReaderとかUnreal Engineとか大文字小文字区別するファイルシステムでは動いてくれないソフトウェアも増えてきまして、NativeScriptとかはgithubでソース公開されているので「ここ直したら大文字小文字区別しても動くからこのpull request受け入れて」とやってきたのですが、意地はるのもどうかという気になってきました。
という訳で、Time Machineでどうせバックアップとってるんだし、それを大文字小文字区別しないファイルシステムにリストアにすれば楽勝じゃない? と思ったら楽勝じゃなかったのでメモしときます。
- まず、cmd-Rでリストアモードでブートしてストレージを大文字小文字区別しないファイルシステムで初期化してからリストア…
- してみたらご丁寧に大文字小文字区別のファイルシステムで初期化しやがってくれました。そうだよ、こいつ、こういう馬鹿丁寧な奴だっけ。
- 一度大文字小文字区別なしファイルシステムで初期化してOSインストールしてから「移行アシスタント」でリストアを試みる。
- バックアップを見付けられない。ファイルシステム違うから復元対象と認めてくれないのかしらん。
という訳で、リストアモードのターミナルからrsyncによるコピーで復元してみました。以下の手順。Time Machineのバックアップ先のIPアドレス(我が家ではTime Capsule)とボリューム名はあらかじめ覚えておく必要があります。
- cmd-Rでリカバリモードを起動。ここではリストア先は「
/Volumes/MacHDD
」としますが、環境に合わせて適当に読み替えて下さい。 - ターミナルを起動
- 「
mkdir /Volumes/TimeMachine
」を実行してマウント先を用意 - 「
mount -t afp afp://ユーザ名:パスワード@IPアドレス/ボリューム名 /Volumes/TimeMachine
」にてTime Machineのストレージをマウント - 「
hdiutil attach /Volumes/TimeMachine/バックアップ名.sparsebundle
」にてTime Machineバックアップをマウント 参考 - 「
cd /Volume/Time\ Machineほげほげ/バックアップ名/Latest/
」して、ls
とかで中身が最新のバックアップであることを確認 - tmpディレクトリを「
mkdir /Volumes/MacHDD/tmptmp
」で用意。(/tmp
がreadonlyになってるし/private/var/tmp/
は容量が足りないし、/Volumes/MacHDD/tmp/
はリストア途中で上書きされて消されちゃうので注意) - 「
caffinate ./MacHDD/bin/rsync -avE -T /Volumes/MacHDD/tmptmp/ MacHDD/ /Volumes/MacHDD/
」にてリストア。しばし待つ。(caffinateはリストア中にスリープしないためのコマンド) - 「
chmod -R -a# 0 /Volumes/MacHDD
」でACL削除 参考
おかげさまで、これにて大文字小文字区別しないファイルシステムになりました。Unreal Engineもうごいたよ。わーい。後で気が向いたら/tmptmp
消しておこう。