web-dev-qa-db-ja.com

フォルダは空ですが、duは使用率が高いと報告しています

ハードディスクに115GBパーティションがあります(cgdisk /dev/sdaの出力は以下のとおりです):

Part. #     Size        Partition Type            Partition Name
----------------------------------------------------------------
            1007.0 KiB  free space
   1        499.0 MiB   Windows RE                Basi
   2        100.0 MiB   EFI System                EFI 
   3        16.0 MiB    Microsoft reserved        Micr
   5        43.9 GiB    Linux filesystem          ubuntu-root
   6        43.9 GiB    Linux filesystem          ubuntu-home
   4        114.9 GiB   Linux filesystem          data         <--- this partition
   7        29.5 GiB    Linux filesystem

そして、そのパーティションを/data/etc/fstabにマウントしました。

UUID=<drive-uuid>  /data  ext4  defaults  0  0

df -h /dataを実行すると、次の出力が得られます。

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   96G   11G  90% /data

そして、次のようにduを使用すると、du /data -h --max-depth=1 | sort -hr、次のように表示されます。

51G    /data
40G    /data/virtual-box
4.4G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
764M   /data/OneDrive
62M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

これは、私が間違っていない場合、/data51Gを使用していることを示しており、virtual-boxtempmanjaro-minikube、および.nugetディレクトリがスペースを使用しています(他のディレクトリは大きなスペースを使用しません)

ディレクトリの長いリストを作成する場合(ls -alh /data):

total 68K
drwxr-xr-x  10 farzad farzad 4.0K Aug 13 21:47 .
drwxr-xr-x  19 root   root   4.0K Jul 13 10:32 ..
drwx------   2 farzad farzad  16K Mar 22 18:22 lost+found
drwx--x--x  15 root   root   4.0K Aug 20 17:47 manjaro-lxd
drwxr-xr-x   3 farzad farzad 4.0K Jul  3 18:16 manjaro-minikube
drwxrwxr-x   9 farzad farzad 4.0K Jul 30 17:38 .minikube
drwxr-xr-x 202 farzad farzad  16K Aug 17 10:00 .nuget
drwxr-xr-x   3 farzad farzad 4.0K Aug 13 21:47 OneDrive
drwxrwxr-x  16 farzad farzad 4.0K Jun  3 21:45 temp
drwxr-xr-x   6 farzad farzad 4.0K Aug 20 20:21 virtual-box

51Gについて報告された/dataに寄与するファイルや何かが見当たらないので、ドライブにはほぼ65Gの空き領域があると思いますが、何らかの理由で、/data親ディレクトリが51Gを単独で使用しています。

インターネットを調べてみましたが、何も見つかりませんでした。誰かが私に何が起こっているのか教えてもらえますか?


更新

回答で示唆されているように、私はlsof /data | grep deleted(rootとして)を実行しましたが、関連性があるかどうかわからない警告が表示されますが、結果はありません。

lsof: WARNING: can't stat() Fuse.gvfsd-Fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
1
Farzad

したがって、ここにはいくつかの問題があったことがわかります(それらを見つけるのを手伝ってくれた@Kamilに感謝します):

これは、duによって報告された/dataの量がすべての子ディレクトリの合計であるという私の最初の直感でしたが(いくつかの丸めを含む)、dfduの間の不一致を正当化しようとしていたと思い、 /dataとそのすべての子ディレクトリに対するduの出力を合計して、dfと同じ結果を取得します。

不一致の主な原因であるもう1つの問題は、/etc/fstabの構成方法が原因でした。

UUID=<uuid>  /data  ext4  defaults  0  0
                                       ^
                                     ISSUE

/etc/fstabを作成したとき、マウントでファイルシステムチェック(fsck)を有効にすることで起動を延長する必要はないと思ったので、6番目のフィールドは0でしたが、結局のところは、iノードがクリーンアップされない原因となっていたため、dfduの間に大きな違いが生じていました。

したがって、man 5 fstabを見ると、チェックを有効にするには、ルートファイルシステムの値が1であり、他のファイルシステムの値が2であることがわかります。そのため、変更しました。次の行:

UUID=<uuid>  /data  ext4  defaults  0  2

そして再起動後、多くの問題がfsckによって報告され、私はそれらを修正することを選択しました。そして今、du /data -h --max-depth=1 | sort -hrの出力:

28G    /data
16G    /data/virtual-box
4.5G   /data/temp
4.1G   /data/manjaro-minikube
1.9G   /data/.nuget
824M   /data/OneDrive
64M    /data/manjaro-lxd
40K    /data/.minikube
16K    /data/lost+found

そしてdf /data -hの出力:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       113G   28G   80G  26% /data

元の質問と比較して、いくつかのファイルを削除したことは注目に値します(したがって、28Gではなく51Gの使用法)が、dudfの両方が同じ値を報告するのは良いことです:)

1
Farzad

あなたの/data51Gを取っています。これには、その中のすべてのサブディレクトリとファイルが含まれます。サブディレクトリにduによって報告されたサイズを追加すると(そして丸めの問題を検討すると)、約51Gが得られます。 /dataに直接通常のファイルがある場合、それらは/dataについても報告される値に影響します。

したがって、duは使用率が高いことを報告しません。高い使用率を報告するのはdfです:96Gはファイルシステムで使用されています。

/dataはマウントポイントであるため、2つの値が同じであると予想される場合があります。ただし、2つのツールの動作は異なります。duはディレクトリをトラバースして検出されたオブジェクトのサイズを追加し、dfはファイルシステムに自身の状態の知識についてクエリを実行します。

このような大きな不一致は、次の理由による可能性があります。

  • duは、すべてのオブジェクトにアクセスできませんでした(または情報を取得できませんでした)。 permission deniedエラーはありましたか?
  • ファイルシステムに不整合があります。 fsck.ext4別名e2fsckが役立つ場合があります。
  • 最も可能性が高い)削除されたファイルが少なくとも1つあります(それぞれのiノードを指すすべてのディレクトリエントリが削除されました。ファイルはに表示されませんduがそれを知ることができないディレクトリリスト)が、それはまだいくつかのプロセスによって使用されています(したがって、ファイルシステムはデータを保持し、dfに報告するときにそれを考慮に入れます)。 この回答この質問 を参照してください。

    次のコマンドは、そのようなファイルとそれらを使用するプロセスを見つける必要があります。

    lsof /data | grep deleted
    

    出力例:

    some_daemon  …  …  …  …  …  …  …  /data/temp/huge_file (deleted)
    

    これは、ファイルシステムがhuge_fileの使用を停止した後にのみsome_daemonを本当に削除することを意味します。一般に、プロセスはファイルに追加または切り捨てることができるため、ファイルが拡大または縮小する可能性があることに注意してください。これはdfの発言に影響しますが、duには影響しません。

2

コマンドは、結果を最高から最低にソートしています。最高値はtotal/dataが使用するスペースであり、それ自体が使用したスペースではありません。

0
ajgringo619