Time Machineバックアップの信頼性向上云々がでても諦めるな

2015-09-17追記

以下の対処でも全然直らないケースが増えてきたので、諦めてAirMac Extreme買ってそこに付けたUSB HDDでTimeMachineを使うようにしました。白旗。

事象

Macのバックアップが始まったと思ったら、こんなメッセージが。

「Time Machine でのバックアップの検証が完了しました。信頼性を向上させるには、Time Machineによって新しいバックアップが作成される必要があります。」

新規でバックアップsparsebundleを作る以外の選択肢が出てこない。

環境

UbuntuNetatalkを動かして、TimeMachineのバックアップ先にしている。

原因

Opensslのアップデートも兼ねてapt-get updateしたときのサービス再起動中に、Mac側のバックアップが始まったらしく、sparsebundleの不整合が発生したようだ。

2015-09-17追記

サービス再起動とか関係なくバンバン発生する。ツライ

調査

less /var/log/fsck_hfs.log

/dev/rdisk3s2: fsck_hfs started at Fri Apr 11 00:31:00 2014
/dev/rdisk3s2: /dev/rdisk3s2: ** /dev/rdisk3s2 (NO WRITE)
/dev/rdisk3s2:    Executing fsck_hfs (version hfs-226.1.1).
QUICKCHECK ONLY; FILESYSTEM DIRTY
/dev/rdisk3s2: fsck_hfs completed at Fri Apr 11 00:31:04 2014

FILESYSTEM DIRTYやと。

手動でfsck_hfsしてみる

fsck_hfs -drfy /dev/disk3s2

こんな感じのログを残して止まる。

/dev/rdisk3s2: fsck_hfs started at Fri Apr 11 09:00:36 2014
/dev/rdisk3s2: /dev/rdisk3s2: Unable to open block device /dev/disk3s2: Permission denied/dev/rdisk3s2: journal_replay(/dev/disk3s2) returned 13
/dev/rdisk3s2: ** /dev/rdisk3s2 (NO WRITE)
/dev/rdisk3s2:  Using cacheBlockSize=32K cacheTotalBlock=32768 cacheSize=1048576K.
/dev/rdisk3s2:    Executing fsck_hfs (version hfs-226.1.1).
/dev/rdisk3s2: Journal is empty
/dev/rdisk3s2: ** Checking Journaled HFS Plus volume.
/dev/rdisk3s2: ** Detected a case-sensitive volume.
/dev/rdisk3s2:    The volume name is Time Machine バックアップ
/dev/rdisk3s2: ** Checking extents overflow file.
/dev/rdisk3s2: ** Checking catalog file.
/dev/rdisk3s2: ** The volume Time Machine バックアップ was found corrupt and needs to be repaired.
/dev/rdisk3s2:  volume type is pure HFS+ 
/dev/rdisk3s2:  primary MDB is at block 0 0x00 
/dev/rdisk3s2:  alternate MDB is at block 0 0x00 
/dev/rdisk3s2:  primary VHB is at block 2 0x02 
/dev/rdisk3s2:  alternate VHB is at block 2737107966 0xa324f3fe 
/dev/rdisk3s2:  sector size = 512 0x200 
/dev/rdisk3s2:  VolumeObject flags = 0x07 
/dev/rdisk3s2:  total sectors for volume = 2737107968 0xa324f400 
/dev/rdisk3s2:  total sectors for embedded volume = 0 0x00 
/dev/rdisk3s2:  CheckHFS returned 7, fsmodified = 0
/dev/rdisk3s2: fsck_hfs completed at Fri Apr 11 09:00:42 2014

corruptやと。

対策

Time Machineのディスクをマウント

Finderから。

ロックフラグを外す

chflags -R nouchg /Volumes/{name of your network share}/{name of}.sparsebundle

sparsebundleをマウント

hdiutil attach -nomount -readwrite /Volumes/{name of your network share}/{name of}.sparsebundle

fsckでリペア

対象ボリュームはApple_HFSのやつ。

fsck_hfs -rf /dev/disk3s2

実行後のログは以下。 終わるまで3時間くらいか。

** /dev/rdisk3s2
   Executing fsck_hfs (version hfs-226.1.1).
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
   The volume name is Time Machine バックアップ
** Checking extents overflow file.
** Checking catalog file.
** Rebuilding catalog B-tree.
** Rechecking volume.
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
   The volume name is Time Machine バックアップ
** 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.
   Invalid volume file count
   (It should be 2314545 instead of 2108959)
   Invalid volume directory count
   (It should be 328860 instead of 308933)
   Invalid volume free block count
   (It should be 250732702 instead of 282939599)
   Volume header needs minor repair
(2, 0)
** Repairing volume.
** Rechecking volume.
** Checking Journaled HFS Plus volume.
** Detected a case-sensitive volume.
   The volume name is Time Machine バックアップ
** 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 バックアップ was repaired successfully.

あとからログをみたい場合は以下を参照

less /var/log/fsck_hfs.log

フラグを編集

vim /Volumes/{name of your network share}/{name of}.sparsebundle/com.apple.TimeMachine.MachineID.plist

RecoveryBackupDeclinedDateのエントリ自体を削除と、VerificationStateを0に戻す。

デタッチ

hdiutil detach /dev/disk3s2

以上の対応で、正常に差分バックアップを続けることができるようになった。

参考