ASUS の RT-AC68U という無線LANルータを使っていて、これに繋いだディスクに、家の中の各マシンから Time Machine でバックアップを取っています。要するに Time Capsule の代わりです。
で、そのバックアップイメージが破損すると、Time Machine が新しいバックアップが必要だというメッセージを吐き、以降新規バックアップを作り直すまで差分のバックアップが取られなくなるのです。これは純正の Time Capsule でも、こういったルータでも、自前のファイルサーバ (Netatalk使用とか) でも発生する可能性のある問題です。
ネットワーク上にあるので接続・切断を繰り返したり、状況によっては接続自体が不安定になったりするので、仕組み上仕方ないかなとは思いますが、バックアップに残っている内容を残しておきたい場合や、新規バックアップにかかる時間を考えると、何とか修復したいと思うのもまた事実。
※これらが許容できるなら新しく取った方が随分楽です。
※修復にも多少時間がかかります。サイズや破損の程度にもよりますが。
前置きが長くなりました。
参考にしたのはこのへん … Fix Time Machine Sparsebundle NAS Based Backup Errors
NAS上のディスクイメージを fsck で修復します。
※自動でネットワークボリュームがアンマウントされる可能性があるので、「新規バックアップが必要です」のメッセージウィンドウが開いたままの状態でやるのがいい気がします。閉じてしまっても、手動でバックアップを開始すればまた出ます。
ターミナルを使います。(アプリケーション→ユーティリティ→ターミナル.app)
まず root になっておきます。(“sudo su – ” を実行。管理者である必要があります。パスワードを求められるので、自分のパスワードを入れてください。)
バックアップボリューム名・バックアップイメージ名を調べます
# ls /Volumes
*.backupdb がバックアップ先ボリュームです。覚えておきます。
さらにこの中に (マシン名).sparsebundle があり、ここにバックアップの実体が保存されています。分からなければ、
# ls /Volumes/(上で調べた名前).backupdb
で調べてください。
ディスクとして認識させます
少し待たされるかもしれません。
# chflags -R nouchg /Volumes/(ボリューム名).backupdb/(マシン名).sparsebundle # hdiutil attach -nomount -noverify -noautofsck /Volumes/(ボリューム名).backupdb/(マシン名).sparsebundle
ここで認識されたパーティションの一覧が
/dev/disk4 GUID_partition_scheme /dev/disk4s1 EFI /dev/disk4s2 Apple_HFS
のように表示されます。これの3番目を修復します。パーティション名 (上の例だと “disk4s2”) を覚えておきましょう。以下では disk4s2 で書きます。
修復します
結構待たされます。以下ではメモリをキャッシュとして使って高速化しました。この例では500MBですが、搭載量に合わせて適当に増減してください。
# fsck_hfs -drfy -c 500 /dev/disk4s2
修復が完了すると、
/dev/rdisk4s2: ** The volume Time Machine バックアップ was repaired successfully. /dev/rdisk4s2: CheckHFS returned 0, fsmodified = 1 /dev/rdisk4s2: fsck_hfs completed at Sat Oct 10 00:00:00 2015
のように表示されます。
ディスクを解放します
# hdiutil detach /dev/disk4s2
plist ファイルを編集します
前回失敗した情報と、問題があるという情報が残っているので、これを削除します。
編集するファイルは /Volumes/(ボリューム名).backupdb/(マシン名).sparsebundle/com.apple.TimeMachine.MachineID.plist です。
適当なテキストエディタで開きましょう。そのままターミナルから vi か何かで開いても良いでしょう。vi なら
# vi /Volumes/(ボリューム名).backupdb/(マシン名).sparsebundle/com.apple.TimeMachine.MachineID.plist
以下の連続した2行を消します。
<key>RecoveryBackupDeclinedDate</key> <date>(日付)</date>
そして、
<key>VerificationState</key>
の次の行の
<integer>2</integer>
の 2 を 0 にします。
上書きして完了です。これで追加バックアップが取れるようになります。
以上、Yosemite で実施した内容。