ncdu が df とは異なるデータを報告しているのはなぜですか?

ncdu が df とは異なるデータを報告しているのはなぜですか?

df -hプリント:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        59G  6.6G   50G  12% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  9.0M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   54M  199M  22% /boot
tmpfs           391M     0  391M   0% /run/user/1000

whileは次のようncdu /に出力します:

Total disk usage:   1.8 GiB  Apparent size:   1.8 GiB  Items: 176500

一方が 6.6+ GiB の使用を報告しているのに、もう一方が のみ と報告するのはなぜですか1.8 GiB?

答え1

の出力はdfファイルシステムレベルの統計に基づいていますが、ncdu(および通常のdu) はディレクトリをスキャンし、個々のファイルのサイズを読み取り、それを要約することで結果を生成します。

-style コマンドを非 root ユーザーとして実行する場合du、すべてのディレクトリへの完全なアクセス権が必ずしもあるとは限らず、すべてを表示できない可能性があります (sudo ncduこの場合は use)。

を実行してdu -hs /、その結果を によって報告された「ディスク使用量の合計」と比較してみncdu /てください。結果は似ているかもしれません... ではdu、コマンドがアクセスできず考慮に入れられなかった一連のディレクトリに関するメッセージも表示される可能性があります。 でも同じことが言えるかもしれませncduんが、エラー メッセージが非表示になるだけです。

また、最近の Linux ディストリビューションの仮想ファイルシステムを理解するように更新されていない可能性があり、混乱する可能性があるように思われますncdu。私の Debian 10 システムでは、次のようにncdu /報告されています。

Total disk usage:  75.6 GiB  Apparent size: 128.1 TiB  Items: 469143

私の場合、「見かけのサイズ」は明らかに無意味であり、役に立ちません。「ディスク使用量の合計」は、du -hs /... で得られる値とほぼ同じですが、これには多数の RAM ベースの仮想ファイルシステム ( devtmpfstmpfs) が含まれるため、この数値もあまり役に立ちません。

しかし、コマンドを 1 つのファイルシステムのみに制限すると (例ncdu -x /)、より妥当な結果が得られるようです。この結果は、du -shx /から までの出力と丸め誤差の範囲内で一致し、ファイルシステムが内部メタデータ用にいくらかのスペースを必要とする可能性があることを念頭に置いた場合の の出力とも一致しますdf -h

エラーのもう 1 つの原因として考えられるのは、BTRFS ファイルシステム スナップショットなどの高度なファイルシステム機能を使用している場合です。確かに、ルート ファイルシステムには 1.8 GiB のファイルしかないかもしれませんが、ファイルシステムに以前の状態のスナップショットが 2 つ含まれている場合は、使用されるディスク領域の合計は、ファイル サイズの合計からdu予想される値 (および -like コマンド) の 3 倍に達する可能性があります。

コマンドはファイルシステム ドライバーに問い合わせて情報を取得するためdf、報告される大きな「使用済み」値にはスナップショットが含まれる可能性があります。スナップショットは、適切な方法でアクセスされるまでは表示されない可能性があります。

関連情報