ext4
外观
开发者 | Mingming Cao, Andreas Dilger, Alex Zhuravlev (Tomas), Dave Kleikamp, Theodore Ts'o, Eric Sandeen, Sam Naghshineh, others |
---|---|
全称 | Fourth extended file system |
发布 | 稳定版: 2008年10月21日 不稳定版: 2006年10月10日 (Linux 2.6.28, 2.6.19) |
分区标识 | 0x83(MBR) EBD0A0A2-B9E5-4433-87C0-68B6B72699C7(GPT) |
结构 | |
目录内容 | 链表, hashed B-tree |
文件分配 | Extents/Bitmap |
坏块 | 表格 |
限制 | |
最大文件尺寸 | 16 TiB(for 4k block filesystem) |
最大文件数量 | 40亿(在文件系统建立时指定) |
最长文件名 | 256字节 |
最大卷容量 | 1 EiB |
文件名字符集 | 除NULL('\0')和 '/'外之所有字符(大小写敏感) |
功能 | |
日期记录 | 修改(mtime),属性修改(ctime),读取(atime),删除(dtime),建立(crtime) |
日期范围 | 1901年12月14日 - 2514年4月25日 |
日期分辨率 | 纳秒 |
岔流 | 否 |
属性 | extents, noextents, mballoc, nomballoc, delalloc, nodelalloc, data=journal, data=ordered, data=writeback, commit=nrsec, orlov, oldalloc, user_xattr, nouser_xattr, acl, noacl, bsddf, minixdf, bh, nobh, journal_dev |
文件系统权限 | POSIX |
透明压缩 | 否 |
透明加密 | 否 |
单一实例存储(SIS) | 否 |
操作系统支持 | Linux、Android、Windows(通过Ext2Fsd) |
第四代扩展文件系统(英语:Fourth extended filesystem,缩写为ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。
历史
[编辑]ext4原始的开发目标是一系列的向下兼容ext3、移除其64位限制与提升其性能的延伸包[1]。然而,某些Linux开发者因稳定性原因而拒绝将这些延伸包应用在ext3上[2],并要求其作为ext3的分支,改名为ext4并另行开发,以免影响到目前的ext3用户。该要求被接受以后,ext3维护者曹子德(Theodore Ts'o)在2006年6月28日公开了ext4的开发项目[3]。
在Linux核心2.6.19版中,首次导入ext4的一个先期开发版本[4]。在2008年10月11日,ext4被当成稳定版本,加入Linux 2.6.29版的源代码中,ext4的开发阶段进入尾声[5]。2008年12月25日,Linux 2.6.29版公开发布之后,ext4成为Linux官方的建议默认文件系统。
2010年1月15日,Google宣布将他们公司使用的文件系统,由ext2,升级为ext4。在同年12月14日,Google也宣布他们将在Android 2.3版中,使用ext4来取代之前的YAFFS。
特色
[编辑]- Extents
- ext4引进了Extent文件存储方式,以取代ext2/3使用的block mapping方式。Extent指的是一连串的连续实体block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中最高可达128MB[1]。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree方式被索引。
- ext3文件系统可以部分向上兼容于ext4(也就是说ext4文件系统可以被挂载为ext3分区)。然而若是使用到Extent技术的ext4将无法被挂载为ext3。
- 预留空间
- ext4允许对一文件预先保留磁盘空间。目前大多数文件系统做到这点的方式是直接产生一个填满0的文件;ext4和XFS可以使用Linux核心中的一个新的系统调用“fallocate()”获取足够的预留空间。
- 延迟获取空间
- ext4使用一种称为allocate-on-flush的方式,可以在资料将被写入磁盘(sync)前才开始获取空间;大多数文件系统会在之前便获取需要的空间。这种方式可以增加性能并减少文件分散程度。
- 突破32000子目录限制
- ext3的一个目录下最多只能有32000个子目录。ext4的子目录最高可达64000,且使用“dir_nlink”功能后可以达到更高(虽然父目录的link count会停止增加)。为了避免性能受到大量目录的影响,ext4默认开启Htree(一种特殊的B树)索引功能。该功能已经实现于Linux核心2.6.23版。
- 日志校验和
- Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。日志校验和的技术源于威斯康辛大学的一篇名为IRON File Systems的研究论文(见第六节transaction checksums校验和处理)[7]
- 在线磁盘整理
- 对于在线磁盘整理工具有许多草案,但是这些草案都没有被包含在主流的内核当中。即使Ext4包含有许多避免磁盘碎片的技术,但是磁盘碎片还是难免会在一个长时间使用过的文件系统中存在。Ext4将会有一个具有磁盘整理功能的工具[8]。
- 快速文件系统检查
- Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。这个特性已经在2.6.24版本的Linux内核中实现。
参见
[编辑]参考信息
[编辑]- ^ 1.0 1.1 Mathur, Avantika; Cao, MingMing; Bhattacharya, Suparna; Dilger, Andreas; Tomas, Alex; Vivier, Laurent. The new ext4 filesystem: current status and future plans (PDF). Proceedings of the Linux Symposium. Ottawa, ON, CA: Red Hat. 2007 [2008-01-15].[永久失效链接]
- ^ Torvalds, Linus. extents and 48bit ext3. LKML. 2006-06-09 [2009-10-23]. (原始内容存档于2017-08-22).
- ^ Ts'o, Theodore. Proposal and plan for ext2/3 future development work. LKML. 2006-06-28 [2009-10-23]. (原始内容存档于2009-02-19).
- ^ Leemhuis, Thorsten. Higher and further: The innovations of Linux 2.6.28(page 2). Heise Online. 2008-12-23 [2010-01-09]. (原始内容存档于2009-01-03).
- ^ ext4: Rename ext4dev to ext4. Linus' kernel tree. [2008-10-20]. (原始内容存档于2019-12-10).
- ^ Migrating to Ext4. DeveloperWorks. IBM. [2008-12-14]. (原始内容存档于2008-12-01).
- ^ Vijayan Prabhakaran; et al. IRON File Systems (PDF). CS Dept, University of Wisconsin. [2009-10-23]. (原始内容存档 (PDF)于2010-06-15).
- ^ ext4新功能#在线磁盘碎片整理. [2010-09-07]. (原始内容存档于2018-01-10).
相关介绍
[编辑]