mkfs.ext4命令来自于英文词组“make filesystem Ext4”的缩写,其功能是用于对磁盘设备进行Ext4格式化的操作。
mkfs.ext4 参数-b block-size 块大小(1k,2k,4k) -c 坏块测试 -l filename从文件读坏块列表 -C cluster-size 簇大小 (大块分配持性) -D 使用direct I/O -E 扩展属性mmp_update_interval=MMP更新时间间隔,必需小于300sstride=条块大小(RAID组中每个条带单元chunk大小)stripe_width=条带大小 (单位为block),(在数据定时,块分配器尽可能的防止产生read-modify-write)resize=保留在线调整时的空间大小lazy_itable_init=0/1 inode表不完全初始化 (挂载时由内核在后台初始化) // 40TG mount后50M写初始化55分钟 (格式化时:20s,强制初始化时:7min) (mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 )lazy_journal_init=0/1日志inode表不完全清0test_fs设置文件系统体验标志-F(force 强制) -f fragment-size 指定片段大小 -g blocks-per-group 指定每一个块组内块的数量 -G number-of-groups 指定块组数量(在元数据负载重时可以提高元数据性能) -i bytes-per-inode 指定 bytes/inode 比率 -I inode-size 指定inode大小 -j 创建一个ext3日志。默认创建合适大小的日志区 -J 创建指定属性的日志。逗号分隔。 (size=1024块 内部日志大小,device= 外部日志设备 )size= journal-size 内部日志大小,单位为M,最小为1024个文件系统块,(最大为10240000个文件系统块或文件系统的一半)device = external-journal 外部日志块设备(设备名,标签,UUID)外部日志必需先创建:mke2fs -b 4096 -O journal_dev external-journal (/dev/ramhda)mkfs.ext4 -J device= external-journal (/dev/ramhda) -F /dev/mapper/vggxxxxxxx -L 设置volume 标签,最长为16个byte -m 指定保留空间百分比,为root用户 -M 设置最后挂载目录 -n 不真正创建文件系统,只是显示创建的信息 -S 只写超级块和块组描述符。(当超级块和备份超级块错误后,可以用来恢复数据。因为它不会touching inode表和bitmap) -O feature 指定创建文件系统时的持性(/etc/mke2fs.conf)bigalloc 使能大块分配(cluster-size)dir_index 使用哈希B树加速目录查找extents 使用extents替代间接块filetype在目录项中存储文件类型信息flex_bg 允许为每一个块组元数据(分配bitmap和inode表)存放在任何位置 has_journal 创建ext3日志(-j)journal_dev 在给定的设备上创建外部ext3日志large_file 支持>2G的文件(现代内核会自动打开) quota 创建quota inodes(inode#3为用户配额,inode#4为组配额) ,并在超级块中设置。(挂载后自己启用quota)resize_inode 保留空间以便未来块组描述表增长。用于resize2fssparse_super 创建少量的超缓块拷贝uninit_bg 创建文件系统时不初始化所有的块组,加速创建时间,和e2fsck时间、 -O^has_journal 不启用日志
检查指定的磁盘设备并进行格式化操作:
[root@linuxcool ~]# mkfs.ext4 -c /dev/sdb
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 2468ba17-0d37-4900-b67e-5f3a24084fc5
Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000Checking for bad blocks (read-only test): 0.00% done, 0:00 elapsed. (0/0/0 errdone
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
对指定的磁盘设备进行格式化操作,添加卷标识,并修改块大小:
[root@linuxcool ~]# mkfs.ext4 -L 'LinuxCool' -b 2048 /dev/sdb
mke2fs 1.44.3 (10-July-2018)
Creating filesystem with 10485760 2k blocks and 1310720 inodes
Filesystem UUID: 73ad248c-2a01-49dd-aa46-8770ecbc56fd
Superblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000, 3981312, 5619712, 10240000Allocating group tables: done
Writing inode tables: done
Creating journal (65536 blocks): done
Writing superblocks and filesystem accounting information: done
使用mkfs.ext4格式化大容量磁盘
使用mkfs.ext4默认参数格式化磁盘后,发现格式化时间特别长,并且格式化会占用磁盘很大的空间。
例如2TB的磁盘格式化会占用10分钟左右时间,并占用30G左右的磁盘空间。
究其原因,原来inode会占用磁盘空间,每个inode占用256b大小空间。
默认情况下,mkfs2fs会为每16kb的磁盘空间分配一个inode,
格式化时系统根据磁盘大小,计算可以保存的文件个数,进而为inode保留空间。
所以格式化大容量磁盘,系统会分配过多inode,为inode预留过多空间,导致磁盘空间占用特别大。
linux 增加inode 的方法
创建文件系统时,可以指定块的大小。如果将来在你的文件系统中是一些比较大的文件的话,使用较大的块大小将得到较好的性能。将ext2文件系统的块大小调整为4096byte而不是缺省的1024byte,可以减少文件碎片,加快fsck扫描的速度和文件删除以及读操作的速度。另外,在ext2的文件系统中,为根目录保留了5%的空间,对一个大的文件系统,除非用作日志文件,5%的比例有些过多。可以使用命令"# mke2fs -b 4096 -m 1 /dev/hda6"将它改为1%并以块大小4096byte创建文件系统。
使用多大的块大小,需要根据你的系统综合考虑,如果系统用作邮件或者新闻服务器,使用较大的块大小,虽然性能有所提高,但会造成磁盘空间较大的浪费。比如文件系统中的文件平均大小为2145byte,如果使用4096byte的块大小,平均每一个文件就会浪费1951byte空间。如果使用 1024byte 的块大小,平均每一个文件会浪费927byte空间。在性能和磁盘的代价上如何平衡,要看具体应用的需要。