df
どちらもdu
私のルートパーティション(100 GB SSD)に余分なスペースがなく、100 Gのみを使用すると誤って報告します/home/steven
。ただし、提供されるディスク使用量の単純な合計は、du
13G 使用量より少なくなります。
この問題をどのように解決できますか?
具体的には:
~ » 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/steven
。du
ホームディレクトリの最上位レベルの一般ファイルのサイズは計算されません。。したがって、この合計には非常に大きなファイルは含まれません.xsession-errors
。
走るとき
du -sb ~ returns 91296460205, but the sum of du -sb ~/* is only 1690166532
出力du -sb ~/*
にで始まるファイルが含まれていません.
。
du ~ | tail -1
どちらもホームディレクトリのディスク使用量を合理的にdu -s ~
表示する必要があります(もちろん削除されましたが開いたファイルを除く)。ただし、セクションにサイズを表示する形式du
find
printf %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に近いことを確認してください。もしそうなら、あなたの謎は解決されたものです。