ディスクスペースがどこに行くのか理解していますか?

ディスクスペースがどこに行くのか理解していますか?

私は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/1PID番号は1)。そのディレクトリの下にあるシンボリックリンクはexeプロセスとして実行されているバイナリを示し、名前付きファイルはmapsプロセスのメモリスペースにマップされたファイルを示し、名前付きディレクトリはプロセスハンドルに対して開いているすべてのファイルを一覧fd表示します。そこ(削除済み)が見えたらそれです。

答え2

ファイルシステムの使用量を対話的に閲覧するには、次のものを使用できますxdiskfreekdiskfreebaobab

デフォルトでは、 と同じ情報を取得できますが、du各サブディレクトリに関する情報を取得するのではなく、ディレクトリをクリックするだけで詳細を表示できます。

答え3

前述のように、du -shコマンドを使用してフォルダの合計スペース使用量を確認できます。

フォルダ内のすべてのアイテムのサイズ情報を取得するには、sudoでこのコマンドを実行する必要があります。

-sオプションを使用すると、duはディスク使用量を再帰的に確認します。

-hオプションは、出力を読み取ることができるようにすることです。使い慣れたら、-h オプションを使用するか、使用せずに du を実行して出力を比較できます。時には -h なしで出力すると便利です。

duコマンドにワイルドカードを送信して、複数のフォルダの使用量を評価することもできます。だから:

sudo du -sh /home/*

/homeの各フォルダの合計使用量を示します。

答え4

51GBが報告されたのでdu /51GBを使っているのです。削除されたファイルやマウントポイントによって隠されたファイルなど、見えない一部の使用済みスペースがある場合があります(終了を参照)。ディスク使用量を測定する方法はなぜそんなに変わりますか?- 実際、完全な答えは興味深いかもしれません。)しかし、あなたの場合はそうではありません。

PostgresQLデータベースがファイルシステム内にある場合はファイルとして表示され、合計に含まれます。明らかに見えるファイルよりも大きいため、データベースはアクセス可能なディレクトリツリーの外側にあります。

315GBは他のユーザーと共有できます。あるいは、315 GBのファイルシステムにアクセスできるようにストレージを構成しましたが、一部だけがディレクトリツリーとして表示され、データベースは表示されない他の部分に存在する可能性があります。たとえば、2つのサブディレクトリを持つ/clients/richardボリュームがあり、ディレクトリツリーのみを表示できます(たとえば、プロセスはrootdatabase/clients/richard/root根を引いたそこ)。

残りの 10 GB は一部のリカバリシステムである可能性があります(多くの VPS には、ブートされていないプライマリシステムを変更する必要がある場合は、リカバリシステムでブートできるサービスがあります)。あるいは、ルートのみが利用可能な緊急予備にすることもできます(「reserve」として検索)。ディスク使用量を測定する方法はなぜそんなに変わりますか?)。

関連情報