ずっと続いてきた、 TImeMachine のディスクイメージを別の新しいファイルシステムに書き戻す問題。rsyncで書き戻したものは正しいのか否か。
前述したように、コピー先をちょっと捻っておくとエラーを出さずに順調に書き戻している。しかし、コピー元、コピー先で以下のように inode 番号を確認してみると…。
yagimac{yagi(s005)}21844: ls -dli */Macintosh\ HD/Applications/Address\ Book.app 154 drwxrwxr-x@ 3 root admin 102 Feb 22 2008 2008-03-09-004903/Macintosh HD/Applications/Address Book.app/ 154 drwxrwxr-x@ 3 root admin 102 Feb 22 2008 2008-04-05-224200/Macintosh HD/Applications/Address Book.app/ 154 drwxrwxr-x@ 3 root admin 102 Feb 22 2008 2008-05-18-102404/Macintosh HD/Applications/Address Book.app/ 1439337 drwxrwxr-x@ 3 root admin 102 May 29 2008 2008-06-15-135929/Macintosh HD/Applications/Address Book.app/ 1769122 drwxrwxr-x@ 3 root admin 102 Jul 1 2008 2008-07-05-194842/Macintosh HD/Applications/Address Book.app/ 1769122 drwxrwxr-x@ 3 root admin 102 Jul 1 2008 2008-08-02-133527/Macintosh HD/Applications/Address Book.app/ 1769122 drwxrwxr-x@ 3 root admin 102 Jul 1 2008 2008-09-06-171007/Macintosh HD/Applications/Address Book.app/ 2374743 drwxrwxr-x@ 3 root admin 102 Sep 18 2008 2008-10-05-170929/Macintosh HD/Applications/Address Book.app/ 2374743 drwxrwxr-x@ 3 root admin 102 Sep 18 2008 2008-11-14-224936/Macintosh HD/Applications/Address Book.app/ 2374743 drwxrwxr-x@ 3 root admin 102 Sep 18 2008 2008-11-28-223957/Macintosh HD/Applications/Address Book.app/ 2374743 drwxrwxr-x@ 3 root admin 102 Sep 18 2008 2008-12-13-121005/Macintosh HD/Applications/Address Book.app/ 3033558 drwxrwxr-x@ 3 root admin 102 Dec 16 2008 2008-12-20-162535/Macintosh HD/Applications/Address Book.app/ 3033558 drwxrwxr-x@ 3 root admin 102 Dec 16 2008 2009-01-11-181135/Macintosh HD/Applications/Address Book.app/ 3033558 drwxrwxr-x@ 3 root admin 102 Dec 16 2008 2009-01-19-224322/Macintosh HD/Applications/Address Book.app/ (後略) yagimac{yagi(s005)}21845: cd /Volumes/Time\ Machine\ ハ?ックアッフ?/TMPX/Backups.backupdb/黒山羊\ の\ MacBook\ Pro/ zsh yagimac{yagi(s005)}21846: ls -dli */Macintosh\ HD/Applications/Address\ Book.app zsh 142 drwxrwxr-x@ 3 yagi staff 102 Feb 22 2008 2008-03-09-004903/Macintosh HD/Applications/Address Book.app/ 875781 drwxrwxr-x@ 3 yagi staff 102 Feb 22 2008 2008-04-05-224200/Macintosh HD/Applications/Address Book.app/ 1910368 drwxrwxr-x@ 3 yagi staff 102 Feb 22 2008 2008-05-18-102404/Macintosh HD/Applications/Address Book.app/ 2892158 drwxrwxr-x@ 3 yagi staff 102 May 29 2008 2008-06-15-135929/Macintosh HD/Applications/Address Book.app/
TimeMachine なので、変化のなかったファイルはハードリンクで済ませている&&アプリケーションって実はフォルダ(ディレクトリ)で実装されている。
ということを組み合わせると、コピー元のように、変化がなかった間は inode 番号が変化していない。それをハードリンクをサポートしている rsync でコピーすると、何故かそれぞれ別のものになっている。
最初の頃、 tar で書き戻したものが速攻で溢れてたのもこの所為だな。
そう!ディレクトリのハードリンクをサポートしているものでないと、正しく書き戻せないのだ。
ディレクトリのハードリンク?!
参考:AppleInsider: Mac OS X Leopard に向かって: Time Machine [Page 3] - silvervine の定点観測所
そう云えばディレクトリのハードリンクなんて聞いたことがなかった。
このディレクトリハードリンクに、 ACL 、拡張属性、リソースフォークとここまで filesystem を使い倒してる Unix OS もないんじゃないか?しかも自社製。 Apple なにげに技術力高い…。
HFS というとどうも昔のイメージで、あの case insensitive な…、とか、あのキモいリソースフォークとやらのついてる…、というダサいファイルシステムが思い出されちゃうんだが、OSX の HFS+ ってずいぶんイケてるものに化けてたんだな。
スノレパでは ZFS もサポートされるはずだが、いったいどうなってしまうのか…。ZFS のストレージプールやら COW やらの上に、この HFS+ が乗ったりするのかな
ちなみに HFS+ の場合、 ls -l の permission 10文字の左に出る @ が拡張属性で + が ACL 。それぞれ -@ と -e で表示させられる。
追記:2009.8.3
UFSのiノード・ハードリンクとHFS+のそれの違いは以下が詳しい
Undocumented Mac OS X:第8回 HFS、HFS Plusの基本的概念【中編】 (3/3) - ITmedia エンタープライズ
オープンソースマガジンって旧UNIX USERか……。