Linux Elastic Compute Service ( ECS ) インスタンスで df コマンドを実行してクラウドディスクの容量をクエリすると、クエリされた容量がディスク用に購入した容量と異なる場合があります。ほとんどの場合、この問題はディスク容量の不足が原因ではありません。この問題は、ディスク容量の一部がシステムによって予約されているか、iノードとファイルシステムのメタデータによって占有されているために発生します。
問題の説明
Linux ECS インスタンス用に 200 GiB のクラウドディスクを購入し、ディスクを初期化します。df -h コマンドを実行してディスク容量をクエリすると、200 GiB ではなく 197 GiB が返されます。
df -hコマンドの出力には、ECS コンソールで購入したクラウドディスクの容量とは異なる合計容量(サイズ)が表示されます。使用済み領域(使用済み)と空き領域(使用可能)の合計は、合計容量(サイズ)とは異なります。

ECS コンソールで購入したディスクの容量は GiB 単位で測定されます。以下の例では、df -h コマンドを実行してディスクパーティションの使用状況をクエリします。df -H コマンドを実行すると、コマンド出力のディスクパーティションの使用状況は GB 単位で測定されます。
df -hコマンドは 1,024 を基数として使用し、ディスクパーティションの使用状況は KiB、MiB、GiB などのバイナリ単位で測定されます。df -Hコマンドは 1,000 を基数として使用し、ディスクパーティションの使用状況は KB、MB、GB などの 10 進数単位で測定されます。
たとえば、パーティションの実際のサイズは 40 GiB です。df -h コマンドを実行すると、パーティション容量として 40G が返される場合があります。df -H コマンドを実行すると、パーティション容量として 42G が返される場合があります。これは、40 × 1024^3 バイトを 1000^3 で割ると約 42.95 GB になるためです。
原因
問題 1: df -h 出力の合計容量(サイズ)が ECS コンソールで購入したディスク容量と異なる
ファイルシステムのオーバーヘッド
200 GiB のクラウドディスクを購入し、ディスクをフォーマットしてから Linux ECS インスタンスに接続した場合、合計容量が約 197 GiB しかない場合があります。この問題は、ファイルシステムの作成時に追加のデータ構造が生成されるために発生します。データ構造はディスク容量を占有します。データ構造が占有するディスク容量は少量であっても、合計容量に影響を与えます。
問題 2: 使用済み領域(使用済み)と空き領域(使用可能)の合計が合計容量(サイズ)と異なる
ほとんどの場合、この問題は、iノードがディスク容量を占有しているか、システムによって一定量のディスク容量が予約されているために発生します。iノードによって占有されるディスク容量またはシステムによって予約される容量の計算方法については、このトピックのトラブルシューティングの方法セクションを参照してください。
iノードの消費
ファイルシステムは、各ファイルに iノードを割り当て、権限や所有者などのファイル属性を記録します。iノードは一定量のディスク容量を占有します。iノードによって占有されるディスク容量は、df -h コマンドではカウントされません。
システム予約
iノードに加えて、Linux はルートディレクトリが完全にいっぱいになるのを防ぐために一定量のディスク容量を予約し、システムの安定性とセキュリティを確保します。予約されているディスク容量は、df -h コマンドの出力の使用済み領域(使用済み)と空き領域(使用可能)の合計には含まれません。
トラブルシューティングの方法
パーティションの詳細情報を表示する
次のコマンドを実行して、クラウドディスクのパーティション情報を表示します。
sudo tune2fs -l /dev/[$Partition] | grep -E "count|size:"/dev/[$Partition] は、/dev/vdb1 などのパーティションの実際の名前に置き換えます。
次のコマンド出力が返されます。

iノードによって占有されるディスク容量を計算する
次のコマンドを実行して、iノードによって占有されるディスク容量の合計を取得します。
sudo tune2fs -l /dev/[$Partition] | awk '/Inode count:/{c=$3} /Inode size:/{split($0,a,":"); s=a[2]} END{if(c && s) printf "Inode space: %.2f GiB\n", c*strtonum(s)/(1024^3); else print "Error: Could not find Inode information."}'/dev/[$Partition] は、/dev/vdb1 などのパーティションの実際の名前に置き換えます。
次のコマンド出力が返されます。

次の式を使用して、iノードによって占有されるディスク容量を計算することもできます。
システムが予約するディスク容量の計算
システム予約済みのディスク領域の合計を取得するには、次のコマンドを実行します:
sudo tune2fs -l /dev/[$Partition] | awk '/Reserved block count:/{r=$4} /Block size:/{b=$3} END{if(r && b) printf "Reserved space: %.2f GiB\n", r*b/(1024^3); else print "Error: Could not find reserved block or block size information."}'/dev/[$Partition] を実際のパーティション名(/dev/vdb1 など)に置き換えます。
以下のコマンド出力が返されます。

また、以下の数式を使用して、システムによって予約されているディスク領域を計算することもできます: