关于XFS文件系统
关于XFS文件系统,参考:
XFS实现原理详解:https://blog.csdn.net/scaleqiao/article/details/52098546
XFS文件系统概述:https://www.cnblogs.com/eflypro/p/14075070.html
linux文件系统底层原理:https://my.oschina.net/u/4399347/blog/4329033
一、linux系统文件系统类型
1、ext家族
entos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3
ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本
ext4的文件系统容量达到1EB,而文件容量则达到16TB,这是一个非常大的数字了。对一般的台式机和服务器而言,这可能并不重要,但对于大型磁盘阵列的用户而言,这就非常重要了。
ext3目前只支持32000个子目录,而ext4取消了这一限制,理论上支持无限数量的子目录
2、为什么伴随linux那么久的ext家族凉了呢?xfs文件系统!!
xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术
xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB
xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs,另外xfs经过很多年发展,各种锁的细化做的也比较好
二、简介Linux的ext系列文件系统
1、Linux的ext系列文件系统的构成
superblock:记录文件系统的整体信息,包括:inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的 block 号码;
block:实际记录文件的内容,若文件太大时,会占用多个 block 。
2、元信息,inode和block、superblock概述

文件数据包括元信息与实际数据
文件存储在硬盘上,硬盘最小存储单元是“扇区”,每个扇区存储512字节
元信息
元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等,比如文件的创建者,文件的创建日期,文件的大小等
block(块)
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)
连续的八个扇区组成一个block,“块”的大小,最长见的是4KB
是文件存取的最小单位
inode(索引节点)
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者,文件的创建日期,文件的大小等
这种存储文件元信息的区域就叫做inode,中文译名为(索引节点),也叫i节点
一个文件必须占用一个inode,但至少占用一个block
super block
负责掌控全局,记录着此文件系统的整体信息,,包括inode和block总量,使用剩余量,以及文件系统的格式。
| 存储内容 | 存储位置 |
|---|---|
| 元信息 | inode |
| 数据 | block |
(1)inode包含文件的元信息
inode简介
要理解inode,就先要理解文件的存储方式。我们都知道,文件是存储在硬盘上的。硬盘的最小单位是扇区,每个扇区的大小为512字节。
如果系统在读取硬盘数据的时候按扇区一个一个来读取,那效率就太低了,而是一次连续性读取多个扇区,所以设计者又将多个扇区整合成一个块(block),所以,块就是文件存取的最小单位。一个块的大小为4k。
我们现在已经有了块的概念,文件数据就是存放在块中。但光有数据还是不行啊?为了方便管理文件,我们还需要文件的元信息,比如文件的属性,创建时间,权限,所占的块大小,数量等等。这些信息就是inode信息。所以硬盘在分区的时候会分为两个区域,一个区域存放数据,一个区域存放inode信息。
每一个文件都有一个对应的inode
inode包含很多的文件元信息,但不包括文件名
文件的字节数
文件拥有者的UserID
文件的GroupID
文件的读,写,执行权限
文件的时间戳
使用stat命令即可查看某个文件的inode信息
指针:就是记录数据在哪个块上
[root@localhost ~]# touch 333.txt
[root@localhost ~]# stat 333.txt
文件:"333.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:802h/2050d Inode:50331717 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2019-11-16 21:25:30.259045437 +0800
最近更改:2019-11-16 21:25:30.259045437 +0800
最近改动:2019-11-16 21:25:30.259045437 +0800
创建时间:-
(2)inode的号码
用户通过文件名打开文件时,系统内部的过程
1.系统找到这个文件名对应的inode号码
2.通过inode号码,获取inode信息
3.根据inode信息,找到文件数据所在的block,读出数据
inode号码指向block存储路径
查看inode号码的方法
ls -i命令,查看文件名对应的inode号码
[root@localhost ~]# ls -i
50331717 333.txt 18560747 公共 1790202 图片 50331758 音乐
50331714 anaconda-ks.cfg 1790201 模板 34291860 文档 34291859 桌面
50331724 initial-setup-ks.cfg 18560748 视频 50331757 下载
[root@localhost ~]# ls -i 333.txt
50331717 333.txt
查看文件系统的inode数量信息(总数,已用,可用)
[root@localhost opt]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda2 10485760 117069 10368691 2% /
devtmpfs 229705 372 229333 1% /dev
tmpfs 233378 1 233377 1% /dev/shm
tmpfs 233378 543 232835 1% /run
tmpfs 233378 16 233362 1% /sys/fs/cgroup
/dev/sda5 5241856 141 5241715 1% /home
/dev/sda1 3145728 328 3145400 1% /boot
tmpfs 233378 16 233362 1% /run/user/0
4、文件的不一致性
我理解的不一致性就是:
当你想存储一个文件的时候,首先要通过查看superblock表看看有没有位置可以存,如果有的话就直接根据iinode位图和block位图进行写入,那么正常情况下,写完以后,superblock表会自动将此次存储的记录更新在自己的表象中。这是一个正常的情况下,
那么非正常情况呢,也就是产生不一致性的情况
当文件已经通过inode位图和superblock位图进行写入完成后,此时是不是需要更新一下自己的superblock表,在你存数据的过程中,或者说已经存完而又没有更新superblock表,此时停电了(当然只是举个例子),那么怎么办,superblock上没有这个文件的表象,而文件已经写入进去了,那么这个过程就叫文件的不一致性。
三、查看与删除文件的过程
1、查看文件

表面上,打开文件是通过文件名,实际上要执行下面几个步骤:
1、查找superblock图,看看所查文件的inode号是否存在,如果有的话,将根据inode位图进行查找
2、查找文件的inode编号
3、根据inode编号,找到inode信息
4、根据inode信息找到文件对于所在的block,进行数据的读写。
2、删除文件

这里要强调的是,我们日常中删除文件是将inode号删除了,下一次访问的时候就无法找到对应的block,也就无法打开文件了
文件并没有真正的删除,只有覆盖才有可能真正的删除(即新建的文件恰好使用该块存储数据即把原来的数据覆盖了)
待续...
赠人玫瑰
手留余香
我们曾如此渴望命运的波澜,到最后才发现:人生最曼妙的风景,竟是内心的淡定与从容……我们曾如此期盼外界的认可,到最后才知道:世界是自己的,与他人毫无关系!-杨绛先生
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【关注我】。

浙公网安备 33010602011771号