Linux的vx开头的文件,linux文件系统简述

一、前言

文件系统的其实相当于网络中传输层的概念,负责组织数据,而硬盘驱动则相当链路层,只负责读写二进制数据,不会关心内容,文件系统需要组织数据存储,却也不关心有效载荷的内容。

一个linux文件通常是由一个inode和一些block组成。inode用以存储文件的额外基本信息:文件的类型、文件的权限、用户、文件大小、数据索引(指向block的指针)。block部分存储文件的原始数据(二进制流)。一个文件系统中要存放一系列文件,那么就会有一系列inode和block,所以在磁盘上就会将这些数据区分开,一部分存放inode、一部分存放block,再用一个superblock用以管理inode和block块的使用。linux文件系统中把一个磁盘分区分为多个存储组,每个组都包含:super block、Group Description、inode bitmap、block bitmap、inode table 、data block。如下图:

34ba4d2ebfde897813f54d57d748e09e.pngsuper block

用以记录整个文件系统的信息,总览inode 和 data block的使用情况,包含单个inode大小、inode总量(这里是所有分组的inode总和)、inode未使用量、单个block大小、block的总量(所有分组block总和)、block未使用量、分组的情况等。虽然每个分组都有super block,但是后续的分组super block仅仅是第一个super block的备份。Group Description

标记该组存储块的开始、结束地址,block bitmap、inode bitmap、super block、inode table、data block位置信息    。block bitmap

标记每个block的使用情况,一bit对应一个block避免因为数据的增删而导致需要调整data block带来的时间开销。inode bitmap

标记每个inode的使用情况,一bit对应一个inode,这样可以避免inode table因为inode的增删而导致需要调整表带来的时间开销。inode table

包含所有文件的inode数据,inode结构见二中描述。data block

文件的原始数据,具体就是不同类型文件数据内容格式。

二、inode结构

系统中任何文件都包含一个inode,在inode中描述了文件的类型、文件大小、文件所属用户、文件所属组、文件权限、修改时间(写)、更改时间(改变inode数据)、访问时间(读)、文件在磁盘中的block地址。如下图:

0d942eb9c87fbb72c8d80f62adc67f15.png

对于inode中文件原始数据的地址,地址项大小为4字节,inode中有12个直接地址,一个间接地址,一个2重间接地址、一个3重间接地址。直接地址

其中地址指向的block块中直接存放文件数据间接地址

其所指block块中存放了一系列直接地址,这些地址指向真正包含文件数据的block。2重间接地址

其所指block中存放了一系列间接地址,间接地址指向的block中存放了指向实际数据的block地址。3重间接地址

其所指block中存放了一系列2重间接地址。

以上关于数据块地址的说明理解类似指针。一个inode的大小一般是128byte,而目前64位linux为256byte。

三、文件系统和目录树的联系

因为目录其实也是文件,其inode中文件类型是目录、block中存放的是本目录下的文件名inode的映射关系。所以一个文件系统有一个入口inode,该inode是目录。目录中有多个文件名到inode的映射,继而被映射的inode可能是文件,也可能是目录。这样整个文件系统就像一颗树一样被串起来。

四、读文件

1)读取路径到对应的目录文件、获取inode编号

2)读取inode数据,获得文件数据block地址,读取block内数据。

五、写文件

1)创建一个文件,会先读inode bitmap获取一个可用的inode,然后写入权限、属主等数据到inode,

2)根据block bitmap获取可用的block,并将数据写入block,更新inode中指向数据block的地址

3)更新block bitmap、inode bitmap、superblock

注:

1. 文件的inode和元数据中并不会包含文件名,文件名其实是包含在父目录文件的block数据中,目录文件中元数据内容是:文件名到文件inode的映射关系,是key-value格式。

2. dumpe2fs命令可以用来查看某个ext文件系统的分区中superblock的情况。

3. 操作系统对读入内存的数据,如果数据没有被修改,不会被写入磁盘,只有当数据被修改系统才会不定时将数据写入磁盘。

驱动程序相当于链路层、文件系统相当于是传输层、文件内容的具体解读相当于应用层。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值