使用mkfs.ext4默认参数格式化磁盘后,发现格式化时间特别长,并且格式化会占用磁盘很大的空间。
例如2TB的磁盘格式化会占用10分钟左右时间,并占用30G左右的磁盘空间。
究其原因,原来inode会占用磁盘空间,每个inode占用256b大小空间。
默认情况下,mkfs2fs会为每16kb的磁盘空间分配一个inode,
格式化时系统根据磁盘大小,计算可以保存的文件个数,进而为inode保留空间。
所以格式化大容量磁盘,系统会分配过多inode,为inode预留过多空间,导致磁盘空间占用特别大。
例如:一个2Tb的磁盘,格式化时会出现以下信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mkfs.ext4 -n/dev/sdc1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OStype: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
122101760 inodes, 488378368 blocks
24418918 blocks (5.00%) reservedforthe super user
First data block=0
Maximum filesystem blocks=4294967296
14905 blockgroups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
|
通过以上信息可以计算出磁盘格式化后inode占用的磁盘空间
122101760 * 256 / 1024 / 1024 = 29810mb
inode数量 122101760
乘以
每个inode占用的空间 256b
除以
1024 换算为kb
再除以
1024 换算为 mb
通过以上计算可以得出结论:磁盘空间很大的磁盘使用默认参数格式化磁盘会占用大量磁盘空间,浪费磁盘空间。
mkfs.ext4有参数-i,可以指定:多大磁盘空间分配一个inode
1
2
3
4
5
6
7
8
9
10
|
manmkfs.ext4
-i bytes-per-inode
Specify the bytes/inoderatio.
mke2fs creates an inodeforevery bytes-per-inode bytes of space on the disk.
The larger the bytes-per-inode ratio, the fewer inodes will be created.
This value generally shouldn’t be smaller than the blocksize of the filesystem,
since in thatcasemoreinodes would be made than can ever be used.
Be warned that it is not possible toexpand
the number of inodes on a filesystem after it is created,
so be careful deciding the correct valueforthis parameter.
|
增大-i参数,从而减小inode总数,可以减小inode占用的磁盘空间,减少磁盘浪费。
例如:指定1m空间分配一个inode来格式化2TB磁盘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mkfs.ext4 -i 1048576 -n/dev/sdc
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OStype: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=1 blocks, Stripe width=0 blocks
1907840 inodes, 488378368 blocks
24418918 blocks (5.00%) reservedforthe super user
First data block=0
Maximum filesystem blocks=4294967296
14905 blockgroups
32768 blocks per group, 32768 fragments per group
128 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
|
通过以上信息可以计算出磁盘格式化后inode占用的磁盘空间
1907840 * 256 / 1024 / 1024 = 465mb
inode数量 1907840
乘以
每个inode占用的空间 256b
除以
1024 换算为kb
再除以
1024 换算为 mb
通过更改-i参数,节省了29G空间。
除了更改-i参加,也可以直接通过-T参数直接指定多大磁盘空间分配一个inode。
1
2
|
mkfs.ext4 -T largefile -n/dev/sdc1
mkfs.ext4 -T largefile4 -n/dev/sdc1
|
largefile和largefile4对应的【多大磁盘空间分配一个inode】其实是在 /etc/mke2fs.conf 定义的。
largefile 类型就是 1M 一个 inode
largefile4 类型就是 4M 一个 inode