Time Machine ボリュームを直接操作する(1)

背景

2年ぐらい Time Machine のバックアップを取り続けてきているのですが、 どうやらバックアップの格納方法に以下の2種類があるらしく、 Mac OS X のどこかのバージョンで切り替わったようです。

  1. バックアップディスクの root directory に Backups.backupdb というディレクトリがあり、その下に各マシンのバックアップが保存される。
  2. バックアップディスクの root directory に <ホスト名>.sparsebundle という disk image があり、その image を mount すると Backups.backupdb というディレクトリがあり、その下は 1. と同じ構造

最近 MacBook を新調してデータ移行したのですが、 移行時の何かの間違いにより、新しい MacBook のバックアップ先が 2. と 1. の両方出来てしまいました。 当然いろいろ問題が生じているので、2. の方をバックアップ先として認識しないようにして、1. にすべて保存されるようにする、というのが今回の目的です(両方あると 2. が優先される)。

OSは Mac OS X 10.6.4 (Snow Leopard) なんですが、 どうやら Time Machine のボリュームは OSレベルでいろいろ保護されているらしく、 コマンドラインで操作しようとするとことごとく「Operation not permitted」で弾かれました。 それを一つ一つ外していく、というのが今日の記事の内容になります。 Time Machine のボリュームを直接操作しなければいけなくなった時に役に立つでしょう。

以下、バックアップ先ディスクのボリュームラベルは「TimeMachine」、 バックアップ元のコンピュータ名は「komacbook」とします。

Backups.backupdb 以下の extended attribute を消す

例えば 『Laopard標準バックアップツール「Time Machine」を使いこなす』 などにあるように、Backups.backupdb 直下の各ディレクトリの extended attribute に バックアップ元のハードウェア情報が記録されており、 TimeMachine はここを見てバックアップ先を決めているようです。 ということで、まずは disk image の中の Backups.backupdb 直下のディレクトリの extended attribute を消してみることにします。

まず、/Volumes/TimeMachine 以下に komacbook.sparsebundle という disk image があるので、 これを mount します。

$ sudo hdiutil attach /Volumes/TimeMachine/komacbook.sparsebundle
/dev/disk3              Apple_partition_scheme          
/dev/disk3s1            Apple_partition_map             
/dev/disk3s2            Apple_HFSX                      /Volumes/Backup of komacbook
(Finder でダブルクリックでも良い)

disk image が “/Volumes/Backup of komacbook” に mount され、 その中に Backups.backupdb があるので、その下にあるディレクトリの extended attributeを消してみます。

$ cd "/Volumes/Backups of komacbook/Backups.backupdb"
$ ls -lOe@
total 0
drwxr-xr-x@ 84 root  staff  - 2890 Nov  8 00:51 komacbook
    com.apple.backupd.BackupMachineAddress    18 
    com.apple.backupd.HostUUID    37 
    com.apple.backupd.ModelID     13 
 0: group:everyone deny add_file,delete,add_subdirectory,delete_child,writeattr,writeextattr,chown
$ sudo xattr -d com.apple.backupd.BackupMachineAddress komacbook
xattr: [Errno 1] Operation not permitted: 'komacbook'

多分 ACL が悪さしてる気がしたので、ACLを外してみます。

$ sudo chmod -N komacbook
chmod: Failed to clear ACL on file komacbook: Operation not permitted

あれれ。。。上位のディレクトリ(Backups.backupdb)の ACL が悪さしてるかもしれないので、 まずはそっちを外してみますか。

$ cd "/Volumes/Backups of komacbook"
$ sudo chmod -N Backups.backupdb
$ ls -dlO Backups.backupdb
drwxr-xr-x  3 root  staff  - 102 Nov  8 00:51 Backups.backupdb
(Backups.backupdb 自体の ACL は消せる)

しかし、その下のディレクトリのACLが消せない
$ cd Backups.backupdb
$ ls -lO
total 0
drwxr-xr-x@ 84 root  staff  - 2890 Nov  8 00:51 komacbook
$ sudo chmod -N komacbook
chmod: Failed to clear ACL on file komacbook: Operation not permitted

Mac OS X ファイルシステムのセキュリティといえば、UNIX Permission、BSD File Flags、POSIX ACLの3種類のはず。 で、コマンドの実行結果を見ればわかる通り、permission は問題ないし、 BSD File Flags はついてないし、POSIX ACL も外してある。 これで ACL が消せないのは謎だなぁ…

ACL を無効にしてみる

同様の問題でハマってる人は世の中にそれなりにいるようで、検索すると 「fsaclctlでACLオフにしろ」というページがいくつか見付かります。 が、Snow Leopardには fsaclctl がないのです! 調べてみると、Leopard の fsaclctl を持って来れば使えるということだったので、 古いマシンのディスクからコピーして使ってみました。

$ fsaclctl -p "/Volumes/Backup of komacbook"
Access control lists are supported on /Volumes/Backup of komacbook.
$ sudo fsaclctl -p "/Volumes/Backup of komacbook" -d
$ fsaclctl -p "/Volumes/Backup of komacbook"
Access control lists are not supported or currently disabled on /Volumes/Backup of komacbook.

ホントにちゃんと使えて、無事に ACL が無効になりました。

ということで、再度 extended attribute 消去に挑戦です。

$ cd "/Volumes/Backup of komacbook/Backup.backupdb"
$ ls -le
total 0
drwxr-xr-x@  84 root  staff  2890 Nov  8 00:51 komacbook
(ACLは表示されない)
$ ls -l@
total 0
drwxr-xr-x@ 84 root  staff  2890 Nov  8 00:51 komacbook
    com.apple.backupd.BackupMachineAddress    18 
    com.apple.backupd.HostUUID    36 
    com.apple.backupd.ModelID     13 
$ sudo xattr -d com.apple.backupd.BackupMachineAddress komacbook
$ sudo xattr -d com.apple.backupd.HostUUID komacbook
$ sudo xattr -d com.apple.backupd.ModelID komacbook
$ ls -l
total 0
drwxr-xr-x  84 root  staff  2890 Nov  8 00:51 komacbook

今度は問題なく消えました。

続きは…

スポンサーリンク
スポンサーリンク:

フォローする