Ext4文件系统简介:功能列表与迁移注意事项

运维 系统运维
ext4是Linux系统下的日志文件系统,是ext3文件系统的后继版本。ext4开发的原因是因为ext3在引入新功能的时候遇到了一些问题,而历经四年的开发,ext4文件系统现在已经准备好成为主流的Linux文件系统之一了。本文介绍ext4的功能以及迁移的注意事项。

Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 — 您可以将 Linux 根(/)和系统目录放在这种文件系统里。目前(2008年),这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。

目前正在开发的最重要的 Linux 文件系统是 ext4 — 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(51CTO编辑注:本文撰写于2008年,当时ext4尚处于试验阶段。截至到2010年6月,ext4目前已在多种发行版中被接受为默认文件系统之一,红帽的RHEL 6也将采用ext4作为默认文件系统,可以说ext4技术现在已经成熟)。

Ext4 与 ext3 的对比

扩展文件系统(ext 或 extfs)第四版产生的原因是开发人员在 ext3 中并入了新的高级功能。但在实现的过程出现了几个问题:

  • 一些新功能违背向后兼容性。
  • Ext3 代码变得更加复杂并难以维护。
  • 这些更改使原本十分可靠的 ext3 变得不可靠。

由于这些原因,从 2006 年 6 月份开始,开发人员决定把 ext4 从 ext3 中分离出来进行独立开发。Ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都不怎么注意这件事情。随着 2.6.19 内核在 2006 年 11 月的发布,ext4 ***次出现在主流内核里,但是它当时还处于试验阶段(现在还是),因此很多人都忽视了它。

由于还处于开发阶段,从 2.6.24.4 内核开始,ext4 的功能列表就一直在变动。 Ext4 的当前和预期功能包括从 ext3 发展而来的功能,见下表:

◆大型文件系统

ext4文件系统可支持***1 Exbibyte的分区区与***16 Tebibyte的文件。

◆Extents

ext4引进了Extent文件存储方式,以取代ext2/3使用的block mapping方式。Extent指的是一连串的连续物理block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中***可达128MB[1]。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree方式被索引。

◆向下兼容

ext4向下兼容于ext3与ext2,因此可以将ext3和ext2的文件系统挂载为ext4分区区。由于某些ext4的新功能可以直接运用在ext3和ext2上,直接挂载即可提升少许效能。

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-tree)索引功能。该功能已经实现于Linux内核2.6.23版。

◆日志校验和

Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。日志校验和的技术源于威斯康辛大学的一篇名为IRON File Systems的研究论文(见第六节 transaction checksums校验和处理)[5]

◆在线磁盘整理

对于在线磁盘整理工具有许多草案,但是这些草案都没有被包含在主流的内核当中。即使Ext4包含有许多避免磁盘碎片的技术,但是磁盘碎片还是难免会在一个长时间使用过的文件系统中存在。Ext4将会有一个具有磁盘整理功能的工具[来源请求].

◆快速文件系统检查

Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。这个特性已经在2.6.24版本的Linux内核中实现。

(以上列表引用自维基百科)

功能列表的一些功能在实际使用中不具备与 ext3 的向后兼容性 — 即可能无法使用 ext3 文件系统类型的代码挂载 ext4 文件系统。但是 ext4 保留了向前兼容性 — 您可以像挂载 ext4 文件系统一样挂载 ext3 文件系统。

#p#

ext4 的使用对象

Ext4 最为显著的改进是文件和文件系统的大小。因此,最可能需要 ext4 的用户是那些磁盘空间大小为几个 TB 的用户。然而表 1 中的功能列表还展示了其他一些吸引人的改进。例如,如果您的目录带有大量子目录,或者要求时间戳的精确度小于一秒,您可能希望尝试使用 ext4。

从2.6.28版本开始,Linux Kernel开始正式支持新的文件系统EXT4。

把 ext3 迁移到 ext4

当系统在 ext4 的支持下启动到内核时,您就可以使用新的文件系统了。为此,必须准备一个分区、独立磁盘的冗余阵列(RAID)设备或其他存储空间。然后就可以把它用作 ext4 文件系统并调整文件系统选项。

准备一个设备

如果希望从简单的入手,可以使用新版或旧版的 e2fsprogs 包(即 mkfs.ext3 或 mkfs.ext4)附带的工具格式化分区或其他设备。例如, mkfs.ext4 -j /dev/sda6 准备了 /dev/sda6 分区以供使用。使用 mkfs.ext4 可以产生一个文件系统,并激活了很多特定于 ext4 的功能。

目前,e2fsprogs 程序还没有完全跟上内核文件系统的步伐。幸运的是,大部分内核驱动程序的功能都不需要对 mkfs.ext4 或其他实用程序进行特殊准备。当挂载文件系统时,将激活 ext4 功能。如果要在大媒体上使用 ext4, 就必须进行大胆的探索,确保记录和报告所遇到的问题!

如果想把现有的 ext2 或 ext3 文件系统用作 ext4 文件系统,也不难实现。只需要按照随后描述的方法挂载设备即可。然而如果使用某些新的功能,如 extent,该文件系统就不能和 ext2 或 ext3 的驱动程序一起使用。

使用 ext4

要把一个设备用作 ext4 文件系统,就必须使用 ext4dev 文件系统类型代码挂载它(当 ext4 变得稳定时,文件系统类型代码将变为 ext4)。例如,mount -t ext4dev /dev/sda6 /mnt/point 在 /mnt/point 中把 /dev/sda6 挂载为 ext4 文件系统。这些都是 ext4 的基本用法。注意,默认的挂载选项启用了 extent,这会导致文件系统在作为 ext3 文件系统使用时变得不可用。如果您想尝试一下 ext4 同时可以返回到 ext3,则使用 -o noextents 选项禁用 extent 功能。

一旦挂载以后,可以像其他任何文件系统一样使用 ext4:复制文件、直接创建文件等等。 除了遇到 bug 或执行基准测试以外,您不会觉察到任何差别。

调整 ext4 性能选项

可以使用 tune2fs 程序调优 ext4 文件系统,与调优 ext2 或 ext3 文件系统的方式一样。目前, tune2fs 不提供任何特定于 ext4 的选项,但是可以使用标准的 -O 参数设置 ext4 选项,例如 extent。

当把文件系统挂载为 ext4 时,内核开始使用特定于文件系统的功能,如 extent。这样做的结果是不能再把文件系统挂载为 ext3 文件系统,至少会变得非常困难。

尽管把 ext3 文件系统挂载为 ext4 能够实现特定于 ext4 的功能,挂载本身并不把旧数据结构转换为新的格式。例如,现有文件保持块状方式分配, 而不是使用 extent 进行分配。因此,旧文件没有从新功能获得好处。然而,ext4 的开发人员已经考虑到这种情况并且提供了一种解决办法:可以使用(正处于 试验阶段的)e4defrag 工具(随后将介绍)转换分配方式来利用 extent 功能。另一个新工具(尚不可用)将改变 inode 的大小,使它变为新的格式。

维护 ext4 文件系统

可以使用标准的 e2fsprogs 工具来维护 ext4 文件系统,例如使用 tune2fs 在创建文件系统之后调整选项,使用 fsck.ext4 执行文件系统检查等等。这些程序在 ext4 与 ext3 之间没有很大的差别。但是,如前面提到的一样,ext4 包含一些能够提升 fsck 性能的增强功能。

除了这些工具以外,有一个新工具特别值得注意:e4defrag。该程序能够对已挂载的 ext4 文件系统进行磁盘碎片整理。这能够提高性能,尤其是文件系统空间快要用完的时候。同时,这也有利于将 ext2/3 样式的分配转换为基于 extent 的 ext4 样式的分配,因此能够提高曾经作为 ext3 文件系统的文件系统的性能。不幸的是,e4defrag 还不是标准的 e2fsprogs 包的一部分,因此需要单独下载。

【编辑推荐】

  1. 下一代Linux文件系统前瞻:是BTRFS还是ext4
  2. 当心: Ext4 可能造成数据丢失
  3. 猞猁的选择:升级Ubuntu 9.10选择Ext3还是Ext4
责任编辑:yangsai 来源: IBMDW
相关推荐

2012-05-21 09:48:58

Ext4

2010-12-17 09:37:13

ext4文件系统

2010-12-28 09:51:06

ext4文件系统

2012-05-21 10:42:02

Ext4

2012-07-27 09:44:41

RISC

2012-05-08 10:56:15

Linux

2011-06-27 10:17:15

EXT4 Btrfs

2017-11-23 09:30:01

Linux文件系统sudo命令

2009-11-30 09:46:45

Ubuntu文件系统选择

2018-09-12 15:48:35

ext4Linux文件系统

2010-04-23 18:03:55

Aix 5.1

2018-02-05 09:18:46

主机服务器安全

2009-08-04 08:28:10

2009-10-27 12:47:29

linux Ext3文

2011-01-06 09:57:31

Linux Kerne

2017-07-12 12:29:54

2009-03-25 08:32:33

Windows Ser微软操作系统

2009-03-24 14:29:04

LinuxExt4数据丢失

2012-09-20 09:32:23

Ubuntu 12.1文件系统Ubuntu

2009-08-12 17:42:24

Linux文件系统BTRFSext4
点赞
收藏

51CTO技术栈公众号