Time Machineがひっかかって進まなくなった件

Retina MacBook Proをメインマシンにしてバックアップを外付けSSDにすることで無音の静寂環境を満喫していたのですが、Time Machineが止まってしまいました。バックアップがとれていないと、不安でおちおちアプリの開発もできないので、あたふたして調べてなんとか復旧しました。

経緯

1度目のひっかかり

問題は、バックアップストレージの容量が一杯になった時に起こりました。Time Machineの設定はいじらずに使っていたので、外付けSDDの空き領域が無くなった時に警告がでました。古い領域を削除してバックアップしていいかと、「はい」としか答えられない確認をされたので、OKしてやってもらったらいつまでたっても終わりません。ゆうに2時間はくるくる回る続けていたので、不安になってバックアップボリュームの中身を見ていると、2時間も経っているのにほとんど空き領域が増えていません。しばらく見ていても日付ごとのフォルダ群は全く変化がないように見えます。

どこを消しているやら!?

Time Machineがバックアップを残すルール

AppleのサポートページでTime Machineのページを確認してみると、新しい発見がありました。(Mac ハンドブック:Time Machine

Time Machine では、バックアップディスクの容量がいっぱいになるまで、過去 24 時間分のバックアップが毎時間、過去 1 カ月分のバックアップが毎日、および毎週のバックアップがそれぞれ実行されます。

日本語だと意味が分かりませんが、英語でみると理解できます。

Time Machine keeps hourly backups for the past 24 hours, daily backups for the past month, and weekly backups until your backup drive is full.

Time Machineは、次のルールでバックアップデータを残しているようです。

  • 1日単位で1時間ごとのバックアップ
  • 月単位で1日ごとのバックアップ
  • ディスクが一杯になるまでは1週間ごとのバックアップ

これでも少し意味が分かりにくいですが、一般的に、バックアップにはフルバックアップと差分バックアップがあるので、恐らくこんなことでしょう。

フルバックアップ作成

(a) 1時間ごとに差分バックアップ

(b)(1日の終わりに) 前日からの差分バックアップを作成(前日の1時間単位の差分バックアップを削除)

(c) (1週間の終わりに)前週からの差分バックアップを作成

(d) (月の終わりに)前月からの差分バックアップを作成(前月の1日単位の差分バックアップを削除)

(a), (b), (c), (d)の処理が重なるタイミングの時は、バックアップに時間がかなりかかりそうです。

そして、削除する時には、週次バックアップやなるべく古くて細かい差分バックアップを削除しているのでしょう。単純な差分バックアップの削除だけでは手詰まりになった時に、一番古いバックフルバックアップと古い差分バックアップを合成してフルバックアップを作成し、一番古いフルバックアップを削除しているのだと思います。この合成処理はそんなに単純なことでもなさそうなので、時間がかかりそうです。もし、古い差分バックアップの差分サイズが小さいと何回もこの大変そうな合成処理を繰り返すことになるのでとてもとても時間がかかりそうです。

さて、バックアップと削除のルールが分かったので、そう簡単なことでもなくて時間が結構かかりそうだということも理解できました。しかし、3時間、4時間と経っても終わらないので諦めました。何回か、「バックアップの停止」と「今すぐバックアップを作成」を繰り返してみましたが、状況は進展しません。むしろ、何故かバックアップ対象領域が増えたりしてガンガン古いバックアップが削除されています。

「もう、過去は振り返らないことにしよう!」

外付けSDDのバックアップ領域を全部消去して、1からフルバックアップをとることにしました。

バックアップ成功!

当たり前ですが、ほっとしました。このとき、「バックアップから除外する項目」を設定しておきました。念のため、外付けSDDのボリュームも除外に入れて。

~/Musicがなんと73GBもあります!貴重な少ない外付けSDDの領域のうちiTunesのファイルが73GBも占めていたとは…。サイズがあまりにも大きいのでiTunesファイルは今まで使っていた外付けHDDに永久保存してとっておき、今後はバックアップをとらないことにしました。

2度目のひっかかり

安心したのも束の間、しばらくすると、またTime Machineアイコンがクルクル回り続けています。アイコンをクリックして確認していると、バックアップの作成が7.2MBからいつまでたってもサイズが増えません。そこでネットで検索してみると、Spotlightのインデックス作成でロックしているファイルがあるせいでバックアップが作成できないことがあるらしいことが分かりました。そこで、Spotlightの確認をしてみました。

■ Spotlightのインデックス対象の確認と対象除外

$ mdutil -s /Volumes/trial/
/Volumes/trial:
Indexing enabled. 
$ mdutil -s /Volumes/rMBP\ backup/
/Volumes/trial:
Indexing enabled. 

げほっ。鼻水がでました。

外付けSDDもSpotlightの検索対象なんですか!しかも、バックアップボリュームまで!

すぐに、対象から外しました。

$ mdutil -i off /Volumes/trial/
$ mdutil -i off /Volumes/rMBP\ backup/

そして、Spotlightインデックスの再構築

$ sudo mdutil -E / 

インデックスの再構築は時間がかかるけど、仕方がありません。検索にしないものをインデックスとして持っていても無駄です。ついでに、システム環境設定からSpotlightのインデックス除外項目を設定しました。

今までフォントまでインデックスしてたんですね!システム環境設定のインデックスも意味がわかりません。何か便利な使い方があるのでしょうか。とりあえず今の私には関係ないので除外。

覚悟していたものの、1日経ってもインデックスが終わりません。

本当にインデックス処理してるのか?

不安になってプロセスを監視してみます。Spotlightのプロセス名はmdsらしいので、mdで始まるプロセスをアクティビティモニタで表示。

たまに、コンマ数パーセントCPUを使ったりしていますが、ほとんど処理している様子はありません。

■ システム環境設定からSpotlightのインデックス対象除外

そこで、外付けSSDのボリュームをシステム環境設定からSpotlightのインデックス対象から除外してみました。

手順)

システム環境設定 > Spotlight > プライバシー

  1. 外付けボリュームのアイコンを「Spotlightの検索から除外する場所:」の枠内にドロップ
  2. 枠内に表示された外付けボリュームを「−」ボタンを押して削除

そして、数時間(3、4時間くらい?)すると、Spotlightのインデックス再構築が終わっていました!

さらに、Time Machineのバックアップも正常に終わりました。