TimeMachineがエラー
- 2013/02/22 12:31
- カテゴリー:備忘録
先日,生活マシンであるMacBookAirが,エラーを吐き出しているのを見つけました。いわく,
信頼性を向上するために、Time Machine は新規バックアップを作成する必要があります。
とのこと。
QNAPのNASを導入してから,TimeMachineによるバックアップを積極的に行うようになったのですが,もともとMacBoorAirは内蔵のSSDが64GBと少なくバックアップの負担が軽く,しかもうっかり操作でメールなどを消してしまうことが多い私としては,それなりに便利に使っていたのです。
TimeMachineのような,履歴を遡って復元できるバックアップというのは,その保存期間が長いほど安心感があります。時間が経てば経つほどそのバックアップに値打ちが出てくるような錯覚に陥るのはそのせいですが,老舗のとんかつ屋の「秘伝のソース」のような気分で,ずらーっと列んだ自分のTimeMachineを見るのは,悪い気分ではありません。
このエラーメッセージが出た時の選択肢は2つ。バックアップをやめるか,親近いバックアップを作り直すか。突然出てきたエラーメッセージに,過去の資産をすべて捨てろと言われることの,精神的ショックはかなり大きいです。
こんな貧乏くさいのは私だけかなと思っていたら,国内外の先輩諸氏が同じ気持ち(かどうかは定かではありませんが)でこの問題に取り組み,見事に打破していることがgoogle先生の指南により,はっきりしてきました。
まあ,こういうのはケースバイケースで,同じ手段で必ず解決出来るわけではない,特に最近のPCやMacは複雑化しているので,ダメモトでやってみました。
なかなかうまくいかず,あきらめかけたのですが,幸いなことにうまくいきました。UNIXのコマンドに抵抗がないこと,MacOSXにおけるファイルシステムの扱いと共有の概念がきちんと分かっていることが求められますが,尻込みしていても仕方がないので,試行錯誤を繰り返したのです。
このトラブルは今後も出てくると思います。そこで,ここにメモしておくことにしました。
先輩諸氏は汎用性のある書き方をしてくれています。それは分かっている人にはありがたいのですが,分かっていない人には具体的な作業が分からず,結果が好ましくない場合になにが間違いだったのか,わかりにくい側面があります。そこで今回は,私のケースをそのまま記述しておくことにします。
(1)まず,TimeMachineのエラーが出たときに,バックアップしないを選択する。
(2)ターミナルを立ち上げて,
sudo su -
と入力する。これで以下の作業はrootで行う事が出来るが,失敗すると大変なことになるので,くれぐれも気をつける。
(3)カスタムアクセス権がかかっている場合に解除の必要があるため,以下のように打ち込む。
chflags -R nouchg /Volumes/TMBackup/MacBook\ Air.sparsebundle
/Volume~は環境によって違うのだが,私の場合はこう。
ここで出てくる「sparsebundle」というのは,MacOSX Leopardから採用されたディスクイメージの形式で,約8MB単位でファイルを細かく分割して保存することで,差分の保存を素早く行う為のもの。「スパースバンドル」と読む。
成功してもなんのメッセージも出ないので気を落とさず次に進む。
(4)いよいよ修復。以下のように打ち込む。
hdiutil attach -nomount -noverify -noautofsck /Volumes/TMBackup/MacBook\ Air.sparsebundle
すると,以下のように表示が出る。あくまで私の場合。
/dev/disk1 GUID_partition_scheme
/dev/disk1s1 EFI
/dev/disk1s2 Apple_HFS
これを見ると,TimeMachine用のディスクイメージは/dev/disk1s2にマウントされていることがわかる。
実はこのコマンドを実行すると,すでにfsck_hfsが走っており,修復がバックグラウンドで行われている。topコマンドを実行するとfsck_hfsが走っていることがわかるし,以下のように打ち込むとfsck_hfsのログがリアルタイムで見られる。
tail -f /var/log/fsck_hfs.log
私の場合,こんな感じに。
QUICKCHECK ONLY; FILESYSTEM DIRTY
/dev/rdisk1s2: fsck_hfs run at Thu Feb 21 21:33:32 2013
/dev/rdisk1s2: ** /dev/rdisk1s2
/dev/rdisk1s2: Executing fsck_hfs (version diskdev_cmds-557~393).
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
The volume name is Time Machine Backups
** Checking extents overflow file.
** Checking catalog file.
** Checking multi-linked files.
** Checking catalog hierarchy.
** Checking extended attributes file.
Invalid sibling link
・・・以下つづく
(5)ログに以下のように出てくると,修復は成功。
** Checking extents overflow file.
** Checking catalog file.
** Checking multi-linked files.
** Checking catalog hierarchy.
** Checking extended attributes file.
** Checking multi-linked directories.
** Checking volume bitmap.
** Checking volume information.
** The volume Time Machine Backups was repaired successfully.
ここで,修復できないというメッセージが出てきた場合には,
fsck_hfs -drfy /dev/disk1s2
と打ち込めば,もう一度fsck_hfsが走る。
(6)ディスクイメージをアンマウントする。以下のように打ち込む。
hdiutil detach /dev/disk1s2
すると,以下のようにかえってくる。
"disk1" unmounted.
"disk1" ejected.
(7)壊れていることになったままの設定を変更する。以下の操作をする。
cd /Volumes/TMBackup/MacBook\ Air.sparsebundle
vi com.apple.TimeMachine.MachineID.plist
viを使えるようになっておくと,こういうときなにかと便利。
そして,以下の2行を削除。
続けて,
の2を0に変更。
ファイルを保存して終了。
(8)これで復活。TimeMachineを手動で実行すると,おそらく成功するはず。
という感じで,書けばなんてことない作業なのですが,私の場合何度も失敗していました。まず,TimeMachineのディスクをマウントしておくという先輩諸氏の記述を忠実に守らんとし,デスクトップにアイコンが出るようにするために,TimeMachineに入って中止するという手順をやったのです。
はっきりしないのですが,これがよくなかったらしく,fsck_hfsがすぐに止まってしまいます。
それで,こうした手動のマウントしないで,いきなり上記の手順を始めると,/dev/disk1s2 Apple_HFSてのは出てくるのですが,そこから進んでいないように見えます。
仕方がないので手動でfsck_hfsをやるのですが,最後の最後にエラーが修復できない,と返ってきます。何度やっても修復できず,これはもう私の場合は修復できないエラーだったのかなあと,くじけそうになりました。
今にして思い返してみると,hdiutilを行った後に,自動でfsck_hfsが動いているにもかかわらず,fsck_hfsを手動で実行してしまったからではないかと思います。
そして最後に上記の手順に素直に従ってみると,どういうわけだかうまくいったと,
こういうわけです。
とりあえず結果オーライということで,TimeMachineは順調に動いています。他に問題も出ていないようですから,これでよいということにしますが,TimeMachineは気持ち悪さも含みつつ,しかし一度でも救われた経験があるとやめるわけにはいかなくなる,そんな存在です。
もう少し信頼性が上がってくれればありがたいのですが,NASとの組み合わせで問題が出てもそれは自己責任ですし,なんとかやっていくしかありませんね。