morimorihogeです。早くも夏バテっぽいです。
昨日自宅でニコニコ動画を視聴するのに使っているiMacの調子が突如悪くなり、再インストールを迫られる自体になったので対処方法を記録しておきます。
ちなみに今回の対象機種はiMac Late 2012で、プリインストールOSはMountain Lion時代のものです。
再インストールの前に試すべきこと
再インストールは面倒な作業なので、なるべくやりたくないものです。
また、データが破損しただけだと思ったら実はハードウェア的にディスクが破損していて、再インストールしたけど結局無駄だったとか、実は悪いのはHDDじゃなくてメモリのエラーだった、なんていうことにもなりかねないので、まずは情報収集が大事です。
今回僕のiMacで出ていた症状は以下の通りでした。
- 何か操作をする度に数分間レインボーカーソルが周り続け、ほとんど使い物にならない状態
- マウスカーソルは正常に動く(完全にフリーズはしていない)
- 再起動しても症状は変わらず
このような状態になったとき、まず最初に疑うのはディスク上のデータが論理的に破損しているケースになります。
今回はディスクから起動しているOSが既に不安定になってしまっているので、OS X復元モード(電源ON時にCommand + R)で起動します。
復元モードで起動したら「ディスクユーティリティ」を起動し、対象ディスクの「Repair Disk(ディスクの修復)」を実行します。
(Verify Disk(ディスクの検証)は自動的に修復前に実行されます)
停電などで電源が落ちたり、たまにkernel panicになって強制再起動などをしていた場合、ここで修復できる可能性があります。
また、色々なソフトをインストールしている場合「Repair Disk Permissions(アクセス権の修復)」も実行することで、挙動が改善される可能性があります。
というわけで、いつもは前述のディスク修復で問題無く調子が戻るのですが、今回は珍しく、修復に失敗してしまいました。
これはもうアカンやつや・・・ということで、この状態になるとOSがブートしなくなります(あちゃー。
ディスク以外の部分が影響している可能性も考え、念のためApple Hardware Test(電源ON時にDキー)を起動し、フルテストを走らせてみましたが、H/Wレベルでは異常はありませんでした。
これでほぼ確実にディスクが(論理的に)お亡くなりになってしまったことが窺えます。
参考:OS X Mountain Lion: 「Apple Diagnostics」または「Apple Hardware Test」を使用する
通常のデータサルベージ方法
OSが起動しない状態でのデータの吸い出しですが、通常はTarget Disk Mode(電源起動時にTキー)という、Mac本体を外付けディスクとして使えるモードを使うのが良いですが、最近のiMacにはFirewireコネクタが無いため、Thunderbolt経由になります。
参考:OS X Mountain Lion: ターゲット・ディスク・モードを使って 2 つのコンピュータ間でファイルを転送する
しかし、Thunderboltケーブルが手元に無い場合、バックアップ機と接続する手段が無くなってしまいました。
ネットワーク経由でデータをサルベージする
というわけで、ここからが本題になります。
OSは起動しない、Target Disk Modeも物理的に使えないという状況ですが、ネットワークは繋がっていますので、ネットワーク経由からデータを取り出してみます。
(必要なもの:ネットワーク上にsshサーバが起動しているLinux/Macホスト)
まず、復元モードで起動後、ユーティリティメニューからターミナルを起動します。
その後、シェルから「df」コマンドを実行し、/Volumes以下に「Macintosh HD」がマウントされていることを確認します。
この時点でMacintosh HDがマウントできていない場合、ファイルシステムレベルで壊れてしまっているのでもう諦める(もしくは市販のデータ復旧ソフトやデータ復元屋に委託する)しかないですが、見えている場合はデータを取り出せる可能性が出てきます。
システムディレクトリはともかくホームディレクトリの中身だけでも復旧してみましょう。
「/Volumes/Macintosh HD」以下が通常のOS X起動時のルートディレクトリになっているので、ユーザのホームディレクトリは「/Volumes/Macintosh HD/Users/#{ユーザ名}」になっています。
というわけで、以下のコマンドを使うことでホームディレクトリ内のデータを別のLinux/MacホストにSSH経由でコピーできます(ここではmorimoriユーザ)。
backup_serverはバックアップ先サーバのIPアドレスやホスト名、sshコマンド引数の/mnt/backup_directoryはバックアップ先サーバ上でファイルをコピーする先のディレクトリに置き換えて下さい。
$ cd /Volumes/Macintosh\ HD/Users/morimori
$ tar cvf . -|ssh morimori@backup_server "cd /mnt/backup_directory;tar xf -"
これで、tarコマンドで固めた内容をsshを通して別サーバ上で再度展開することができます。標準出力・標準入力を介して処理するため、一時ファイルのための領域は必要ありません。
ちなみに、rsyncは復元モードではコマンドが入っておらず、HDD上のプログラムはリンクしているdyldが見つからずに起動できません。また、scpでも良いですが、scpは小さなファイルが沢山ある場合、毎回sshコネクションを張り直す分遅いです。
また、転送するファイルが多い場合、転送中にMac側がsleepしてしまい、転送が止まってしまうことがありますが、これはもう一つターミナルのタブを開いて、
$ pmset sleep 0
$ pmset displaysleep 0
$ pmset disksleep 0
というコマンドを実行しておけばスリープを抑止することができます。sleepの設定だけで問題ないはずですが、displayが消えているとちゃんと動いているのか不安になるのでここではdisplay、diskもスリープしない設定にしました。
まとめ
そんなわけで、OSが起動できなくなったけどかろうじてディスクのmountはできる程度の壊れかたをしているMacからデータをサルベージできました。
ただ、これは苦し紛れな方法なので、本来ならTimeMachineなどで普段からバックアップしておくのが賢いです(今回のマシンは遊び端末なのでバックアップしてなかった)。
また、FileVaultが有効になっている場合だめかも。Recovery Keyがあれば復旧する方法はあるかもしれませんが、もっと面倒になることは間違いなさそうです。
なんにせよ、普段からバックアップはしておこうという教訓でした。