ハードディスクに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-box
、temp
、manjaro-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.
したがって、ここにはいくつかの問題があったことがわかります(それらを見つけるのを手伝ってくれた@Kamilに感謝します):
これは、du
によって報告された/data
の量がすべての子ディレクトリの合計であるという私の最初の直感でしたが(いくつかの丸めを含む)、df
とdu
の間の不一致を正当化しようとしていたと思い、 /data
とそのすべての子ディレクトリに対するdu
の出力を合計して、df
と同じ結果を取得します。
不一致の主な原因であるもう1つの問題は、/etc/fstab
の構成方法が原因でした。
UUID=<uuid> /data ext4 defaults 0 0
^
ISSUE
/etc/fstab
を作成したとき、マウントでファイルシステムチェック(fsck
)を有効にすることで起動を延長する必要はないと思ったので、6番目のフィールドは0
でしたが、結局のところは、iノードがクリーンアップされない原因となっていたため、df
とdu
の間に大きな違いが生じていました。
したがって、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
の使用法)が、du
とdf
の両方が同じ値を報告するのは良いことです:)
あなたの/data
は51G
を取っています。これには、その中のすべてのサブディレクトリとファイルが含まれます。サブディレクトリに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
には影響しません。
コマンドは、結果を最高から最低にソートしています。最高値はtotal/data
が使用するスペースであり、それ自体が使用したスペースではありません。