♻️

Macが壊れたときにTime Machineのバックアップにあるファイルをいくつかサルベージする

2023/06/16に公開

「きみが壊れた」

Macbookが壊れたのでこの後Apple Storeに行ってくる予定なのですが、その前に代替機からNAS上にTime Machineでバックアップしたファイルをいくつか確認しておきたくなったので、(また壊れたときのために)やり方をここにもメモしておきます。

素朴にTime Machineから復元しない理由

まとまったファイル群が必要な場合、Time Machineから移行アシスタントを使えば普通に復元できます。が、今回は限られたファイル数件のみ復元させたいので、もっと手軽な方法を探していたのでした。

Sparse bundleとhdiutil

Time MachineはSparse bundleという形式で保存されています。このイメージ形式を扱うには hdiutil コマンドを使います。

Sparse bundleのイメージは /Volumes/foo/bar/backupimage.sparsebundle という名前でマウントされていることにします。

ファイルシステムの情報を表示する

どちらかというとまずは情報が読めるかどうかを確認するためにfsidを見てみます。

hdiutil fsid /Volumes/foo/bar/backupimagename.sparsebundle

イメージの情報を表示する

細かいイメージの情報を得るにはimageinfoを使います。

hdiutil imageinfo /Volumes/foo/bar/backupimagename.sparsebundle

readonlyでマウント(attach)する

(そのままマウントしようとしたらうまくいかなかったのと、うっかり破壊すると取り返しがつかないため)readonlyでマウントしてみます。

hdiutil attach -readonly /Volumes/foo/bar/backupimagename.sparsebundle

こうすると/Volumnes/backupimagenameみたいな名前のフォルダができます。その中にバックアップしたファイルが入っているはずです。

アンマウント(detach)する

アンマウントはマウントしたフォルダ名でいけます。

hdiutil detach /Volumes/backupimagename

サルベージするだけならこのくらいだけでも使えれば何とかなると思います。
が、使わないで済むに越したことはないですね…。

追記: ACLについて

Macでreadonlyなファイルシステムからファイルをコピーした場合、コピー後のファイルが変更・削除できなくなっており、chmod 664等を適用しても上書きできない場合があります。これは、Unixで一般的なパーミッションに加えて、ACLの設定が加わることがあるためです。

ACLは以下のようにchmod -aを使って削除することができます。ご注意ください。

chmod -a 'group:everyone deny write,delete,append,writeattr,writeextattr,chown' *.txt

確認には ls -le や ls -led などを使います。


なお、「きみが壊れた」は谷山浩子『しまうま』所収の名曲です。

https://twitter.com/taniyama_/status/1404094438167564290

Discussion