MacOS Xクリーンインストール後にTimeMachineから復旧する

今回のエントリーをいきなりまとめると、

TimeMachineのバックアップは時々失敗するけど、疎かにせずその度ちゃんとバックアップを作り直すのが一番です!!

HDDが壊れるなどした場合、HDDを換装してクリーンな状態からMacを復元していく作業が待ってるわけですが(もちろん復元するデータをこまめにバックアップしてる場合)、MacOS Xの場合、

  1. 新しいHDDに換装する
  2. MacOS Xのインストールディクスをセットしてディスクから起動する
  3. インストールディスクの「ユーティリティ > ディスク・ユーティリティ」から換装したHDDをフォーマット
  4. インストールディスクの「ユーティリティ > TimeMacineから復元」を選択して復元先や復元するバックアップ等を選択

という手順でMacを復元するわけですが、TimeMacineのバックアップデータが壊れてるとTimeMachineからの復元が失敗してしまいます。で、現に自分のMacがこうなったんですが(苦笑)、そういう状態からの復旧作業をまとめておきます。

エラーログを確認する

TimeMachineからの復元に失敗するとその旨のメッセージと共にエラーログが表示されます。で、そのエラーログの最初の方に復元に失敗したファイル名がずらっと記載されてたりします。エラーメッセージを見たらすごい焦るので余裕がなくなるんですが(実際、同じ作業を何度か繰り返したりしてましたw)、

  • どんなファイルが
  • どれくらいの量

リストアに失敗してるのかをまず確認します。

ここで幸いにも数個のファイルで、且つ復元失敗という不足の事態下で「失ってもやむなし」というファイルなら多分それは問題ありません。復元の異常終了後はシステム終了か再起動を促されるダイヤログが表示されますが、再起動で動くはずです。

問題はシステムに関わるファイルを含む、問題の全貌を把握するには多すぎるファイルが復元に失敗した場合です。この場合はMacOS Xをクリーンインストールした後に、復元可能でシステムに影響しないファイルを選んで復旧していくのが安全です。

方針としてはクリーンな状態を一旦構築して、復旧に利用できるデータだけを戻す。直近で困らない程度の最低限何が復旧できないといけないかの優先順位を決めておくと良いです。

HDDをフォーマットしてMacOS Xをクリーン・インストール

Macの復旧方針が定まったら、まずHDDをもう一度フォーマットします。

MacOS Xのインストールは通常/Usersディレクトリを書き換えないので、前の復元作業で部分的にも復活していればトラブル前のアカウント情報を残したままシステムだけをクリーンな状態にできますが、エラーログでメインで使っているアカウントのホームディレクトリ以下に復元失敗したファイルが無いことを確認できなければ、あまりお勧めしません。

最終的にどうするかはともかく、通常の手順でMacOS Xをインストールします。

MacOS Xにログインしてまずアプリケーションの整理

MacOS Xをインストールディスクからインストールした時点で工場出荷状態に戻ってるわけですから、とりあえずソフトウェア・アップデートします。snow leopardの場合だと「ソフトウェア・アップデート→再起動」を2回くらい繰り返さないと最新の状態になりませんw(2011年10月現在)

MacOS Xをクリーン・インストールする手順を選んだ(その選択肢しかなかった)ということはTimeMachineから何が復元できるか把握しきれてないってことなので、アプリケーションについては復元しようと考えずに一から普通にインストールする方が確実です。

あと初期状態でfinder非表示のディレクトリをfinderで開けるようにしたり、ファイルの所有者を変えたりと、なにかとコンソールの作業が必要になるので、TimeMachineからファイルを選んで復元作業を始める前に.bashrcを整えておくと吉です。

.bashrcについては、

  1. クリーンインストール後のアカウントを復旧作業用として以前とは異なるアカウントで作成
  2. TimeMachineに入って.bashrcが生きているバックアップを探す
  3. sudo mkdir /Users/以前のアカウント名
    sudo chown 復旧用アカウント名 先ほど作成したディレクトリ名
  4. TimeMachineから以前のアカウントを復元
  5. cp 以前のアカウントのディレクトリ/.bashrc ~

という手順で先に以前使っていたアカウントのホームディレクトリを復元して、そこから復旧用アカウントへ.bashrcをコピーしてしまうという手もあります。

ちなみに復旧作業用と以前利用していたアカウントを別名にするのは、バックアップされたデータがどの程度利用可能か分からないからです。また、アカウントごとクリーンインストールした後はTimeMachineから復元しようとすると別のマシンのTimeMachineからの復元という扱いになるため、復旧したファイルは復旧作業をしてるユーザが所有者となり、いちいち復元のためにファイル所有者を現作業ユーザに変更し、復元が完了後に正規のユーザへ所有者を変更する、という作業の手間が必要になります。

なお、この段階では以前使っていた.bashrcを復旧用アカウントにコピーできれば問題ないので、別にユーザを作成する必要はないです。

TimeMachineに入って復旧したいファイルを復元する

アプリケーションのインストールがひと通り終わったら、本格的にTimeMachineからの復元作業に入ります。アプリケーションは前のステップでそれぞれ個別にインストールしてるはずなので、TimeMachineから復旧するファイルはそれらのアプリケーションで利用するデータ、ということになります。

今回の自分のケースでは優先順に

  1. MySQLのテーブル情報
  2. subversionのリポジトリファイル本体
  3. apacheの各種confファイル
  4. 私用で作成してたファイルのあれこれ

これだけをTimeMachineから復旧したわけじゃないんですが、大まかにこれら4つが復元対象でした。ちなみに今回HDDが壊れたのは事務所内で開発や案件の管理、ファイルサーバ、ついでにiTunesサーバと化してた3年ほど前のmacbookで、macportsであれこれ構築してた代物です。なお、macportsのファイルは完全に復元できる見込みを確認できない限り横着して/opt 以下をまるごと復元しようとせず、一からmacportsでアプリケーションをインストールする方が賢明です。

ファイル、あるいはディレクトリ単位でTimeMachineから復元する場合、まずfinderで復元対象のディレクトリを開いてからTimeMachineディスクをブラウズすると、そのディレクトリのバックアップが見られるようになり、TimeMachineから任意のファイルやディレクトリを選択後「復元」ボタンを押すと首尾よく復元してくれるのですが、macportsであれこれ構築してるということは主要なファイルは大体の場合 /opt ディレクトリ以下に揃っていて、且つそのままではfinderから直接 /opt 以下は覗けません。が、

これでfinderから/opt以下に入ることができるようになります。

また先程も書きましたが、HDDをフォーマットして全くクリーンな状態からMacOS XをインストールするとこれまでバックアップをとっていたTimeMachineの内容は別のマシンのバックアップとして扱われ、復元されたファイルやディレクトリは作業アカウントが所有者となります。で、/opt以下は通常、rootやmysql、wwwが所有者のファイルが多いのでパーミッションの問題によりそのまま復元できません。もちろん/privateなども同様です。

なので復元する対象が定まれば、まずroot権限でディレクトリの所有者を現在作業してる所有者に変更したり、パーミッションを変更したりする必要があります。例えばMySQLのデータベース情報が収まっている/opt/local/var/db/mysql5以下を復元しようとする場合、/opt/local/var/db/mysql5はmacportsからMySQL5をインストールした時点で作成されるのでまず、

sudo chown -R 作業用アカウント/opt/local/var/db/mysql5
open /opt

こうして復元するファイルが収まるディレクトリの所有者を作業者アカウントに変更し、finderから/opt以下を開けるようにします。

次にfinderで実際に/opt/local/var/db/mysql5を開いてからTimeMachineに入り、任意のバックアップを選択して復元します。復元する対象が少なければ復元するバックアップが復元したいファイルをすべて含んでるかを確認して選ぶのが良いですが、そうでなければTRY&ERRORで復元を繰り返すのもアリと言えばアリですw 復元完了後は

sudo chown -R mysql:mysql /opt/local/var/db/mysql5

で復元したファイルの所有者をmysqlに戻します。

こうして復元したい対象だけ同じ手順で戻していくと、地道な作業を繰り返していく分だけ限りなく事故前の状態に戻ることでしょう。トラブルが無いに越したことはないのですが、この記事が万が一の場合の一助になれば幸いです。