(3)Linux性能调优之Linux文件系统

1、前言

前面咱们谈了Linux的进程管理和内存体系:node

(1)Linux性能调优之Linux进程管理缓存

(2)Linux性能调优之Linux内存体系bash

这一节咱们将谈下Linux的文件系统服务器

2、概览

Linux做为开源操做系统,最大的优点是它能够支持各种文件系统。现代的Linux内核可以支持几乎每种文件系统,从基础的FAT到高性能的日志文件系统(JFS)都能能够。数据结构

由于目前Linux的发行版本中,Readhat系(开源版本是Centos)和debian系(你们熟知的Ubuntu)比较流行,因此后面会重点介绍下Readhat系用的xfs文件系统和ext4文件系统。post

3、虚拟文件系统

虚拟文件系统(VFS)是一个处于用户进程和各种文件系统之间的抽象接口层,VFS提供访问文件系统对象的通用对象模型(例如,i-node、文件对象、页缓存、)和方法,它对用户进程隐藏了各类文件系统的差异。正是由于有VFS,因此用户进程不用关心使用的是那种文件系统,也更不须要知道各个文件系统应该使用哪一个系统调用。下图显示了VFS的概况:性能

在开始介绍各个文件系统前,先介绍一个概念:日志ui

在非日志文件系统上,当执行写操做时,内核先修改文件系统的元数据,而后写入实际的用户数据。这个操做可能会丢失数据的完整性。若是在写入文件系统元数据的时候系统忽然崩溃,文件系统的一致性就可能被破坏。fsck会在下次启动时检查全部的元数据,并修复文件系统上的不一致,可是若是卷特别大的时候,这个修复过程就会变得很漫长,只能干等着fsck工做完以后才能使用这系统。spa

日志文件系统解决了这个问题,在写入实际的文件系统以前,他先把要修改的数据写入一个叫作日志区域(journal area)的地方。日志区域能够在文件系统上,也能够不在文件系统上。写入日志区域的数据叫作日志记录(joutnal log)。若是系统支持的话,它内容包括文件系统元数据和真正的文件数据。操作系统

由于在写入真正用户数据以前要写记录日志,和非日志文件系统相比会产生性能开销。维护数据高度一致性所牺牲的性能开销大小,取决于在写入用户数据以前要写入多少信息到磁盘上。

4、常见的文件系统

  • 4.1 Ext2

Ext2是一个简单和快速的文件系统,没有日志功能。下图展现了Ext2的文件系统数据结构:

文件系统由一个引导扇区(boot sector)开始,后面跟着块组(block groups)。整个文件系统被分红许多小块组来得到高性能,由于i-node表和保存用户数据的数据块驻留在较前的磁盘,因此节约寻址时间。一个块组包含以下项目:

+ 超级块(Super block) 磁盘上信息存放在这里,超级块的副本保存在每一个块组的顶部。
+ 块组描述符(Block group descriptor) 块组的信息存在这里
+ 数据块位图(Data block bitmaps) 空闲块管理
+ i-node位图(i-node bitmaps) 空闲i-node管理
+ i-node表(i-node tables) 存放i-node表。每一个文件都有相应的i-node表,存放文件的元数据,譬如文件
模式、uid、gid、atime、ctime、mtime、dtime和数据块的指针。
+ 数据块(Data blocks) 存放真正的用户数据。
复制代码

如何访问数据?

为了找到组成文件的数据块,内核首先搜索文件的i-node。在接到进程打开/var/log/messages 文件的请求时,内核分析文件路径,而后搜索/(根目录)的条目,其中包含了它本身目录下 的文件和目录信息。这时候,内核会找到/var目录的i-node,而后再来看看/var目录,它也有 它本身目录下的文件和目录的信息。内核会一直执行上面的过程,直到找到/var/log/messages文件的i-node。Linux内核使用对象缓存,好比目录条目缓存或者i-node缓存来加速寻找i-node的过程。

一旦内核找到了文件的i-node,而后就试着访问真正的用户数据块。如前面解释的那样,inode有数据块的指针。参照它,内核就能得到数据块了。对于大文件来讲,Ext2提供到数据块的直接/非直接参照。下图展现了它是如何工做的:

  • 4.2 Ext3

Ext3和Ext2的基本结构是类似的,主要区别是Ext3支持日志。Ext3有以下亮点:

1.可用性: Ext3采用一致性的方式把数据写入磁盘,因此,当系统出现意外宕机(断电或者系统崩溃),
服务器再次启动时不用检查数据的一致性。能够把系统恢复时间从几小时缩短到几秒钟!
2.数据完整性: 在mount命令中使用data=journal打开日志记录模式,全部的数据,包括文件和元数据都会记录日志!
3.速度: 经过指定日志模式data=writeback,你能够在你的业务场景下,在速度和完整性之间作权衡。
在有大量同步写的时候,这个效果会十分显著。
4.灵活性: 把现有的Ext2很简单就能升级到Ext3,并且不用从新格式化。经过执行tune2fs命令和修改/etc/fstab文件,
你可以很简单的把Ext2升级到Ext3文件系统!一样,在关掉Ext3日志的状况下,Ext3可以做为Ext2文件系统进行挂载。
复制代码

Ext3支持3种日志模式:

1. 日志(journal) 经过记录文件数据和元数据,这个模式提供了最高的数据一致性。它的
性能消耗也是最大的。
2. 有序(ordered) 该模式下只记录元数据。然而,优先保证写入文件数据!
3. 回写(writeback) 这个日志选项提供最快的数据访问能力,可是牺牲了数据的一致性!
保证数据一致性的元数据也会被记录,可是没有处理肯定的文件数据,在系统崩溃的时
候,这可能致使旧的数据出如今文件中。
复制代码
  • 4.3 Ext4

EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。

目前的不少Linux发现版本用的都是ext4文件系统,关于ext4文件系统的介绍和特性参考百度百科:

Ext4文件系统

  • 4.4 xfS

扩展文件系统(eXtended File System,XFS)是一个高性能日志文件系统,支持超大文件和分区。Redhat已经其开源版本Centos7用的正是xfs文件系统。关于xfs文件系统的介绍和特性参考百度百科:

xfs文件系统

5、如何查看当前分区使用的文件系统?

  1. df -T

  2. parted -l

  1. dumpe2fs:查询Ext 家族superblock 资讯的指令

6、下一节是???

谈完Linux的文件系统,下一节将会谈一下Linux的磁盘I/O子系统

相关文章
相关标签/搜索