跳到主要内容

25、Linux 教程:文件系统特点与XFS文件系统

文件系统特点与XFS文件系统

支持的文件系统与VFS

通过查看下列目录可以知道linux支持的文件系统:

ls-l /lib/modules/$(uname -r)/kernel/fs

查看系统目前已加载到内存中支持的文件系统:

cat /proc/filesystems,这个命令有时在分区结束后信息并不更新,此时应该重启或执行partprobe命令,它可以更新核心的分区表信息。

整个linux的系统都是通过一个名为Virtual Filesystem Switch的功能去读取文件系统的,对于不同的文件系统,使用者无需指定读取方式,而VFS会自动做好读取的准备。

日志式文件系统

如果在写入文件系统时突然发生断电的情况,那么可能就会出现实际数据与中介数据不一致的情况。在早期的Ext2中,系统会在重新启动时根据文件系统的状态决定是否强制检查数据一致性,这种一致性的检查依赖一个叫e2fsck的程序,这个检查非常耗时。

日志式文件系统Journaling filesystem就可以轻松解决这个问题,它在文件系统中规划处一个区块,专门记录各类修改步骤,也就是日志记录区块,每次要修改数据时先在这个位置写入修改步骤,然后写入完成后又在该区块写入数据更新完成的日志,这样当数据发生问题时,就可以通过检查日志记录区块来修复。

在ext4系统中,执行dumpe2fs可以看到一个叫Journal inode的信息,这个区块就是日志记录区块。

异步处理asynchronously

所有的文件都需要加载进内存才能处理,当系统加载到一个文件到内存后,如果该文件没有被改动过,就称内存中的文件数据为clean的,如果内存中的文件数据被改动了,就称其为dirty的,此时修改过的文件数据可能还没有写入磁盘,系统会不定时的将脏数据写入磁盘,或者也可以手动执行sync命令强迫写入。

sync命令:数据同步写入磁盘

这个命令会把尚未写入磁盘的内存全部同步到磁盘,所以在重启和关机前执行该命令特别重要(目前的关机和重启已经自动执行该指令了,但是不正常关机就不会顺利执行该命令,可能会造成多余的磁盘检验,更严重可能导致文件系统的损毁。),root用户执行该命令会同步所有数据,普通用户使用只会同步自己的数据。

XFS文件系统简介

CentOS7开始,预设的文件系统就由原本的EXT4变成XFS文件系统了,这主要是因为EXT文件系统家族对于文件格式化处理的方法,是采用预先规划出所有的inode/block/metadata,然后未来系统可以直接取用,这种方法在磁盘容量不大的时候还可以,但随着磁盘容量到达TB级,格式化将耗费大量时间,而XFS文件系统更适合高容量磁盘。

XFS是一个日志式文件系统,在资料的分布上主要分为三个部分:资料区(data section)、文件系统活动登录区(log section)和实时运作区(realtime section)

通过xfs_info 挂载点可以查看xfs文件系统的情况。

资料区(data section)

这部分包括inode/data block/super block等数据,和EXT家族高度一致,和EXT的block group类似,也是分为多个储存区群组(allocation groups)来分别放置文件系统的数据。且inode和block都是系统用到的时候动态分配的,所以格式化的速度很快。

XFS的block和inode有更多不同的容量可以设定,block容量可以设置为512bytes-64K,但是由于linux页面文件pagesize的原因,最高只能设置为4K,而inode可以设置256bytes-2M,一般256bytes就足够使用。

文件系统活动登录区(log section)

这个区域的作用类似日志区,该区块数据的读写是非常频繁的,xfs可以设置外部的磁盘作为日志区,如果将SSD磁盘作为日志区,那么记录的速度就会很快。

实时运作区(realtime section)

当有文件要建立时,xfs会在这个区块里找到一个或数个extent区块,将文件放在该区块内,等待存储分配完毕后,再写入inode和block中。这个extent区块的大小在格式化时就得指定,一般不会修改。