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) --> ...
随机推荐
- 你以为的MongoDB副本集的高可用是真的高可用了吗?
很久没来更新博客,自感是一个只会搬砖的劳工,总搞些MySQL相关的数据库实在无聊,且时不时遇到些不讲道理的Dev吧,真的是心累至极,有种想回头我也去干开发的冲动,当个需求者有话语权要风得风,要雨得雨多 ...
- windows下安装bpython方法 (新)
刚开始学习python的时候使用的ipython解释器,挺好用的,后来发现bpython功能更强大,linux系统中安装基本没啥问题,不过在windows下安装倒是不容易啊.使用google搜了一下, ...
- RESTful杂记
在网上找了许久的关于REST的资料,发现网上大部分都是说的比较片面,虽然有部分说出了本质,但也没有详细提出,所以在这里记录一下. RESTful是什么 首先,维基百科是这样说的: 表现层状态转换(RE ...
- Asp.Net路由重写为用户名或者ID
有一个需求如下:指定某个Area的路由(Area:Wx)在其后面添加用户名或者ID作为URL参数,即像下面的样子: /Wx/xiaoming/ /Wx/xiaoming/photo /Wx/xiaom ...
- 消息队列_MSMQ(1)简单了解
MSMQ (微软消息队列) MSMQ 百度百科 MicroSoft Message Queuing(微软消息队列)是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一 ...
- HTTP协议的六种请求方法
抛砖引玉,聊下概念性的东西先: HTTP协议 (Hyper Text Transfer Protocol) HTTP是一个基于TCP/IP通信协议来传递数据,包括html文件.图像.结果等,即是一个客 ...
- python学习笔记(十 三)、网络编程
最近心情有点儿浮躁,难以静下心来 Python提供了强大的网络编程支持,很多库实现了常见的网络协议以及基于这些协议的抽象层,让你能够专注于程序的逻辑,而无需关心通过线路来传输比特的问题. 1 几个网络 ...
- Adaptive Placeholders
https://wisdmlabs.com/blog/create-adaptive-placeholders-using-css/ https://circleci.com/blog/adaptiv ...
- 万能pb_ds头文件—bits/extc++.h
c++中自带了一些非常强大却鲜为人知的功能库—pd_ds库 里面含有红黑树(rb_tree),哈希表(gp_hash_table),可持久化平衡树(rope)等超强数据结构 但是有一件非常令人头痛的事 ...
- CPP笔记_函数返回局部变量
本篇笔记记录的是关于返回函数中的局部值. 我们知道,在函数中创建的局部变量会随着函数的调用过程的结束,也即其对应函数栈帧的清除,而结束其生命周期.那么,如果我们把这个局部变量返回,就有可能存在该变量对 ...