深入了解linux文件系统底层原理

一、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

三、查看与删除文件的过程

1、查看文件

在这里插入图片描述
表面上,打开文件是通过文件名,实际上要执行下面三个步骤:
1、查找文件的inode编号
2、根据inode编号,找到inode信息
3、根据inode信息找到文件对于所在的block,进行数据的读写。

2、删除文件

在这里插入图片描述
这里要强调的是,我们日常中删除文件是将inode号删除了,下一次访问的时候就无法找到对应的inode,也就无法打开文件了
文件并没有真正的删除,只有覆盖才有可能真正的删除(即新建的文件恰好使用该块存储数据即把原来的数据覆盖了)

猜你喜欢

转载自blog.csdn.net/weixin_47219935/article/details/106981574