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.
答え1
は/data
を消費します51G
。これには、その中のすべてのサブディレクトリとファイルが含まれます。du
サブディレクトリについて によって報告されたサイズを追加すると (丸めの問題を考慮すると)、約 になります51G
。 に直接通常のファイルがある場合/data
、それらも について報告された値に寄与します/data
。
したがって、du
高い使用率は報告されません。df
高い使用率を報告するのは、96G
ファイルシステムで使用中です。
はマウントポイントなので/data
、2 つの値は同じであると予想されるかもしれません。しかし、2 つのツールの動作は異なります。du
ディレクトリを走査して検出されたオブジェクトのサイズを追加し、df
ファイルシステムに自身の状態に関する知識を照会します。
このような大きな相違は、次のような理由から生じていると考えられます。
du
すべてのオブジェクトにアクセス (または情報を取得) できませんでした。permission denied
エラーは発生しましたか?- ファイルシステムに不整合があります。aka
fsck.ext4
がe2fsck
役立つかもしれません。 (最も可能性が高い) 削除されたファイルが少なくとも 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
/data
df
不一致の主な原因となっているもう 1 つの問題は、次の設定方法によるものでした/etc/fstab
。
UUID=<uuid> /data ext4 defaults 0 0
^
ISSUE
を作成したとき、マウント時に/etc/fstab
ファイル システム チェック ( ) を有効にして起動時間を延長する必要はないと考え、6 番目のフィールドに を指定しましたが、実際には によって inode がクリーンアップされず、との間に大きな違いが生じていました。fsck
0
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
同じ値を報告していることです :)
答え3
コマンドは結果を最高値から最低値の順に並べ替えます。最高値は合計が使用したスペースであり/data
、 自身が使用したスペースではありません。