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

MAC (Mandatory Access Control) が悪さする

前回の記事はこちら:

ちょっと脱線して、Time Machine ボリュームのファイルを操作してみます。 具体的にやりたいのは、ゴミ掃除。バックアップを途中で中止すると *.inProgress というディレクトリが残ります。 次回バックアップ時にはこのディレクトリは消されるのですが、 ちょっと邪魔だったので消してみることにしました。

$ sudo rm -rf 2010-11-11-161244.inProgress
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/.com.apple.timemachine.supported: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/.DS_Store: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/.file: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/.vol: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/.DS_Store: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/.localized: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/Address Book.app/Contents/_CodeSignature/CodeResources: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/Address Book.app/Contents/_CodeSignature: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/Address Book.app/Contents/CodeResources: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/Address Book.app/Contents/Info.plist: Operation not permitted
rm: 2010-11-11-161244.inProgress//9F5DA736-356D-43B4-A9D2-F3B9AA50E05F/Macintosh HD/Applications/Address Book.app/Contents/MacOS/Address Book: Operation not permitted
......

前回の続きなんで、Time Machine ボリュームの ACL は無効にしてあるし、 UNIX Permission、BSD File Flags も問題なし。 他に制限する要素と言えば、もしかしたらMAC(Mandatory Access Control)か!? と思って調べてみたら、やっぱりそうでした。

このドキュメントの23ページあたりにこんな記述があります。

Mandatory access controls in Snow Leopard aren’t visible to users, but they are the underlying technology that helps enable several important new features, including sandboxing, parental controls, managed preferences, and a safety net feature for Time Machine.

Time Machine illustrates the difference between mandatory access controls and the user privilege model—it allows files within Time Machine backups to be deleted only by programs related to Time Machine. From the command line, no user— not even one logged in as root—can delete files in a Time Machine backup.

Time Machine uses this strict policy because it utilizes new file system features in Snow Leopard. The policy prevents corruption in the backup directory by preventing tools from deleting files from backups that may not consider the new file system features.

要するに Time Machine ボリュームをユーザがコマンドラインツールで勝手にいじれると 壊す危険性があるため、root であっても実行出来ないように制限かけてる、と。 まぁ、馬鹿ヨケとしては正しいと思うけど、安全装置を外す方法も提供して欲しいなぁ。

これ以上探しても詳細は出て来ないし、Time Machine (backupd) のソースもなさそうなので、 あとは try & error で制限を解除する方法を探すしかない。 鍵となるのは、「Time Machine ボリュームかどうかをどうやって識別しているのか?」 ということなんですが、いろいろやってみた結果、 どうやら Backups.backupdb という名前を見て、その下に制限をかけてるらしいということがわかりました。 このディレクトリをrenameしてやると、その下のファイル操作が出来るようになります。 一番害が少なそうな Latest の symbolic link を外してみます。

$ fsaclctl -p /Volumes/Backup\ of\ komacbook/Backups.backupdb -d (念の為ACLオフ)
$ cd /Volumes/Backup\ of\ komacbook/Backups.backupdb/komacbook
$ ls -l
...
lrwxr-xr-x  1 root  staff   17 Oct 14 14:37 Latest@ -> 2010-10-14-143741
$ sudo rm Latest
rm: Latest: Operation not permitted
$ cd ../..

(Backups.backupdbをrename)
$ sudo mv Backups.backupdb backup
$ cd backup/komacbook
$ sudo rm Latest
(成功!)

ということで、Time Machine ボリュームを操作するには、

  1. ACL を無効化
  2. Backups.backupdb を別の名前に変更

という手順を踏めば可能になるということがわかりました。

続く

まだ続きます。次回は、Time Machine が <ホスト名>.sparsebundle を使わないようにする方法について。

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

フォローする