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

フォルダは空ですが、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

/dataこれは、私が間違っていなければ、がスペースを占有していることを示しており、、、およびディレクトリがスペースを占有して51Gいます(他のディレクトリはそれほど大きなスペースを占有していません)。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

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

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

はマウントポイントなので/data、2 つの値は同じであると予想されるかもしれません。しかし、2 つのツールの動作は異なります。duディレクトリを走査して検出されたオブジェクトのサイズを追加し、dfファイルシステムに自身の状態に関する知識を照会します。

このような大きな相違は、次のような理由から生じていると考えられます。

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

    次のコマンドは、そのようなファイルとそれらを使用しているプロセスを見つけるはずです。

    lsof /data | grep deleted
    

    出力例:

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

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

答え2

つまり、ここにはいくつかの問題があったことが判明しました (問題を見つけるのに協力してくれた @Kamil に感謝します)。

duによって報告される量は、/dataそのすべての子ディレクトリの合計(多少の丸めを含む)であるという私の最初の直感はありましたが、dfとの間の矛盾を正当化しようとしていたため、と同じ結果を得るには、 とそのすべての子ディレクトリに対する の出力duを合計する必要があると考えました。du/datadf

不一致の主な原因となっているもう 1 つの問題は、次の設定方法によるものでした/etc/fstab

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

を作成したとき、マウント時に/etc/fstabファイル システム チェック ( ) を有効にして起動時間を延長する必要はないと考え、6 番目のフィールドに を指定しましたが、実際には によって inode がクリーンアップされず、との間に大きな違いが生じていました。fsck0dfdu

したがって、 を見ると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同じ値を報告していることです :)

答え3

コマンドは結果を最高値から最低値の順に並べ替えます。最高値は合計が使用したスペースであり/data、 自身が使用したスペースではありません。

関連情報