question: How can I calculate the size of an ext4 partition that is needed to have a predefined amount of space available for the filesystem?
example: I'd like to have a filesystem with 100 GB space (according to df
) and would like to know how much space in MiB I need to give my new ext4 partition in GParted.
background: I noticed that df
(1K block equals 1024 bytes) displays different filesystem sizes than lsblk -b
(1 size unit equals 1 byte). I understand that this is because lsblk
shows the size of partitions while df
shows the size of filesystems (the space that is actually available for files).
example:
$ 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%
Using the default ext4 configuration (GParted, LinuxMint and probably others) the block to inode ratio is 4:1 and block size is 4096 while inode size is 256 so the data to inode ratio is 64:1 (source: tune2fs -l
). Thus, the inode table only contributes to 1.5625% ext4 filesystem overhead.
Where does the remaining overhead occur and how can I calculate it? I've done a test for various ext4 partition sizes (10,000 to 380,000 MiB) and the overhead fluctuates between ~1.8 and ~2.3% but seems to decrease with increasing partition size (see image).
side note #1: My question has nothing to do with KiB (2¹⁰ bytes) vs. KB (10³ bytes), MiB (2²⁰ bytes) vs. MB (10⁶ bytes), GiB (2³⁰ bytes) vs. GB (10⁹ bytes) and so on.
side note #2: This is also not about reserved blocks (5% per default) as those are shown in df
.