システム用ではないディスクを Time Machine から復元する

システム復元

macOS でホームディレクトリーとして使っていた外付けディスクを、起動中にうっかり外してしまって、そこから macOS が起動できなくなりしました。

そんな状況から Time Machine を使って復元するに至れたので、その経緯や、作業の中で見つけたことなどを綴っておくことにしました。


普段 macOS Sierra 10.12 を使っているのですけど、使わなくなった外付けディスクを外そうと思って、うっかりホームディレクトリーとして使っている外付けディスクを外してしまい、結果的にその ディスクが読めなくなって しまいました。

幸い、ディスクはソフトウェア的な故障で済んで、取得してあった Time Machine バックアップからデータを回復 することができました。Time Machine バックアップについては、以前に EZ-NET: Time Capsule で Mac を自動バックアップする でお話ししたことがありますけど、基本的には簡単に復元できるようになっていますが、今回は環境が少し複雑だったために復旧に手間取ってしまったので、今回はそんなあたりを今後のために記しておくことにします。

起動不能になるまでの経緯

今回は完全に人為的なミスで mac が起動できなくなってしまったわけですけれど、まずはそこに至る経緯を綴ってみようと思います。

OS 環境

まず、OS 環境がやや複雑だったことが、問題を大きくした様子でした。

使用している mac は iMac Late 2013 の 21.5 インチモデル だったのですけど、起動ディスクの容量が 256GB で足りなくなってしまった都合、外付けの SSD を用意して、そこにホームディレクトリーを設定していました。

Time Machine でバックアップが正しく取得できていて、少なくともホームディレクトリーなどの起動に関わるデータがひとつのディスクに収まっていれば復元は簡単だったはずなので、もし 今後 mac を買うときは、システムディスクの容量が充分なものを選んでおくのが良いのかも しれません。

Time Machine 環境

ちなみに、データをバックアップしている Time Machine 環境は、ネットワーク上の AirMac Extreme に接続した外付けハードディスクで運用している Time Machine と、今回の iMac そのものに USB 3.0 で接続した外付けハードディスクで運用している Time Machine の 2つ です。

この両方を Time Machine のバックアップディスクとして登録して、交互にバックアップされるようにしてあります。そして今回、壊れる直前の最新データはローカルの USB 3.0 ディスクに記録されています。

人為的にホームディレクトリーを取り出してしまう

そして、問題の発端がこちら。極めて単純なミスなのですけど、複数接続されている外付けディスクの中から、使うのをやめようと思ったディスクを取り外そうとして、間違って使用中のものを いきなり物理的にはずしてしまった ことが発端になりました。

外す予定のディスクをアンマウントしたところまでは良かったのですけど、そのまま別のマウント中のディスクを外してしまい、それがホームディレクトリーを担っていたものだから、起動中の macOS に、さまざまな常駐アプリからのエラーメッセージが表示されました。

いったん接続し直したものの、いろいろおかしくなっていそうなので、いったん mac を再起動しておくことにしました。

起動に 3 分ほどかかる問題発生

そうして再起動したところ、最初のアップルマークが表示されるまでに 3 分 くらい時間がかかるようになってしまいました。それさえ過ぎればとりあえず、普通に起動して使えるようにはなるのですけど、やっぱり毎回、この時間だけ不必要に待たされるのは億劫です。

ディスクを修復したら読み込み不能に

きっとディスクがソフトウェア的に矛盾をきたしているのだろうと思って、とりあえず macOS に標準で付属している ディスクユーティリティーFirst Aid を使ってチェックしようとしたのですけど、マウント解除できずに失敗しました。

きっと、ホームディレクトリーとして使用しているのが原因なのでしょう。とりあえずディスクに問題があるかだけはチェックしたかったので、mount コマンドでディスクの実際の名前をチェックして、それを次のように fsck_hfs コマンドを使ってチェックしてみることにしました。

sudo fsck_hfs -l /dev/disk3s2

そうしたところ、カタログファイルのチェックのところで次のようなメッセージが表示されました。どうやら修復が必要なようです。

Invalid leaf record count

The volume UserData was found corrupt and needs to be repaired.

ただ、ここで sudo fsck_hfs -lr /dev/disk3s2 のようにして修復を試みてみたのですけど、次のメッセージが表示されて、修復できませんでした。

BTree rebuild requested but writing disabled

そこから、どうやったか正確な手順は忘れてしまったのですけど、たしか mac を再起動してアップルマークが表示された直後に R を押し続けてリカバリーモードで起動し直して、エラーが検出されたディスクがマウントされていない状態で、ディスクユーティリティーの First Aid を使って修復したような気がします。

ともあれそうしてディスクのエラーを修復できたので、mac を再起動してみたのですけど、起動直後のアップルマークが出るまでの待ち時間は相変わらず長いまま、ログイン画面でパスワードを入力した後から先に進まなくなって しまいました。ログイン画面のまま、インジケーターがぐるぐる回り続ける状況です。

システムを起動できるようにする

いよいよ仕方がなくなったので、電源をいったん OFF にして、 R でリカバリーモードで起動します。このキーはアップルマークが出る直前の起動音の頃に押すわけですけど、そこまでなかなか至らないので、リカバリーモードで起動するだけでもやや苦労です。

それでもちゃんとリカバリーモードで起動できたので、そこから Time Machine での復元に臨みます。

壊れたディスクをうっかり消してみる

今回は複数のディスクが接続されていて、それらのデータが Time Machine に記録されていたのですけど、どうやら リカバリーモードで復元されるのはシステムディスクだけ みたいです。

複数のディスクを選択できなかったので、試しに今回、壊れたハードディスクを選択して復元を実行してみたのですけど、そうしたところシステムディスクをそこに復元されてしまって、いったん、そこに記録していたホームディレクトリーのデータを全て消してしまいました。

ともあれ、エラー修正できなくても、もしソフトウェア的な故障であれば、ディスクを初期化すれば直ると思うところではあったので、ひとまずは結果的には問題なしです。

リカバリーモードで復元できるのはシステムだけ?

それでも、消したついでに、もしかしてリカバリーモードでシステムディスクをちゃんと指定すれば、付随するディスクも直してくれるかな?と思って、試しにシステムディスクのリカバリーを行なってみたのですけど、やっぱりシステムディスクだけが回復する様子でした。

ホームディレクトリー用のディスクは、初期化して、以前と同じラベル名にしておいたのですけど、そちらは空っぽのまま macOS が復旧しました。ホームディレクトリーの保存場所は変更した状態で復元されたので、実質的にホームディレクトリーのデータが丸ごとなくなった状態の OS が復旧されたことになります。

おかげでログイン画面から先へ進むようになりましたけど、ホームディレクトリーのデータに依存していたアプリは軒並み適切に動作しなくなりました。完全にデータが消えているので当然ですけれど。

起動直後の待ち時間を解消する

ともあれ、壊れたディスクもデータが消滅しながらも修復されて、これでディスクの異常はないはずなのに 相変わらず、起動時にアップルマークが出るまでの長い待ち時間 は変わりませんでした。

SMC コントローラーのリセットは効果なし

ハードウェア周りの不調を直すといえば SMC コントローラーのリセットという記憶があったので、試しに こちら の方法に従って、電源コードを抜いて 15 秒待ちを試してみたのですけど、この方法では解消しません でした。

NVRAM リセットを試す

もしかすると、ディスクを急に外してしまった影響とかが NVRAM に残っていたりするのかと思って、こちら の方法に従って、起動音がした時に P R を押し続けて NVRAM をリセットしてみたところ 起動時間の改善が見られました。

この感じから、今回の起動の遅さの原因は NVRAM の損傷だったのかもしれません。ただ、ディスクの損傷を修復できなかったことも考えると、問題のディスクを初期化したことも、改善に一役買っているかもわかりません。

ホームディレクトリーのデータを復旧する

不自然な動作自体は直ったので、最後に 消してしまったホームディレクトリーのデータを Time Machine で復旧してみる ことにしました。

今回は、普段使っているユーザーアカウントのホームディレクトリーを復旧するので、いったん別のアカウントでログインして、そこから復元を試みます。

ただ、Time Machine で特定のディスクだけを丸ごと復旧する方法がわかりません。いちばん単純なのは Time Machine のメニューから Time Machine に入る を選択して、復元用の機能を使う方法ですけど、この方法だと『フォルダー単位』での復旧なので、ホームディレクトリーでよく使われる 隠しファイルがちゃんと復元できるのか不安 だったので、別の方法を考えます。

ディスクユーティリティーで Time Machine が使える?

そうしていろいろ試してみたところ、macOS 標準のディスクユーティリティーでも Time Machine を使った復元機能が用意されていることがわかりました。

ただ、ここに Time Machine がリストアップされてこないことも度々あって、どうしたら表示されるのかと思って調べてみたら、どうやらいったん、フォルダー単位での復旧機能 Time Machine に入る を選択して、LAN ネットワーク上の Time Machine を macOS が認識すると、選択できるようになる様子でした。

使えるのは LAN 上の Time Machine だけの様子

ただ、こうやって認識できる Time Machine は LAN ネットワーク上のものに限られるみたいで、これを使って復旧を試みると ローカルのバックアップデータは考慮しないで LAN 上のものだけを使って復旧しようとする 様子でした。

今回は、最新のバックアップが iMac に直接接続したハードディスクにあったので、そちらを使いたかったのですけどそれは認識されず、そのディスクを明示的にマウントしてみたりもしたのですけど、結局のところ、認識できる気はしませんでした。

ディスクユーティリティーからの復旧は断念

それでも、パーティションを丸ごと指定して復旧できるこの方法ならきっと隠しファイルなども考慮してくれそうだったので、それで復旧を試みたのですけど、500GB のディスクを復旧するのに何時間待っても満足に進まず、1 日くらい放置してもほんのわずかな進み具合、しまいにはたまたま LAN がダウンしてしまって無に帰されたりする始末でした。

そんな調子でも、別の決定的な直し方を見つけられず、何度か試してみていたのですけど 結局のところ 1 日経っても回復にたどり着く兆しを見せません でした。

Time Machine バックアップを直接 cp で復元する

そうやって終わらない復旧作業を待ちながらも、他の可能性を模索していたところ、Time Machine バックアップのデータって ターミナルから普通に最新データを参照できるようになっている ことに気づきました。

データの保存場所

Time Machine といえば、時系列で自由に復元できる仕組みになっているので、すっかり、専用のデータ表現で保存されているものと思い込んでいたのですけど、ちゃんと日付ごとにそのままデータが見られるようになっているんですね。

ディスクをマウントすれば、そこから例えば /Volumes/TimeCapsule/Backups.backupdb/MyMac/2017-01-07-115419/ みたいにパスを辿ればファイルを確認できます。隠しファイルもちゃんと保存されていたので、これを使って復旧してみることにしました。

データを復元する

復元先のディスクを初期化して、Time Machine の最新データを cp コマンドで復元します。

パーミッションやユーザー情報など全てを丸ごと復旧したかったのですけど -a オプションを添えても 全部の情報をうまく写してくれない 様子でした。それでも、終わる気配のないディスクユーティリティーでの復旧よりも現実的な時間で終わるはずなので、ひとまずこれで復元してから後で権限による動作不良に後で対応した方が、全体的には速そうです。

cp -a /Volumes/TimeCapsule/Backups.backupdb/MyMac/2017-01-07-115419/UserData/* /Volumes/UserData/

そうしたところ、数時間程度でデータを全て復元できました。

パーミッションやユーザー情報は元どおりにはならなかった様子ですけど、とりあえず所有権については、今回は自分のアカウントだけで使うディスクだったのもあって chown -R tomohiro /Volumes/UserData/ みたいにして一括変更しておきました。

macOS が管理している共有とアクセス権は、復元したディスクを選んで I を押して ディスクの情報 を表示し、そこで自分を追加しておくことにしました。ただ、今回のディスクは このボリューム上の所有権を無視 する設定になっているので、これが必要な作業かは分かりません。

復旧完了?

ひとまず、このようにしてコピーが終わってから、改めて自分のアカウントでログインし直したところ、ほとんどのアプリが以前の状況で復帰しました。

OneDrive ではパスワードの再入力を求められたり、Snapz Pro X では再ライセンス認証を求められたり、macOS 標準の写真アプリやメールアプリはデータベースの自動復元処理が走ったりしましたけど、ひとまずそんなくらいで無事に、元どおりな感じに復元することができました。

もしまた今後、ファイルを保存できないなどのエラーが出たら、その都度対応しようと思いますけど、何はともあれこのまま使い続けて良さそうなくらい、元の快適な状態に戻ってくれてよかったです。