ext4 空きブロックまたはオーバーヘッドクラスタ

ext4 空きブロックまたはオーバーヘッドクラスタ

ルートスペースを予約せずにまれな16GBファイルにext4ファイルシステムを作成すると、実際に利用可能なサイズは15.58GBです。なぜこれが起こるのですか?私が使用したコマンドは次のとおりです。

fallocate -l 16G test.img
mkfs -t ext4 -m 0 test.img
mount test.img test

tune2fsには4096(ブロックサイズ)を掛けて1024^3で割ってGB単位の値を得ることができる値があり、Overhead clusters: 109857欠けている〜0.41GBを取得します。https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layoutオーバーヘッドクラスタリングについて非常に奇妙なことを言いました。

fsのオーバーヘッドブロック/クラスタ。 (はいこのフィールドは常にゼロです。これはカーネルが動的に計算することを意味します。)

どういう意味ですか?この問題に関連していますか?インストールされたイメージの合計サイズが16 GBになるには、Fallocateでどのサイズを設定する必要がありますか?

答え1

「オーバーヘッドクラスタ」は、ファイルシステムがディスクを管理するために使用するすべてのメタデータです。通常、ext4の最大のコンポーネントはinodeテーブルとログですtune2fs

デフォルトの inode_ratio は 16KiB です。これはあなたの例で1M inode x 256バイトを提供し、これは不思議な0.41GiBの0.25です。

起動時にinode番号とログサイズを設定できます。ファイルシステムが作成されました。。以前のコメント作成者が指摘したように、これをゼロに設定することはできません。

答え2

インストールされたイメージの合計サイズが16 GBになるには、Fallocateでどのサイズを設定する必要がありますか?

現在と同様に16GBです。

ルートスペースを予約せずにまれな16GBファイルにext4ファイルシステムを作成すると、実際に利用可能なサイズは15.58GBです。なぜこれが起こるのですか?

ファイルが保存されるデバイスは、ファイルスペースとサイズが絶対に同じではありません。完全なファイルシステム情報(ファイル名、属性、およびファイルに属するデータが実際にブロックデバイスに保存される場所)を移動する必要があります。どこかに

この問題に関連していますか?

これは問題ではありません!これが真実です。

実際、サイズが正確に16GBの単一ファイルがないと、必要な「オーバーヘッド」を計算できません。すべてのファイルには少し余分なスペースが必要です。既存のファイルシステムでは、小さなファイル/ファイルテールを計算できません。 1つのブロックにまとめることもできるので、丸める必要はありません。ファイルサイズはブロックサイズの次の倍数です(例:4kB)。

だから質問がちょっと曖昧ですね。 16GBのストレージ容量が必要な場合(何が必要ですか?)正確に16GBファイルのストレージスペース? 16GBのイメージを使用する方が現実的ではないでしょうか? )、「少し」過剰なプロビジョニングが必要です。これは、将来のファイルシステムの内容を知らずにできるだけ正確に行うことです。バイト単位で正確。それでは17GBですね?

関連情報