はじめに

Macの重複ファイル:APFSクローンで容量の計算が変わる理由

APFS上でFinderがコピーしたファイルの多くは容量を共有するクローンで、削除してもほとんど空きません。本当の重複を安全に見つける方法と、触れてはいけないもの。

約7分で読めますMoreRoomチーム(Yando Pte. Ltd.)このページをMarkdownで見る

要点

  • APFSでは、Finderの「複製」や同じボリューム内でのコピーは、データブロックをコピーせずに元のファイルと共有するクローンを作成します。
  • もう一方のコピーが存在するかぎり、クローンを削除してもほとんど容量は空きません。共有ブロックがまだ使われているためです。
  • 重複ファイル検索ツールはブロックではなく内容を比較するため、実際にはディスクに現れない何GBもの削減量を表示することがあります。
  • 本当に重複しているかはshasum -a 256などのチェックサムで確かめ、アプリやライブラリが実際に参照しているコピーを残しましょう。
  • 写真ライブラリやアプリバンドルの中の重複を手作業で削除するのは厳禁です。代わりに写真アプリの「重複項目」アルバムを使います。

Macで本当の重複ファイルを安全に見つけて削除する方法

  1. まず大きな候補を探す. Finderで「ファイル」>「新規スマートフォルダ」を選択し、ファイルサイズが500MBより大きいという条件を追加して、名前やサイズで並べ替え、組になっていそうなファイルを探します。
  2. 内容が同一か確認する. ターミナルで両方のファイルに対してshasum -a 256を実行します。チェックサムが同じなら内容は同一で、異なれば重複ではありません。
  3. 同じボリューム上にあるか確認する. 同じAPFSボリューム上で作成したコピーはクローンの可能性があります。片方を削除してもほとんど、あるいはまったく容量が空かないことがあるので、前後の空き容量を確認します。
  4. 参照されているコピーを残す. プロジェクト、ライブラリ、アプリが使うフォルダの中にあるほうを残し、もう一方をゴミ箱に入れます。写真ライブラリなどのパッケージ内のファイルは決して対象にしません。
  5. 結果を確認してからゴミ箱を空にする. ディスクユーティリティで空き容量を控え、ゴミ箱を空にして比べます。変化がなければ、それらはクローンで、削除しても何も得られなかったということです。

現在のすべてのMacの起動ディスクで使われているAPFSでは、「重複」が実は重複でないことがよくあります。Finderで「ファイル」>「複製」(Command-D)を選んだり、同じボリューム上の別のフォルダにファイルをコピーしたりすると、macOSは通常クローンを作成します。最初のファイルと同じデータブロックを指す2つ目のファイルです。追加の容量はほとんど使わないため、削除してもほとんど何も戻ってきません。

APFSクローンの仕組み

クローンは、中身をコピーせずに作られる新しいファイルです。2つのファイルはディスク上の同じブロックを指します。どちらかが変更されたときに初めて、APFSは変更された部分の新しいブロックを書き込みます。これはコピーオンライトと呼ばれる手法です。変更されていない部分は共有されたままです。

完全なコピーはすべてのブロックを2回書き込み、クローンは元のファイルのブロックを共有し、編集後は変更されたブロックだけが新しくなる

macOSがクローンを作成するのは次のような場合です。

  • Finderで、同じAPFSボリューム内で「複製」やコピー(Optionキーを押しながらドラッグ)を使ったとき。
  • アプリがシステム標準のファイルコピー機能でファイルをコピーしたとき(多くのアプリがそうしています)。
  • ターミナルでcp -cを使ったとき。通常のcpは完全なコピーを書き込みます。
cp -c "Big Video.mov" "Big Video copy.mov"   # クローン:データを共有し、新たな容量はほとんど使わない
cp "Big Video.mov" "Big Video copy.mov"      # 完全なコピー:すべてのデータを書き込み直す

別のボリューム、外部ドライブ、ネットワーク共有へのコピーは常に完全なコピーになります。Howard Oakley氏が説明しているように、クローンはTime Machineのバックアップから復元すると共有関係が失われ、それぞれが別々のファイルとして戻ります。

クローンを削除してもほとんど容量が空かない理由

容量が戻るのは、ブロックを使っている最後のファイルが削除され、かつそのブロックを保持しているローカルスナップショットがないときだけです。クローンの組の片方を削除しても、共有ブロックはすべてもう一方が使い続けるため、取り戻せるのはファイルシステムのメタデータ数KBだけです。実際に試したところ、200MBのファイルをクローンすると空き容量は約4KB減り、通常のコピーでは200MB減りました。

一部を編集したクローンはその中間です。10GBのビデオをクローンして片方をトリミングした場合、異なるブロックはそのファイルだけのものになります。そのファイルを削除すると、それらのブロックだけが解放されます。

重複ファイル検索ツールが削減量を大きく見積もる理由

重複ファイル検索ツールは、通常チェックサムを使ってファイルの内容を比較します。クローンは元のファイルとまったく同じ内容なので重複として報告され、そのサイズ全体が「削減できる容量」の合計に加算されます。クローンの多いMacでは、その合計が何GBも多すぎることがあります。

同じ盲点のせいで、ツール同士の数字が食い違うこともあります。Finderの「情報を見る」やduは各ファイルのサイズを個別に合計するため、1GBのファイルのクローンが3つあるフォルダは3GBに見えます。本当に変わるのは、ディスクユーティリティに表示されるボリュームの空き容量です。

本物のコピーがたくさんある場合は、削除するよりもクローンに変換するほうが良いことも多く、そうすればどのパスもそのまま使えます。John Siracusa氏のHyperspaceなどのツールがこれを行います。

論理サイズと割り当てサイズ

どのファイルにも2つのサイズがあります。

  • 論理サイズ:ファイルに含まれるバイト数。ls -lやFinderの「サイズ」に表示されます。
  • 割り当てサイズ:ディスク上で実際に占める容量。Finderの「ディスク上」の数値やduに表示されます。

この2つが異なるのは、クローン(共有ブロック)、ディスクイメージや仮想マシンなどのスパースファイル(書き込まれていない領域は容量を使わない)、APFSで圧縮されたファイル、「ダウンロードしたものを削除」を実行したクラウドのファイルの場合です。詳しくは論理サイズと物理サイズをご覧ください。

ls -lh "Big Video.mov"   # 論理サイズ
du -h "Big Video.mov"    # 割り当てサイズ(共有がないものとして計算)

本当の重複を安全に見つける方法

大きなファイルから始めます。 小さな重複はたいてい問題になりません。Finderで「ファイル」>「新規スマートフォルダ」を選択し、「+」ボタンをクリックして、「ファイルサイズ」>「が次より大きい」>500「MB」と設定します(「ファイルサイズ」が表示されない場合は、最初のメニューで「その他…」を選択します)。続いてリスト表示に切り替えて名前で並べ替えます。名前とサイズが一致するものが候補です。

チェックサムで確認します。 shasumはmacOSに標準で入っていて、ファイルを読み取るだけです。

shasum -a 256 ~/Movies/"Trip.mov" ~/Desktop/"Trip copy.mov"

長い16進数の文字列が一致すれば、内容は同一です。大きなファイルが入ったフォルダ全体で一致するものを調べるには、次のようにします。

find ~/Movies -type f -size +100M -print0 | xargs -0 shasum -a 256 \
  | awk '{n[$1]++; l[$1]=l[$1] $0 "\n"} END {for (h in n) if (n[h]>1) print l[h]}'

チェックサムが同じファイルのグループが表示されます。何も削除しません。チェックサムが一致しても、それらがクローンかどうかはわからないため、容量は「取り戻せるかもしれない」ものと考えてください。

信頼できるツールを使ってもかまいません。 オープンソースのdupeGuruや定評のある市販アプリでも問題ありません。ただし、各グループを確認し、ライブラリやシステムフォルダを除外し、削減量の数値は上限と考えてください。

重複ファイルの安全な扱い方:同一か確認し、ライブラリやアプリの中にないことを確かめ、参照されているコピーを残し、空き容量を比べる

「間違った」コピーを削除するリスク

内容が同じでも、コピー同士を入れ替えてよいとは限りません。

  • 写真ライブラリ。 Finderで.photoslibraryパッケージ内のファイルを削除するのは厳禁です。ライブラリのデータベースはそれらがあることを前提にしているため、ライブラリが損傷するおそれがあります。macOS Ventura以降、写真アプリには「ユーティリティ」の下に「重複項目」アルバムがあり、重複を正しく結合できます。削除した項目は「最近削除した項目」に残ります。
  • ミュージック、Final Cut Pro、Lightroomなどのライブラリは、パスでファイルを参照しています。ライブラリが指している「重複」を削除すると、ファイルが見つからなくなります。
  • アプリバンドル。 多くのアプリは同じフレームワークを同梱しています。.app内のものを削除するとコード署名が壊れ、アプリが開かなくなることがあります。アプリごとアンインストールしましょう。Macのアプリを完全にアンインストールする方法をご覧ください。
  • プロジェクトとコード。 プロジェクトフォルダ内のファイルはビルドやスクリプトから参照されています。削除するなら、たいていはデスクトップにあるコピーのほうです。
  • バックアップ。 別のドライブに意図的に置いた2つ目のコピーは、重複ではなくバックアップです。

迷ったら、アプリが想定している場所にあるコピーを残し、もう一方はゴミ箱に入れて、元に戻せるようにしておきましょう。

MoreRoomでできること

MoreRoomには、まだ重複ファイルの検索機能はありません。その代わり、ディスクを正確に計測します。スキャン時にクローンのデータは1回だけ数えられるため、ファイルごとのサイズのように合計やツリーマップがクローンで水増しされることはありません。重複を探し始める前に、容量が本当はどこで使われているかを把握しやすくなります。また、ルールによって、「ダウンロード」フォルダに残った古いディスクイメージなど、確認すると安全に削除できるよくあるコピーにも印が付きます。削除したものはすべてまずゴミ箱に入り、取り消すこともできます。写真の重複には、写真アプリの「重複項目」アルバムを使ってください。

よくある質問

Finderでファイルを複製すると、使用容量は2倍になりますか?

APFSではなりません。Finderの「複製」(Command-D)や同じAPFSボリューム内でのコピーは、同じデータを共有するクローンを作成するため、どちらかが編集されるまでコピーは追加の容量をほとんど使いません。

ファイルがクローンかどうかを見分けるには?

Finderには表示されず、どちらのコピーも元のサイズを表示します。実用的な確認方法は、空き容量を控えてから片方を削除し、ゴミ箱を空にして空き容量が増えるかを見ることです。

重複ファイルを削除しても容量が空かなかったのはなぜですか?

それらのファイルは、同じデータを共有するクローンかハードリンクだった可能性が高いです。容量が戻るのは、そのブロックを使っている最後のファイルが削除されたときだけです。

重複ファイル検索ツールを使っても安全ですか?

信頼できるツールなら、一致したものをすべて確認するかぎり安全です。写真やミュージックのライブラリ、アプリバンドル、システムフォルダは除外し、削減量の見積もりにはクローンが過大に含まれる可能性があることを覚えておきましょう。

MoreRoomは重複ファイルを見つけられますか?

まだできません。MoreRoomはディスクを計測する際にクローンのデータを1回だけ数えるため、合計がクローンで水増しされることはありませんが、重複ファイルの検索機能はありません。

このガイドに登場するフォルダ