什么是文件系统
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在存储设备(磁盘)上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
linux常见的文件系统
linux操作系统有很多不同的文件系统选择,常见的包括ext3、ext4、btrfs、xfs等等,当然还可以通过加载模块的方式来支持更多的文件系统。虽然说文件系统的种类很多,但大部分linux下文件系统都有着类似的结构,包括超级块、inode、数据块、目录块等。
超级块包括了文件系统的总体信息,是文件系统的核心,所以磁盘中会有多个超级块,即使某一些超级块坏了,文件系统依然可用。
inode存储着所有与文件有关的数据,比如文件的权限等,并不包括文件内容和文件名。
数据块是真实存储数据的,一个数据块默认的大小为4KB。
目录块包括文件内容和文件名,以及inode的信息。
1、ext2文件系统
第二代扩展文件系统(second extended filesystem),用于替代ext,在1993年1月的时候加入到linux内核中,是linux上的第一个商业级文件系统。ext2文件系统也是采取将文件数据存放到数据块中的方式来存储数据的,这些数据块的大小可以在创建文件系统时指定,对于存放的每个文件和目录都会有一个inode指定,文件系统中所有的inode都是通过inode表来进行记录的,一定数据量的块就会成为一个块组。在ext2文件系统中,整个分区的文件系统信息都被存放在超级块中,并在每个块组的开头都会有相同的备份。
在ext2文件系统中最大的缺点就是无日志功能,它不支持日志记录,这样很容易在一些场景下造成数据丢失,这个重大的缺点导致ext2无法在关键应用中使用。
2、ext3文件系统
第三代扩展文件系统(Third extended filesystem),在Centos5下默认的文件系统就是ext3,为了拟补ext2没有日志记录的缺陷,于是有日志记录的ext3文件系统诞生了,ext3文件系统是由ext2文件系统发展而来,所以ext3文件系统完全兼容ext2文件系统,并且支持从ext2直接转换为ext3,由于这种特性,所以当时很多老用户都升级使用了ext3文件系统。
ext3文件系统写入数据时,会先在日志中写入,然后在开始真实的写入,写入数据完成后会将之前写入日志的内容删除,这样如果遇到问题需要修复时,只需要检查日志即可。
当时在设计ext3的时候就是对ext2的高度兼容,很多磁盘上的结构都和ext2相似,这样ext3缺乏了很多最新设计的功能,比如动态分配inode和可变块大小,ext3在被挂载写入的时候是不能进行fsck的。
3、ext4文件系统
第四代扩展文件系统(Fourth extended filesystem),是ext3的增强版,在Centos6系统中默认的文件系统系统就是ext4,和ext2到ext3一样,ext3到ext4也可以在线迁移的。
ext3文件系统下,一个目录下最多只能用32000个子目录,ext4子目录可达到64000(甚至可以更多)。
ext4文件系统下,最大单个文件大小可以达到16TB,最大文件系统大小为1EB。
ext4使用校验和特性来提高文件系统的可靠性,这个特性的好处就是可以安全地避免日志处理时磁盘I/O等待,稍微提高一些性能。
ext4将未使用的区块标记在inode中,这样可以在磁盘检查时将这些区块跳过,从而节约大量的文件系统检查时间。
ext系列的文件系统都不支持inode动态分配。
4、xfs文件系统
xfs高性能64位日志文件系统,在Centos7系统中默认的文件系统就是xfs,最大文件系统大小8EB,xfs对文件系统元数据提供了日志支持,当文件系统更新时,元数据会在实际的磁盘块被更新之前顺序写入日志,xfs的日志被保存在磁盘块的循环缓冲区上,不会被正常的文件系统操作影响。
xfs日志所保存的是“逻辑”条目,以更加容易理解的方式来描述当前正在进行的操作,如果发生系统崩溃宕机,可以根据日志中的记录来重做并完成崩溃前一时刻发生的系统操作,可以快速的恢复可能被破坏的文件,恢复的速度不受文件系统大小的影响,取决于需要重做的操作系统数量。
xfs文件系统支持动态分配inode,所以不存在inode不够的情况,xfs文件系统的创建速度、恢复速度比ext系列更快。