私はDebianを使用しています。df -h
約275GBを使用していることを示しています。
Filesystem Size Used Avail Use% Mounted on
rootfs 315G 274G 26G 92% /
udev 10M 0 10M 0% /dev
tmpfs 6.4G 200K 6.4G 1% /run
/dev/disk/by-label/DOROOT 315G 274G 26G 92% /
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 13G 4.0K 13G 1% /run/shm
274GBはどこに行ったのか気になりますね。次のような答えはここにあります、ファイルシステムが約50GBを使用していることがわかります。
$ du -h / --max-depth 3
...
51G /
また、私は大規模なPostgresデータベースを持っていることを知っているので、それがどのくらいのスペースを使用しているかを確認できます。
$ psql
=> SELECT pg_database.datname, pg_database_size(pg_database.datname), pg_size_pretty(pg_database_size(pg_database.datname)) FROM pg_database ORDER BY pg_database_size DESC;
datname | pg_database_size | pg_size_pretty
-------------+------------------+----------------
mydatabase | 230809349908 | 215 GB
postgres | 6688532 | 6532 kB
template1 | 6570500 | 6417 kB
template0 | 6562308 | 6409 kB
したがって、Postgresは約215GBを使用し、ファイルシステムは約50GBを使用します。
しかし、残りの10GBがどこに行ったのかを確認する方法は何ですか?
あまりないのにこれをどのように追跡するのか気になりますね。
ベストアンサー1
追加スペースは開いていましたが、削除されたファイルに割り当てられる可能性が高いです。
du
ファイルシステムを介してアクセスできるファイル(つまり、ファイル名を持つファイル)のみが表示されます。ファイルが削除されると、そのファイル名はディレクトリから削除されますが、ディスクブロック(およびinode)は、すべてのプロセスがそのファイルに対して開いているファイルハンドルを閉じたときにのみ解放されます。この問題を解決する最も簡単な方法は、開いているログファイルを削除してスペースを解放することです。その後、保持プロセスがファイルハンドルを閉じるように強制するか、そのプロセスを終了する必要があります(終了プロセスは常にすべてのファイルハンドルを閉じます)。プロセスがファイルを使用する他の方法があります(バイナリとして実行、共有オブジェクトとしてロード、メモリ空間にマッピング)。
実行中のプロセスが保存した開いているが削除されたファイルを表示するには、同じユーティリティを使用するか、またはlsof
を表示できます/proc/*
。ここで実行されている各プロセスには、PID名の付いたディレクトリがあります(たとえば、/proc/1
PID番号は1)。そのディレクトリの下にあるシンボリックリンクはexe
プロセスとして実行されているバイナリを示し、名前付きファイルはmaps
プロセスのメモリスペースにマップされたファイルを示し、名前付きディレクトリはプロセスハンドルに対して開いているすべてのファイルを一覧fd
表示します。そこ(削除済み)が見えたらそれです。