你的位置:首页 > 操作系统

[操作系统]linux下文件系统类型的学习


1、 以超级用户权限登陆Linux,进入  /lib/modules/2.6.32--504.el6.x86_64/kernel/fs目录执行 ls 命令(不同Linux发行版本的Fs目录有些不同你可以用查找FS文件夹的方法找到它)。如下图所示:

这里我们对最常用的几个文件系统的发展情况和优缺点作详细介绍:ext、ext2、ext3、jsf、 、xfs、ReiserFS

2、ext是第一个专门为Linux的文件系统类型,叫做扩展文件系统。它在1992年4月完成的。它为Linux的发展取得了重要作用。但是在性能和兼容性上存在许多缺陷。现在已经很少使用了。

3、ext2
    ext2是为解决ext文件系统的缺陷而设计的可扩展的高性能的文件系统。又被称为二级扩展文件系统。它是在1993年发布的,设计者是Rey Card。ext2是Linux文件系统类型中使用最多的格式。并且在速度和CPU利用率上较突出,是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良设计。Ext2 可以支持256字节的长文件名,其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的Intel x86兼容处理器的系统中,簇最大为 4KB, 则单一文件大小上限为 2048GB, 而文件系统的容量上限为 6384GB。尽管Linux可以支持种类繁多的文件系统,但是2000年以前几乎所有的Linux发行版都用ext2作为默认的文件系统。

  ext2的缺点:ext2的设计者主要考虑的是文件系统性能方面的问题。ext2在写入文件内容的同时并没有同时写入文件的meta-data (和文件有关的信息,例如:权限、所有者以及创建和访问时间)。换句话说,Linux先写入文件的内容,然后等到有空的时候才写入文件的meta- data。这样若出现写入文件内容之后但在写入文件的meta-data之前系统突然断电,就可能造成在文件系统就会处于不一致的状态。在一个有大量文件 操作的系统中出现这种情况会导致很严重的后果。另外但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,尽管文件系统的容量上限为 6384G但是实际上能使用的文件系统容量最多也只有 2048GB。
4、 ext3
  ext3是由开放资源社区开发的日志文件系统,主要开发人员是Stephen tweedie。ext3被设计成是ext2的升级版本,尽可能地方便用户从ext2fs向ext3fs迁移。ext3在ext2的基础上加入了记录元数 据的日志功能,努力保持向前和向后的兼容性。这个文件系统被称为ext2的下一个版本。也就是在保有目前 ext2 的格式之下再加上日志功能。ext3是一种日志式文件系统。日志式文件系统的优越性在于:由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸 下,以便将快取层的资料写回磁盘中。因此每当系统要关机时,必须将其所有的文件系统全部卸下后才能进行关机。如果在文件系统尚未卸下前就关机 (如停电) 时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。然而,此一重整的工作是相当耗时的,特别是容 量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。故这在大型的伺服器上可能会造成问题。

ext3的缺点:其最大的缺点是没有现代文件系统所具有的能提高文件数据处理速度和解压的高性能,另外使用ext3文件系统时要注意硬盘限额问题,在这个问题解决之前,不推荐在重要的企业应用上采用ext3+disk quota(磁盘配额)。

5、etx4

  Ext4是Ext3的进化版本,而后者是Linux操作系统最常用的文件系统。Ext4在很多方面对Ext3做了改善,这种改变要远多于Ext3对 Ext2做的改变。Ext3和Ext2的差别进局限于日志系统,但是Ext4修改了文件系统的大部分重要数据结构,比如文件数据的存储方式。因此改变了设 计,增强了性能,稳定性和features。

ext2/ext3与ext4进行比较:

5.1 大文件系统,大文件尺寸

Ext2/Ext3:

文件系统尺寸计算方法 2^32 * block_size, 如果block_size是4096的话,那么文件系统尺寸上限是16TB;

最大文件尺寸受到三个限制:

1.ext2_inode中的i_size:

乍一看i_size只有32bits,所以最大文件尺寸不能超过2^32,实际不然,Ext2/Ext3使用了一种脏方法,借用了和i_size相邻的i_dir_acl,所以可以扩展到用64bits来表示文件大小,因此这不可能成为限制。

2. 是三级间接块的寻址空间:

假定块尺寸是4096,那么三级间接块可表示1024*1024*1024*4096 = 4T

3. 最大文件尺寸不能超过(2^32 -1)*512 = 2T,也就是能文件尺寸不能超过32bits能表示的sectors数目。

因此Ext2/Ext3文件系统,最大文件限制是2TB。如下表所示:

 Ext2/Ext3Ext4
文件系统尺寸16TB1EB
最大文件尺寸2TB16TB

5.2 文件最大子目录数(如下表所示)

Ext2/Ext3Ext4
最大子目录数目3200065000

5.3Extents

  Ext2/Ext3文件系统使用间接映射来管理文件数据逻辑地址到物理块的映射关系,间接映射分为一级间接,二级间接和三级间接,文件数据前面一小 部分则使用直接映射。因此对于小文件来说,这种管理方式很简洁高效。但是对于大文件,特别是大文件的删除和truncate操作,因为要为每一个被删除块 处理映射关系,所以对于很大的文件来说,需要花费很长的时间。此外大文件需要三阶映射,也就是说访文件的逻辑块,需要查找访问四个物理块。

  现代文件系统引入了”extents“的概念,这个概念完全是为管理大文件数据引入的,一个extent包含一组连续的物理块。仅仅使用一个 extent管理一组逻辑地址块到物理块的映射,而无需为每一对建立映射。考虑一个100MB的文件,理想情况下,我们只需要一个extent来记录映射 关系,但是如果使用Ext2/Ext3的间接映射,则需要为25000个blocks建立映射关系。

由于extents有利于连续磁盘分配,因此extents会减少碎片,并改善文件系统性能。

5.4 多块分配

当Ext3需要写文件数据到磁盘上,块分配器决定使用哪一个空闲块来写数据。但是Ext3块分配器每次只能分配一个块 4KB。这就意味着对于100MB大小的文件,需要调用25000次块分配器。低效不仅是因为调用了25000次块分配器,而且也使得块分配器无法优化分 配策略,因为块分配器无法把这25000次分配关联起来。

Ext4使用一个multiblock allocator(mballoc),使得一次分配很多块成为可能。避免了多次分配,优化了分配策略,提高了性能,多块分配器对delayed 分配和extents特别有用。这个feature不会影响到磁盘layout。

此外,Ext4 block/inode分配器还有其他的改善,详情参见http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf


5.5 延迟分配

延迟分配是一个性能优化技术,好几个文件系统中都使用延迟分配技术,比如XFS,ZFS,btrfs和Resier 4。和传统文件系统Ext2/Ext3块分配相比,延迟分配尽可能的延缓块的分配。

传统的立即分配方法缺点:举例来说,对于一个写调用,文件系统代码立刻分配数据块的存放位置,甚至是数据还会在cache中存放一段时间才写回磁盘的情况。当一个进程持续的向文件内写数据,那么接下来的每次写操作都会为数据分配物理块,而不知道文件正在持续的增长。

而延迟分配,在调用写操作时,如果数据仅仅写到cache中,并不会立即分配块,而是等到真正向磁盘写入的时候才进行分配。这就使得块分配器有机会优化,组合这些分配的块。延迟分配需要同extents和多块分配配合。因为在一些工作场景下,文件写入磁盘时是按照extents进行分配的,而此时调用的分配器也是mballoc分配器。


5.6 快速fsck

fsck操作非常耗时,特别是fsck的第一步:检查文件系统中的所有inode。Ext4中,在每一组的inode表中存放着一个未用的inode链表,所以fsck不需要检查这些未用的inodes。因此整个的fsck时间可以改善2到20倍(依赖于未用inode的数目)。必须要注意,是fsck创建的未用inode链表,而不是Ext4创建的。必须首先运行fsck来创建unused indes链表,下一次的fsck才会便快。


5.7 日志checksumming

日志是磁盘中最常用的部分,因此使得这部分的块更容易发生硬件错误。从出错的日志恢复系统可能会导致更大的错误。Ext4使用check summing来确保journal数据是否有效。此外日志checksumming还有附加的效果:它允许把ext3文件系统的两阶段提交变为一阶段提交,在某些情况下,可以得到20%的速度增加,因此可靠性和速度同时得到了改善。


5.8 非日志模式

日志确保文件系统的一致性,然而也增加了系统负载。在某些特殊场合下,数据完整性不重要时,可以运行无日志的Ext4。Ext4日志功能可以被disable掉,这样可以稍微改善性能


5.9 在线碎片整理

6、 jsf
    jsf提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。jsf(Journaled File System Technology for Linux)的开发者包括AIX(IBM的Unix)的jsf的主要开发者。在AIX上,jfs已经经受住了考验。它是可靠、快速和容易使用的。2000 年2月,ibm宣布在一个开放资源许可证下,移植linux版的JSF文件系统。JSFs也是一个有大量用户安装使用的企业级文件系统。它具有可伸缩性和 健壮性,与非日志文件系统相比,它的优点是其快速重启能力:Jfs 能够在几秒或几分钟内就把文件系统恢复到一致状态。虽然 jsf 主要是为满足服务器(从单处理器系统到高级多处理器和群集系统)的高吞吐量和可靠性需求而设计的,jsf 还可用于想得到高性能和可靠性的客户机配置因为在系统崩溃时,jsf 能提供快速文件系统重启时间,所以它是因特网文件服务器的关键技术。使用数据库日志处理技术,jsf 能在几秒或几分钟之内把文件系统恢复到一致状态。而在非日志文件系统中,文件恢复可能花费几小时或几天。
    jsf的缺点:使用jsf日志文件系统,性能上会有一定损失,系统资源占用的比率也偏高。是因为当它保持一个日志时,系统需要写许多数据。
7、ReiserFS
    ReiserFS的第一次公开亮相是在1997年7月23日,Hans Reiser把他的基于平衡树结构的ReiserFS文件系统在网上公布。ReiserFS 3.6.x(作为 Linux 2.4 一部分的版本)是由 Hans Reiser 和他的在Namesys 的开发组共同开发设计的。Hans 和他的组员们相信最好的文件系统是那些能够有助于创建独立的共享环境或者命名空间的文件系统,应用程序可以在其中更直接、有效和有力地相互作用。为了实现 这一目标,文件系统就应该满足其使用者对性能和功能方面的需要。那样,使用者就能够继续直接地使用文件系统,而不必建造运行在文件系统之上(如数据库之 类)的特殊目的层。ReiserFS 使用了特殊的优化 b* 平衡树(每个文件系统一个)来组织所有的文件系统数据。这为其自身提供了非常不错的性能改进,也能够减轻文件系统设计上的人为约束。例如,现在一个目录下 可以容纳 ext00,000 个子目录。另一个使用 b* 树的好处就是 ReiserFS 能够像大多其它的下一代文件系统一样,根据需要动态地分配索引节,而不必在文件系统创建时建立固定的索引节。这有助于文件系统更灵活地适应其面临的各种存 储需要,同时提供附加的空间有效率。
  Reiserfs被看作是一个更加激进和现代的文件系统。传统的UNIX文件系统是按盘块来进行空间分配的,对于目录和文件等的查找使用了简单的线性查 找。这些设计在当时是合适的,但随着磁盘容量的增大和应用需求的增加,传统文件系统在存储效率,速度和功能上已显落后。在reiserfs的下一版 reiser4中还提供了对事务的支持。在[url]http://www.namesys.com/v4/v4.html[/url] 中有reiser4的介绍和一个简单的reiser4的性能测试。
    ReiserFS的缺点:ReiserFS一个最受人批评的缺点是每升级一个版本,都将要将磁盘重新格式化一次。你可以在[url]http://www.namesys.com/[/url] 网站了解关于 ReiserFS 的更多信息。
8、Xfs
    xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术。它是一个全64位,快速、稳固的日 志文件系统,多年用于SGI的IRIX操作系统。sgi决定支持Linux社区,将关键的基本架构技术授权于Linux。它以开放资源形式发布了他们自己 拥有的xfs的源代码,并开始进行移植。此工作进展得很快,目前已进入beta版阶段。作为一个64位文件系统,xfs可以支持超大数量的文件(9g× 1gb,甚至更大的18g×1gb),可在大型 2d 和 3d 数据方面提供显着的性能。xfs有能力预测其它文件系统薄弱环节,同时xfs提供了在不妨碍性能的情况下增强可靠性和快速的事故恢复。SGI的xfs可为 linux和开放资源社区带来的新特性有:可升级性:xfs被设计成可升级,以面对大多数的存储容量和i/o存储需求,可处理大型文件和包含巨大数量文件 的大型目录,满足二十一世纪快速增长的磁盘需求。xfs有能力动态地为文件分配索引空间,使系统形成高效支持大数量文件的能力。在它的支持下,用户可使用 1exabyte (1g×1gb) 大的文件,远远大于现在最大的文件系统。优秀的i/o 性能:典型的现代服务器使用大型的条带式磁盘阵列,以提供达数gb/秒的总带宽。xfs可以很好地满足I/O请求的大小和并发I/O请求的数量。 xfs 可作为root文件系统,并被lilo支持.在NFS服务器上使用也没问题.支持软件磁盘阵列(RAID)和虚拟集群(LVM)。SGI最新发布xfs为 1.0.1版.(在:[url]http://http://oss.sgi.com/projects/xfs/[/url] 可以下载它)。
    xfs的缺点:由于xfs比较复杂,实施起来有一些难度,所以目前xfs主要应用于Linux企业应用的高端。
9、其他文件系统简介:
  Minix:Llnux支持的第一个文件系统,对用户有很多限制而且性能低下。有些没有时间标记,其文件名最长l 4个字符。minix 文件系统最大的缺点是最大只能使用64M 的硬盘分区,所以在目前已经没有人使用它了。
  Xia:Minix文件系统修正后的版本。在一定程度上解决了文件名和文件系统大小的局限。但没有新的特色,目前很少有人使用。
  Msdos:msdos 是在Dos、Windows和某些OS/2 操作系统上使用的一种文件系统,其名称采用“8+3”的形式,即8个字符的文件名加上3个字符的扩展名。
umsdos:   Linux下的扩展msdos文件系统驱动,支持长文件名、所有者、允许权限、连接和设备文件。允许一个普通的msdo s文件系统用于Linux,而且无须为它建立单独的分区。
  iso9660:   标准CDROM文件系统,通用的Rock Ridge增强系统,允许长文件名。
  Vfat:vfat是Windows9x 和 Windows NT/2000下使用的一种Dos文件系统,其在 Dos 文件系统的基础上增加了对长文件名的支持。
  Nfs:   Sun公司推出的网络文件系统,允许多台计算机之间共享同一文件系统,易于从所有这些计算机上存取文件。
  Hpfs: High Performance File System(HPFS) 高性能文件系统(HPFS) HPFS是Microsoft的LAN Manager中的文件系统,同时也是IBM的LAN Server和OS/2的文件系统。HPFS能访问较大的硬盘驱动器,提供更多的组织特性并改善了文件系统的安全特性。
  Smb:smb是一种支持 Windows for workgroups、Windows NT 和Lan Manager的基于SMB协议的网络操作系统。
  Sysv: sysv文件系统实际上是System V/Coherent 在Linux平台上的文件系统。
  Ncpfs:ncpfs是一种Novell NetWare 使用的NCP协议的网络操作系统。
  Proc:proc是Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据结构的界面。
  NTFS:微软Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。