Tech Racho エンジニアの「?」を「!」に。
  • IT Tips

macOS: ファイルを削除してもディスク容量が減らない場合はdittoを試してみよう

環境

  • Macbook Air M3
  • OS: Tahoe 26.1

現象

過去記事にも書いたように、私はCoherence XというツールでChromeを独自にアプリ化したものを多用しています。

Mac: Coherence XでChromeブラウザを用途ごとにアプリ化する

しかし、Macのシステム設定 > 一般 > ストレージでサイズの大きいアプリケーションのリストを表示すると、その大半がCoherence Xでだいぶ前にこしらえたアプリたちで占められていました。長年使っている間にアプリが肥大化しているようです。

サイズの大きさが目に余るので、アプリをターミナルでこじ開けてdu -sh *|sort -hrでサイズを調べ、キャッシュなどの影響のなさそうなファイルをギガ単位で捨てました。

  • Profile/の下にある以下のディレクトリの内容
    • Cache/*
    • Code Cache/*

duでチェックすると、アプリのサイズは確かに7.05GBから1.0GBまで減少しています。

$ du -sh TechRacho.app
1.0G    TechRacho.app

しかし「情報を見る」でチェックしたアプリのサイズはほとんど減っていませんでした(アプリの状態によっては期待通り減っていることもありましたが)。

ファイル容量はたしかに減ったのに、Finderの容量表示や「情報を見る」で認識されていない様子です。

lipoも試してみた

Coherence Xのアプリがユニバーサルバイナリだからファイル容量が倍になっているのかと思い、lipoコマンドでx86_64バイナリを削減したりもしましたが、それでもFinderや「情報を見る」のファイル容量が減りませんでした🤔

# 確認
lipo -info Techracho.app/Contents/MacOS/Techracho
#> Architectures in the fat file: Techracho.app/Contents/MacOS/Techracho are: x86_64 arm64

# arm64バイナリに差し替え
lipo Techracho.app/Contents/MacOS/Techracho -thin arm64 -output Techracho_arm64
mv Techracho.app/Contents/MacOS/Techracho Techracho.app/Contents/MacOS/Techracho.bak
mv Techracho_arm64 Techracho.app/Contents/MacOS/Techracho

# 確認
lipo -info Techracho.app/Contents/MacOS/Techracho
#> Non-fat file: Techracho.app/Contents/MacOS/Techracho is architecture: arm64

参考: lipo Man Page - macOS - SS64.com

解決方法

ChatGPTとやりとりした末に、アプリを(cpではなく)dittoコマンドでコピーすることで解決できました。

ditto TechRacho.app TechRacho_ditto.app

コピー後のファイルサイズは、見事にdu -shと一致するようになりました。後はコピー前のアプリを捨てて削除し、コピー後のファイルをリネームするだけです。

おかげで、30GBほどSSDの空き容量を増やせました🎉

参考: ditto Man Page - macOS - SS64.com

追加情報

今回知ったことをメモしておきます。

macOSのAPFS(Apple File System)というファイルシステムは、いわゆるCopyOnWrite的な振る舞いをするようです。その影響もあってか、du -shコマンドで得られる実際のディスク使用量と、du -sh -Aで得られる「見かけ上のディスク容量」が一致しないことがあるようです。

  • du -sh ディレクトリ名 -- 実際のディスク容量
  • du -sh -A ディレクトリ名 -- macOSが認識する見かけ上のディスク容量(Finderの「情報を見る」に相当)

なお、duコマンドの-AオプションはmacOS 12以降でないと使えないようです。

du -sh -Aは論理サイズを再計算しますが、Finderが参照するSpotlightメタデータ(kMDItemLogicalSize)とは厳密には異なるため、数値が多少ズレることがあります。

サイズを厳密に知るには、mdls -name kMDItemLogicalSize(Finderの「情報を見る」と完全に同じ)やmdls -name kMDItemPhysicalSizeduと同じ)コマンドを使います。

mdls -name kMDItemLogicalSize BPS.app
#> kMDItemLogicalSize = 1702390232

mdls -name kMDItemPhysicalSize BPS.app
#> kMDItemPhysicalSize = 1909936128

後から思えば、lipoコマンドでx86_64バイナリを削除したときも、おそらくAPFSが重複ブロックを共有していたために、物理的なサイズがほとんど変わらなかったということなのでしょう。

まとめ

duコマンドで表示されるのは、「ディスク上の実使用量(物理サイズ)」です。

Finderや「情報を見る」やmdls -name kMDItemLogicalSizeで表示されるのは、「論理サイズ(見かけのサイズ)」です。

dittoでコピーすることで、APFSのクローン情報が解消され、Finderが再計算した論理サイズが実際の物理サイズと一致するようになります。

関連記事

Mac: Coherence XでChromeブラウザを用途ごとにアプリ化する


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。