如何计算为文件系统提供预定义空间所需的 ext4 分区的大小?

Mar*_*cki 5 linux filesystems partition ext4

问题:如何计算为文件系统提供预定义空间所需的 ext4 分区的大小?

示例:我想要一个具有 100 GB 空间的文件系统(根据df),并且想知道在 GParted 中为我的新 ext4 分区提供多少 MiB 空间。

背景:我注意到df(1K 块等于 1024 字节)显示的文件系统大小与lsblk -b(1 个大小单位等于 1 字节)不同。我知道这是因为lsblk显示分区的大小同时df显示文件系统的大小(实际可用于文件的空间)。

例子:

$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda10      90187896   57032  85506480   1% /home/user

$ lsblk -b
NAME  MAJ:MIN RM        SIZE RO TYPE MOUNTPOINT
sda10   8:10   0 94371840000  0 part /home/user

df-calculation: 90187896*1024 = 92352405500 bytes
lsblk:                          94371840000 bytes
overhead:                       1 - 92352405500/94371840000 ~ 2.14%
Run Code Online (Sandbox Code Playgroud)

使用默认的 ext4 配置(GParted、LinuxMint 和可能的其他配置),块与 inode 的比率为 4:1,块大小为 4096,而 inode 大小为 256,因此数据与 inode 的比率为 64:1(来源:)tune2fs -l。因此,inode 表仅贡献 1.5625% 的 ext4 文件系统开销。

剩余的开销在哪里发生,我该如何计算?我已经对各种 ext4 分区大小(10,000 到 380,000 MiB)进行了测试,开销在 ~1.8% 到 ~2.3% 之间波动,但似乎随着分区大小的增加而减少(见图)。

文件系统开销 [%] 超过分区大小 [MiB]

旁注 #1:我的问题与 KiB(2¹?字节)与 KB(10³ 字节)、MiB(2²?字节)与 MB(10?字节)、GiB(2³?字节)与 GB 无关(10?字节)等等。

旁注#2:这也不是关于保留块(默认为 5%),如df.

eMP*_*584 1

那么,可用的最大容量可以估计为[Partition Size] * (1 - inode_size / inode_ratio - reserved-blocks-percentage)。因此,要获得特定容量,请计算[Partition Size] = [Capacity] / (1 - inode_size / inode_ratio - reserved-blocks-percentage)..请参阅 /etc/mke2fs.conf 了解常用值。