linux文件系統详解
什么是文件系统
文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构,即在存储设备(磁盘)上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
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文件系統详解的更多相关文章
- Linux 文件/目录操作详解
目录 Linux 文件/目录操作详解 初识Linux 一.文件/目录显示命令 ls 二.目录创建命令 mkdir 三.目录转移命令 cd 四.当前目录显示命令 pwd 五.文件处理命令 rmdir 六 ...
- Linux文件传输FTP详解
ftp命令用来设置文件系统相关功能.ftp服务器在网上较为常见,Linux ftp命令的功能是用命令的方式来控制在本地机和远程机之间传送文件,这里详细介绍Linux ftp命令的一些经常使用的命令,相 ...
- Linux 文件查找命令详解
find命令 Linux find命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件.并且将 ...
- Linux 文件描述符详解
Overview 了解Linux怎样处理输入和输出是非常重要的.一旦我们了解其原理以后,我们就可以正确熟练地使用脚本把内容输出到正确的位置.同样我们也可以更好地理解输入重定向和输出重定向. Linux ...
- linux 文件记录锁详解
一: linux记录锁更恰当的称呼应该是范围锁,它是对文件某个范围的锁定. 关于记录锁的功能就是fcntl提供的第五个功能,具体使用如下: int fcntl(int fd, int cmd, str ...
- Linux文件系统目录结构详解
在我们初学嵌入式Linux时,首先学习的就是Linux的最小根文件系统:下面我将为初学者们详细的阐述一下Linux的最小根文件系统. 根目录在Linux中即为“/”,要进入根目录,命令“cd /”即 ...
- Linux 文件特殊权限详解[suid/sgid/t]
setuid(suid): 针对命令和二进制程序的,当普通用户执行某个(passwd)命令的时候,可以拥有这个命令对应用户的权限, 即让普通用户可以以root用户的角色执行程序或命令. setgid( ...
- Linux文件夹权限详解
- 第一个字符代表文件(-).目录(d),链接(l) - 其余字符每3个一组(rwx),读(r).写(w).执行(x) - 第一组rwx:文件所有者的权限是读.写和执行 - 第二组rw-:与文件所有者 ...
- Linux 用户和用户组详解
用户分类 超级用户:UID范围 0 root用户:uid=0(root) gid=0(root) groups=0(root) 普通用户:由管理员创建,UID范围(500-65535) --> ...
随机推荐
- Chapter 5 Blood Type——18
"The Red Cross is having a blood drive in Port Angeles next weekend, so I thought you should al ...
- Docker最全教程——从理论到实战(八)
在本系列教程中,笔者希望将必要的知识点围绕理论.流程(工作流程).方法.实践来进行讲解,而不是单纯的为讲解知识点而进行讲解.也就是说,笔者希望能够让大家将理论.知识.思想和指导应用到工作的实际场景和实 ...
- C#组件系列——又一款日志组件:Elmah的学习和分享
前言:好久没动笔了,都有点生疏,12月都要接近尾声,可是这月连一篇的产出都没有,不能坏了“规矩”,今天还是来写一篇.最近个把月确实很忙,不过每天早上还是会抽空来园子里逛逛.一如既往,园子里每年这个时候 ...
- python3中time模块与datetime模块的简单用法
__author__ = "JentZhang" import time # Timestamp 时间戳 print("Timestamp 时间戳:") pri ...
- Phpstudy升级到Mysql8
之前一直用的mysql5.5,最近发现Mysql8更新了很多新特性以及查询效率的提升,觉得很有必要更新下开发版本,好,废话不多说: 1.下载安装包,下载地址:mysql8.0 .如果你想要下载其它版 ...
- nginx系列4:日志管理
日志切割 如果使用默认日志配置,经过一段时间运行后,access.log和error.log文件会变得非常大,使维护和排查问题变得不便,所以非常有必要做日志切割. 通常的思路是:使用nginx的-s ...
- Linux基础学习(全)
使用的Linux发行版本为Redhat 1.Linux(RedHat)基础学习-命令行使用入门 2.Linux(RedHat)基础学习-文件寻址与管理 3.Linux(RadHat)基础学习-vim编 ...
- java-HashMap默认机制
HashMap:键值对(key-value): 通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value. 默认是1:1关系: 存在则覆盖,当key已经存在,则利用新的value ...
- JavaScript类型化数组(二进制数组)
0.前言 对于前端程序员来说,平时很少和二进制数据打交道,所以基本上用不到ArrayBuffer,大家对它很陌生,但是在使用WebGL的时候,ArrayBuffer无处不在.浏览器通过WebGL和显卡 ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...