mac ファイルサイズ確認|3つの数字が食い違う理由と読み方
容量を空けるためにフォルダの大きさを調べたら、情報ウインドウは4.2 GBと出ているのに、ファインダのサイズ欄は空のまま。ターミナルで du -sh を打つと3.9Gと返ってきて、システム設定のストレージ画面はそのどれとも合わない空き容量を表示している。mac ファイルサイズ確認でつまずくのはこの場面です。どれかが壊れているわけではなく、macOSは「サイズ」というひとつの言葉で、性質の違う数字を少なくとも3つ報告しています。この記事では、その3つを切り分けて、どの場面でどれを見ればよいのかを決められるようにします。
サイズと呼ばれている3つの数字
1つ目は論理サイズです。ファイルが実際に持っているバイト数そのもので、ls -l が表示し、stat -f "%z" なら丸めなしで取り出せます。
2つ目はディスク上で確保されている領域です。ストレージはブロック単位で割り当てられ、標準的なAPFSのボリュームでは1ブロックが4 KiBです。中身が1バイトしかないファイルでも、ブロックはまるごと1つ占有します。実際に1バイトのファイルへ stat -f "%z %b %k" を打つと 1 8 4096 と返ります。中身は1バイト、512バイトのブロックを8つ確保、割り当て単位は4,096バイト、という意味です。同じファイルに du -h を打つと4.0Kと出るのは、duが既定で「確保された領域」を報告するためです。
3つ目は、そのファイルを消したときに実際に増える空き容量です。多くの人が知りたいのはこれですが、前の2つのどちらとも一致しないことがあります。理由は後半で扱います。
さらに単位の問題が重なります。Mac OS X 10.6以降、ファインダと情報ウインドウは1 GBを1,000,000,000バイトとする十進の単位で表示します。一方コマンド行の道具はほぼ二進で、du -h の1Gは1,073,741,824バイトです。同じファイルが情報ウインドウで4.29 GB、du -h で4.0Gと出るのはこのためです。ファインダとターミナルの間に7%前後のずれが出るのは計算どおりで、調べるべき異常ではありません。
どの道具がどの数字を返しているのかを先に把握しておくと、原因を探し始める前に混乱の大半が消えます。
フォルダのサイズ欄が空のままなのは仕様
ファインダは、既定ではフォルダの合計サイズを計算しません。理由は処理の重さです。フォルダの合計を出すには配下のファイルをすべて数える必要があり、それを表示中のすべての行について行うと、大きなディレクトリを開くたびに待たされます。
設定自体は用意されていて、表示形式ごとに効きます。リスト表示でフォルダを開き、Command+Jで表示オプションを出して「すべてのサイズを計算」を入れると、走査が終わった行から順にサイズが埋まっていきます。階層の深いフォルダでは数秒かかります。同じパネルにある「デフォルトとして使用」を押しておかないと、次に開いた別のフォルダでは元に戻っている点に注意してください。ここを押し忘れて「設定が効かない」と感じている場合が少なくありません。
単体のフォルダなら、Command+Iの情報ウインドウがその場で合計を計算し、数字が増えていく様子が見えます。複数の項目を選んでCommand+Iを押すと項目の数だけ窓が開いてしまうので、この用途にはCommand+Option+Iのインスペクタを使います。こちらは1枚の窓が選択範囲に追従し、選んだ項目の合計サイズを表示し続けます。削除候補を15個まとめて選んで合計を読む、といった比較はこの窓が最も速く済みます。
情報ウインドウの数字にはひとつ注意点があります。表示されるのは読み取れた範囲の合計です。現在のアカウントに読み取り権限が無い項目が含まれていると、合計はその分だけ静かに小さくなり、警告は出ません。写真ライブラリのように中身がフォルダでも1つの項目として扱われるものは、その塊ごとの大きさが出ます。1行でディスクの半分を占めているように見えるのは、たいていこの種の項目です。
並べ替えについても補足があります。リスト表示でサイズ列を使って並べ替えても、順序が付くのは計算済みの行だけです。「すべてのサイズを計算」を切ったままだと、フォルダはサイズが無いものとして扱われて一方の端にまとまり、いちばん重いディレクトリがいちばん軽いように見えます。設定を入れて初めて、この並べ替えは意味を持ちます。
コマンドで測るときの4つ
コマンド行の道具は4つ覚えれば足ります。違いは、前の章で挙げた3つの数字のどれを返すかです。
ls -lh は、ファイル1つずつの論理サイズを読みやすい単位で出します。サブディレクトリへは降りないので、「このファイルは何バイトか」を知りたいときの道具です。
du -sh フォルダ名 は、配下を合計した確保領域を返します。ディレクトリの中で du -sh * を打てば全項目のサイズが並び、sort -h に通すと大きさ順に並び替わります。容量がどこへ行ったかを追うとき、この1行が最もよく効きます。1階層だけ見たいときは du -h -d 1 を使います。
du -A は、確保領域ではなく見かけのサイズに切り替えます。圧縮されたボリュームやスパースファイルを扱うときに意味があります。ただしこのモードでも512バイト単位で丸めるため、1バイトのファイルには4.0Kではなく512Bと表示されます。
stat -f "%z %b %k" ファイル名 は、正確なバイト数、確保ブロック数、割り当て単位を1行で返します。他の道具の数字が食い違ったときの決着はここでつけます。
find . -size +100M は合計ではなく大きなファイルの居場所を出します。duで当たりを付けた後、2手目に使うことが多いコマンドです。
| 知りたいこと | コマンド | 返る数字 |
|---|---|---|
| 1ファイルの正確なバイト数 | stat -f "%z" ファイル名 | 論理サイズ |
| 複数ファイルの目安 | ls -lh | 論理サイズ |
| フォルダ全体の合計 | du -sh フォルダ名 | 確保領域 |
| どのフォルダが重いか | du -sh * を sort -h に通す | 確保領域 |
| ブロックの丸めを避ける | du -Ah フォルダ名 | 見かけのサイズ |
| 大きなファイルの居場所 | find . -size +100M | 該当パス |
消しても空き容量が戻らない3つの理由
「10 GB消したのに空きが10 GB増えない」という状態には、macOS側の事情が3つあります。
APFSのクローン
APFSでは、同じボリューム内でファイルを複製してもデータはコピーされません。どちらの名前も同じブロックを指し、変更された部分だけが書き込まれます。ファインダの複製も cp -c もこの動きです。結果として、duは同じ物理ブロックをクローンの数だけ数えるため、複製が並んだフォルダは実際の使用量よりずっと大きく報告されます。クローンを1つ消しても、空き容量はほとんど増えません。
ローカルスナップショット
Time Machineは、バックアップの合間に起動ディスク上へローカルスナップショットを保持します。見えているファイルを消しても、スナップショットの中の複製がブロックを押さえたままになるため、空き容量が数時間遅れて戻ることがあります。存在の確認は tmutil listlocalsnapshots / です。これは不具合ではなく、領域が必要になれば自動的に整理されます。
中身がディスク上に無いファイル
iCloud Driveとストレージの最適化を有効にしていると、ファイルが実体を持たない状態になることがあります。名前と日付と論理サイズは残り、中身だけが領域を空けるために退避されている状態です。ファインダは雲とダウンロードの印を付けて表示し、情報ウインドウは戻ってきたときの大きさを示します。一方でブロックはローカルに無いため、同じ項目に対して du はほとんど何も報告しません。
情報ウインドウが大きく、ターミナルが小さく出る唯一の場面がこれです。単位の違いによるずれとは向きが逆になります。長く最適化が働いていた書類フォルダでは、この差がフォルダの大部分を占めることもあります。実体の無いファイルを消してもローカルの空きは増えず、同じアカウントでサインインしている他の端末からも消えます。整理を始める前に、どれがこの状態かを見分けておくほうが安全です。
削除可能な領域
システム設定の一般にあるストレージ画面には、キャッシュや再取得できるデータを指す「削除可能」という区分があります。画面によって使用中に数えられたり空きに数えられたりするため、duで説明できる量と食い違います。Appleはこの動きを次のように説明しています。
Mac上で領域が必要になると、macOSは、安全に削除できるキャッシュとログの消去も行います。これには、一時データベースファイル、未完了のダウンロードファイル、macOSやアプリの古いアップデート、SafariのWebサイトデータなどが含まれます。 出典: support.apple.com
空きが極端に少ないのにduの合計が説明できないときは、隠れたファイルを探すより、スナップショットと削除可能な領域を疑うほうが早く片付きます。
容量を空けるときの順番
道具より順番が効きます。1手ごとに次の範囲が狭くなるためです。
ホームフォルダの直下で du -sh * | sort -h を打ち、最後の3行だけを読む。次にその中の最大のフォルダへ入って同じことを繰り返す。3回から4回掘れば、たいていは原因のフォルダに届きます。最近のディスクなら全体で1分ほどの作業です。
そこから先の「消してよいか」の判断はファインダに戻します。リスト表示で「すべてのサイズを計算」を入れてサイズ順に並べ、Command+Option+Iで選択中の合計を見ながら候補を絞り、迷ったファイルはスペースキーで中身を確かめてから捨てる。重さを見つけるのはターミナルが速く、それが何のファイルかを判断するのはファインダのほうが確実です。
ゴミ箱を空にしたら、空き容量を推測せずにもう一度確認します。数字が動かないなら、原因は前の章のどれかです。
数えるべきなのは切り替えの回数
この作業で見落とされがちなのが、道具を行き来する回数です。ターミナルでサイズを並べ、ファインダで中身を確かめ、また戻ってコマンドを打つ。1回あたりはパスをコピーして窓を切り替えるだけの数秒ですが、容量整理のような作業では十数回から数十回に積み上がります。難しさではなく回数が時間を食います。
ここに効くのが、フォルダとターミナルとAIが同じ窓にあるという配置です。コマンドの出力と、いま見ているフォルダが同じ作業ディレクトリを指していれば、パスのコピーと窓の切り替えがそのまま消えます。この配置で具体的に何ができるかはできることに整理してあり、容量を図で見せる可視化アプリや2画面型の道具との違いは他のファイル管理との比較で比べられます。導入の判断材料として費用を先に見たい場合は料金を確認してください。
道具を替える前に、まず自分の切り替え回数を1週間だけ数えることをすすめます。少ないなら、この記事の前半にある表示オプションと du -sh * | sort -h の2つで足ります。多いなら、それはサイズ確認の問題ではなく配置の問題です。
よくある質問
情報ウインドウとduで数字が違うのはなぜ?
表示する単位と、数えている対象の両方が違うためです。情報ウインドウは1 GBを1,000,000,000バイトとする十進、du -h は1,073,741,824バイトとする二進で表示します。それだけでギガバイト規模なら7%前後ずれます。加えてduは確保されたブロックを数えるので、小さなファイルが大量にあるフォルダではさらに差が広がります。
ファイルの正確なバイト数を知るには?
stat -f "%z" ファイル名 を使うと、丸めなしの論理サイズがバイト単位で出ます。情報ウインドウでも、読みやすい表記の後ろの括弧内にバイト数が表示されます。フォルダ全体を見かけのサイズで測りたいときは du -A が近い値になりますが、512バイト単位で丸められる点は残ります。
ファイルを消したのに空き容量が増えないのはなぜ?
主な原因は3つあります。APFSのクローンで他のファイルとブロックを共有していた場合、Time Machineのローカルスナップショットが古い複製を保持している場合、キャッシュなどの削除可能な領域が画面ごとに違う数え方をされている場合です。tmutil listlocalsnapshots / でスナップショットの有無を確認できます。多くは数時間のうちに自然と反映されます。
フォルダのサイズを常に表示させることはできる?
できます。リスト表示でCommand+Jを押し、「すべてのサイズを計算」を入れてから「デフォルトとして使用」を押すと、以降に開く窓にも設定が引き継がれます。大きなフォルダでは配下をすべて走査するため、サイズ欄が埋まるまでに数秒かかります。