次のコマンドを実行します。
$ df -h
次の出力を提供します。
Filesystem Size Used Avail Use% Mounted on
/dev/md2 91G 85G 1.2G 99% /home
つまり、合計91GiBのうち85GiBのみが使用され、6GiB Avail
(91 - 85 = 6)が残ります。
なぜAvail
1.2GiBだけが必要なのですか?
この質問は、次のものではなく、Used - Size
出力の列と列の間の矛盾について明示的に説明します。Avail
df
df
du
この関連質問。
私の場合、ファイルシステムから削除されたファイルはまだ使用されていません。
答え1
デフォルトでは、ext2、ext3、およびext4ファイルシステムはrootユーザーの容量の5%を予約します。これは断片化を減らし、rootユーザーまたはroot所有デーモンが重要なタスクを実行するときにディスク容量が不足する可能性を減らします。この予約理由の詳細については、次の質問に対する回答で確認できます。この関連質問。
予約の規模を確認できます。tune2fs
注文する:
tune2fs -l /dev/md2 | grep "Reserved block count:"
-m
予約率は、次のコマンドのオプションを使用して変更できますtune2fs
。
tune2fs -m 0 /dev/md2
-r
次のコマンドのオプションを使用して、保持される予約済みブロックの数を変更できますtune2fs
。
tune2fs -r 0 /dev/md2
予約済みスペースは、オペレーティングシステムに依存しない静的コンテンツを持つ大規模ファイルシステムでは最も便利ではありません。このようなファイルシステムの場合、保存期間をゼロに短縮するのが合理的です。ファイルシステムは/
、、、および/root
ディレクトリ/var
を含むシステムを含むデフォルトの5%保存状態を維持するのが最善です/tmp
。
答え2
この効果の最も一般的な原因は、開いているファイルが削除されたためです。
カーネルは、ファイルが削除されたときにファイルが使用されていない場合にのみ、ファイルのディスクブロックを解放します。それ以外の場合は、ファイルが閉じるかシステムが再起動されるまでこの操作が遅れます。
一時ファイルを残さないようにするためのUnix世界の一般的な方法は次のとおりです。
- プロセスは一時ファイルを作成して開きます。
- プロセスは、開かれたファイル記述子を保持し続けながらファイルのリンクを解放(つまり削除)します。
- プロセスは通常、ファイル記述子を使用してファイルを読み書きします。
- プロセスが完了すると、ファイル記述子が閉じ、カーネルが空き領域を解放します。
- プロセス(またはシステム)が予期せず終了すると、一時ファイルが削除されたため、クリーンアップは必要ありません。
- ボーナスとして、ファイルを削除すると、一時ファイルを作成するときに名前が競合する可能性が減り、ルートを除くすべての人に実行中のプロセスの追加のあいまいなレイヤーが与えられます。
この動作により、プロセスは突然自分の足元から出てくるファイルを処理する必要がなく、ファイルを削除するためにプロセスが互いにネゴシエートする必要がなくなります。ただし、通常は使用中のファイルを削除することは許可されていないため、これはWindowsシステムユーザーにとって予期しない動作です。
lsofコマンドは、rootとして実行されたときに開いているすべてのファイルを表示し、特に削除された削除済みファイルを示します。
# lsof 2>/dev/null | grep deleted
bootlogd 2024 root 1w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
bootlogd 2024 root 2w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
問題のあるプロセスを停止して再起動するか、サーバーを再起動すると問題が解決します。
たとえば、削除されたファイルがマウントされたファイルシステムイメージの場合、カーネルはそのファイルを開いたままにすることもできます。この場合、ファイルシステムをマウント解除するか、サーバーを再起動すると問題が解決します。
あなたの場合は、「欠けている」スペースの量で判断し、インストール後に削除したCentos DVDイメージなど、VPSの設定に使用したファイルへの参照を探します。