sparsebundlefs を使ってがんばります。
mountしたりするのでrootでの作業です。
とりあえず作業用ディレクトリへ行って、使うツールの下準備
$ git clone https://github.com/torarnv/sparsebundlefs.git $ cd sparsebundlefs $ make
timemachineのsparsebundleをマウントしてdmgを見れるようにする。
$ mkdir dmg $ ./sparsebundlefs /YOUR_PATH_TO_SPARSEBUNDLE ./dmg
dmgをマウントする。うまくいかない時は、parted使ってoffsetとか確認してloopインターフェス作ってマウントする。
$ mkdir tm $ mount -o loop -t hfsplus ./dmg/sparsebundle.dmg ./tm # うまくいかない時 $ parted ./dmg/sparsebundle.dmg unit B print 番号 開始 終了 サイズ ファイルシステム 名前 フラグ 1 20480B 209735679B 209715200B fat32 EFI System Partition boot 2 209735680B 274743668735B 274533933056B hfsx disk image # offset と sizelimit をそれぞれpartedの結果に合わせる $ losetup -f ./dmg/sparsebundle.dmg --offset 209735680 --sizelimit 274533933056 --show /dev/loop0 $ mount -t hfsplus /dev/loop0 ./tm
救い出したいファイルを探す。
$ cd ./tm/Backups.backupdb/YOUR_MACHINE_NAME/DATE_OF_BACKUP/OSX/Users/USER_NAME/ $ ls RESQUE_DIR -r--r--r-- 30590485 30610467 root 0 10月 19 02:19 RESQUE_DIR # 左側がハードリンクのIDになっているので実体のあるディレクトリへ移動 # ./tm/.HFS+\ Private\ Directory\ Data$'\r'/dir_HARDLINK_ID に実体のディレクトリがある $ cd ../../../../../../.HFS+\ Private\ Directory\ Data$'\r'/dir_30590485 $ ls RESQUE_FILE RESQUE_FILE # 複数階層ある場合には、上記の作業を繰り返して実体のある所までいく $ cp RESQUE_FILE /tmp/
あと片付け
$ cd WORKING_DIR/sparsebundlefs $ umount ./tm $ losetup -d /dev/loop0 $ umount ./dmg
こんな感じで、救出。OSXがあれば、普通にGUIからできるけど、Linuxでやろうとすると激しくしんどい。