什么是文件系统

文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在存储设备(磁盘)上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。

从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。

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系列更快。

https://blog.whsir.com/post-3209.html

linux文件系統详解的更多相关文章

  1. Linux 文件/目录操作详解

    目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...

  2. Linux文件传输FTP详解

    ftp命令用来设置文件系统相关功能.ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相 ...

  3. Linux 文件查找命令详解

    find命令 Linux find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将 ...

  4. Linux 文件描述符详解

    Overview 了解Linux怎样处理输入和输出是非常重要的.一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置.同样我们也可以更好地理解输入重定向和输出重定向. Linux ...

  5. linux 文件记录锁详解

    一: linux记录锁更恰当的称呼应该是范围锁,它是对文件某个范围的锁定. 关于记录锁的功能就是fcntl提供的第五个功能,具体使用如下: int fcntl(int fd, int cmd, str ...

  6. Linux文件系统目录结构详解

    在我们初学嵌入式Linux时,首先学习的就是Linux的最小根文件系统:下面我将为初学者们详细的阐述一下Linux的最小根文件系统. 根目录在Linux中即为“/”,要进入根目录,命令“cd  /”即 ...

  7. Linux 文件特殊权限详解[suid/sgid/t]

    setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...

  8. Linux文件夹权限详解

    - 第一个字符代表文件(-).目录(d),链接(l) - 其余字符每3个一组(rwx),读(r).写(w).执行(x) - 第一组rwx:文件所有者的权限是读.写和执行 - 第二组rw-:与文件所有者 ...

  9. Linux 用户和用户组详解

    用户分类 超级用户:UID范围 0 root用户:uid=0(root) gid=0(root) groups=0(root) 普通用户:由管理员创建,UID范围(500-65535) --> ...

随机推荐

  1. leetcode — binary-tree-inorder-traversal

    import java.util.Arrays; import java.util.Stack; import java.util.TreeMap; /** * * Source : https:// ...

  2. leetcode — remove-duplicates-from-sorted-list-ii

    /** * Source : https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/ * * * Given a ...

  3. consistent hash(一致性哈希算法)

    一.产生背景 今天咱不去长篇大论特别详细地讲解consistent hash,我争取用最轻松的方式告诉你consistent hash算法是什么,如果需要深入,Google一下~. 举个栗子吧: 比如 ...

  4. 痞子衡嵌入式:语音处理工具Jays-PySPEECH诞生记(1)- 环境搭建(Python2.7.14 + PyAudio0.2.11 + Matplotlib2.2.3 + SpeechRecognition3.8.1 + pyttsx3 2.7)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是语音处理工具Jays-PySPEECH诞生之环境搭建. 在写Jays-PySPEECH时需要先搭好开发环境,下表列出了开发过程中会用到的 ...

  5. .Net语言 APP开发平台——Smobiler学习日志:在手机应用开发中如何快速调用电话拨打功能

    样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Smobiler Components”拖动一个PhoneButton控件到窗体界面上 2.修改PhoneButton ...

  6. GITHup的使用

    一个源码管理工具,由于不擅长敲GIt命令,还不太喜欢用英文版本的软件,所以想办法用中文版的图形工具步骤如下: 下载了GIT64位,安装,下载了TortoiseGit和TortoiseGit中文语言包, ...

  7. 【EF】CodeFirst Fluent API使用记录

    我们在使用EF CodeFirst 模式生成数据库的时候进行表的代码映射关系可以采用注解模式和Fluent API模式.这里就是记录一下使用Fluent API进行表关系映射的方法. 注解模式: 回顾 ...

  8. mysql服务器主从数据库同步配置

    首先需要在同一个局域网内的两台机器(当然也可以用一台机器虚拟两台机器出来),都安装上mysql服务. 主机A: 192.168.1.100 从机B: 192.168.1.101 可以有多台从机. 1. ...

  9. SpringMVC进行文件上传

    进行文件上传前需要添加相应的依赖 在xml文件中进行相应的文件上传解析器的配置 注意:这里有个坑,因为没注意,再排查错误的时候花了一点时间.就是给bean的id一定要是. 否者就会报如下的错误:

  10. Android为TV端助力 完全解析模拟遥控器按键

    public class VirturlKeyPadCtr { private static Instrumentation mInstrumentation; public static void ...