df、duが無効なディスク使用量を報告しました

df、duが無効なディスク使用量を報告しました

dfどちらもdu私のルートパーティション(100 GB SSD)に余分なスペースがなく、100 Gのみを使用すると誤って報告します/home/steven。ただし、提供されるディスク使用量の単純な合計は、du13G 使用量より少なくなります。

この問題をどのように解決できますか?

具体的には:

~ » du -sh ~
85G   /home/steven

~ » du -b ~ | wc -l
15041

~ » du -h ~ | sort -h | tail -n 1
85G   /home/steven # 91088489808 bytes if using -b for du

~ » du -b ~ | sort -n | head -n 15040 | cut -f 1 | perl -ne 'BEGIN{$i=0;}$i+=$_;END{print $i.qq|\n|;}'
12735983847 # 11-12G, roughly

明らかに、85Gと11Gまたは12Gの間に大きな違いがあります。lsof +L1タグ付きファイルを含むすべてのプロセスを実行して削除しましたが、deletedまだ運がありませんでした。

$HOME外付けハードドライブ(例:)のディレクトリを指す複数のソフトリンクがありreposます。

次は何をすべきですか?

答え1

du与えられたツリーの深さ優先巡回を実行します。デフォルトでは、ディレクトリツリーごとのディスク使用量を含む、ディレクトリツリー固有の使用量が表示されます。

$ du ~
4      /home/bob/Videos
40     /home/bob/.cache/abrt
43284  /home/bob/.cache/mozilla/firefox
43288  /home/bob/.cache/mozilla
12     /home/bob/.cache/imsettings
48340  /home/bob/.cache
4      /home/bob/Documents
48348  /home/bob

オプションを指定すると、-a各ファイルのサイズがさらに表示されます。

この-sオプションを使用すると、各パラメータファイルまたはディレクトリツリーの合計サイズのみが表示されます。

$ du -s ~
48348  /home/bob
$ du -s ~/*
4      /home/bob/Videos
4      /home/bob/Documents

だからあなたが走るとき

$ du -b ~ | wc -l
15041

$ du -b ~ | sort -n | head -n 15040 | cut -f 1 | \
    perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'
12735983847

ホームディレクトリの下にあるすべてのもののサイズをまとめています。残念ながら、サイズを報告する各行にはすべてのサブディレクトリが含まれているため、合計は複数です。ただし、du出力の最後の行を省略したので、次のようになります/home/stevendu ホームディレクトリの最上位レベルの一般ファイルのサイズは計算されません。。したがって、この合計には非常に大きなファイルは含まれません.xsession-errors

走るとき

du -sb ~ returns 91296460205, but the sum of du -sb ~/* is only 1690166532

出力du -sb ~/*にで始まるファイルが含まれていません.

du ~ | tail -1どちらもホームディレクトリのディスク使用量を合理的にdu -s ~表示する必要があります(もちろん削除されましたが開いたファイルを除く)。ただし、セクションにサイズを表示する形式dufindprintf %s

find ~ -type f -printf '%s\n' | perl -ne 'BEGIN{$i=0;$i+=$_;END{print $i.qq|\n|;}'

答え2

バイトを合計していますが、ファイルシステムのブロックサイズが1バイトよりはるかに大きくなる可能性があります。正確な数を得るには、各ファイルのサイズをファイルシステムのブロックサイズの倍数に丸める必要があります。

GNU coreutilsをインストールした後に実行して、stat --file-system $HOMEファイルシステムのブロックサイズを見つけることができます。

平均して、ファイルはブロックの半分を無駄にします。半分のブロックに$ HOMEのファイル数を掛け、結果が70GiBに近いことを確認してください。もしそうなら、あなたの謎は解決されたものです。

関連情報