1056  
   0
使用mkfs.ext4格式化大容量磁盘及通过降低inode数来节省磁盘空间
作者:张永强于 2018年02月08日 发布在分类 / 技术公告 / FAQ 下,并于 2018年02月08日 编辑
mkfs linux 格式化 大容量磁盘 inode 磁盘空间

一、问题及原理释义

使用mkfs.ext4默认参数格式化磁盘后,发现格式化时间特别长,并且格式化会占用磁盘很大的空间。
例如2TB的磁盘格式化会占用10分钟左右时间,并占用30G左右的磁盘空间。
究其原因,原来inode会占用磁盘空间,每个inode占用256b大小空间。
默认情况下,mkfs2fs会为每16kb的磁盘空间分配一个inode,
格式化时系统根据磁盘大小,计算可以保存的文件个数,进而为inode保留空间。
所以格式化大容量磁盘,系统会分配过多inode,为inode预留过多空间,导致磁盘空间占用特别大。

二、示例

1、问题现象描述及分析

例如:一个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
通过以上计算可以得出结论:磁盘空间很大的磁盘使用默认参数格式化磁盘会占用大量磁盘空间,浪费磁盘空间。

2、解决方法

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


 知识评论当前评论数0

 推荐知识


 访问权限

创建人 张永强
工作小组 宏杉成员
文档编辑权限 创建者私有
文档阅读权限 来自分类
分类阅读权限 所有人
分类编辑权限 技术服务部  : 机构     渠道合作伙伴  : 机构     系统管理员 : 人员     
分类审核权限 审核小组  : 岗位    
分类预览权限 审核小组 : 岗位    
分类下载权限 技术服务部  : 机构    
 历史版本

修改日期 修改人 备注
2018-02-08 14:57:22[当前版本] 张永强 增加导航目录

 目录
    宏杉案例知识库-V4.0.1