【Linux】通过EXT2文件系统理解Linux文件管理

目录

一、磁盘简介

二、EXT2文件系统

三、软链接与硬链接


一、磁盘简介

在理解文件系统之前,我们先简单了解一下磁盘这个硬件,如下图。

 我们的磁盘是一个圆形结构,但是如果我们将磁盘拉展开来呢?所以我们可以将磁盘盘片抽象成一段线性的空间!假设我们的磁盘是两片四面的结构,那么我们就可以根据盘面将它抽象成一个具有四个区间的线性空间。

接着我们继续已磁道对每个面进行划分,以扇区对每个磁道进行划分,就得到了如下图片:

 

所以整个磁盘我们可以把它抽象成由无数个扇区构成的一个数组!即以扇区为单位大小的一个数组!而数组都是有下标的,所以我们可以给它设定下标,例如,假设 1~100000 为第一面,100001~200000 为第二面,以此类推;而在第一面中,1~10000 为第一个磁道,10001~20000 为第二个磁道,以此类推。

所以对磁盘的管理,就变成了对数组的管理!例如我们的下标为 1234,那么它对应的盘面下标为 1234/100000 = 0,即是第一个盘面;而对应磁道的下标为 1234/10000 = 0,即是第一个磁道;对应的扇区则是 1234%10000 = 1234,即是第 1234 个扇区!所以以上三个参数就称为 CHS地址!

此外,操作系统也可以基于文件系统,按照文件块为单位进行数据存取,因为操作系统认为每次访问一个扇区太小了,为了减小和磁盘IO的次数,规定以8个扇区为基本单位,称之为文件块,为什么是8个呢?因为8个扇区的大小为4KB。所以我们以后需要寻址定位某一个块,只需要知道起始下标就可以了,因为块的大小为8个是规定!

这个文件块就是我们未来保存文件属性和内容的基本单元,我们把以这8个块为起始地址我们称为 LBA,即 Logical Block Address,逻辑块地址。所以,从此以后我们不再关注扇区,站在文件系统角度,只需要关注以 4KB 为基本单元的 Blocks 的数组即可,每一个4KB都有它的LBA地址,从此往后,对于磁盘的管理,对于文件系统的管理,就转换成了对该数组进行管理!

所以我们得出结论,对存储设备的管理,在操作系统层面,转换成了对数组的增删查改!

二、EXT2文件系统

文件系统中存储的最小单元是块(block),一个块的大小是在格式化时确定的。启动块(Boot Block)的大小为1KB,由PC标准规定,用来存储磁盘分区信息和启动信息,任何文件系统都不能修改启动块。
启动块之后才是ext2文件系统的开始,ext2文件系统将整个分区划分成若干个同样大小的块组(Block Group)。
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装启动管理程序, 这是个非常重要的设计,因为如此一来我们就能够将不同的启动管理程序安装到个别的文件系统最前端,而不用覆盖整颗硬盘唯一的 MBR, 这样也才能够制作出多重引导的环境啊!至于每一个区块群组(block group)的六个主要内容说明如后:

每个块组的组成
1)超级块(Super Block)描述整个分区的文件系统信息,如inode/block的大小、总量、使用量、剩余量,以及文件系统的格式与相关信息。超级块在每个块组的开头都有一份拷贝(第一个块组必须有,后面的块组可以没有)。 为了保证文件系统在磁盘部分扇区出现物理问题的情况下还能正常工作,就必须保证文件系统的super block信息在这种情况下也能正常访问。所以一个文件系统的super block会在多个block group中进行备份,这些super block区域的数据保持一致。
超级块记录的信息有:

1、block 与 inode 的总量(分区内所有Block Group的block和inode总量);
2、未使用与已使用的 inode / block 数量;
3、block 与 inode 的大小 (block 为 1, 2, 4K,inode 为 128 bytes);
4、filesystem 的挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息;
5、一个 valid bit 数值,若此文件系统已被挂载,则 valid bit 为 0 ,若未被挂载,则 valid bit 为 1 。

每个区段与 superblock 的信息都可以使用 dumpe2fs 这个命令查询
2)块组描述符表(GDT,Group Descriptor Table)由很多块组描述符组成,整个分区分成多个块组就对应有多少个块组描述符。
每个块组描述符存储一个块组的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。
3)块位图(Block Bitmap)用来描述整个块组中哪些块已用哪些块空闲。块位图本身占一个块,其中的每个bit代表本块组的一个block,这个bit为1代表该块已用,为0表示空闲可用。假设格式化时block大小为1KB,这样大小的一个块位图就可以表示1024*8个块的占用情况,因此一个块组最多可以有10248个块。
4)inode位图(inode Bitmap)和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用。 Inode bitmap的作用是记录block group中Inode区域的使用情况,Ext文件系统中一个block group中可以有16384个Inode,代表着这个Ext文件系统中一个block group最多可以描述16384个文件。
5)inode表(inode Table)由一个块组中的所有inode组成。一个文件除了数据需要存储之外,一些描述信息也需要存储,如文件类型,权限,文件大小,创建、修改、访问时间等,这些信息存在inode中而不是数据块中。inode表占多少个块在格式化时就要写入块组描述符中。 在Ext2/Ext3文件系统中,每个文件在磁盘上的位置都由文件系统block group中的一个Inode指针进行索引,Inode将会把具体的位置指向一些真正记录文件数据的block块,需要注意的是这些block可能和Inode同属于一个block group也可能分属于不同的block group。我们把文件系统上这些真实记录文件数据的block称为Data blocks。

整个Linux系统就是通过上边的这个文件系统,从小到大,管理了整个硬盘系统。

三、软链接与硬链接

软链接

我们先来见一见Linux中的软链接

我们通过如下指令创建软链接:

// ln -s 文件名 软链接名
ln -s log.txt log_soft.link

通过红框中的内容,我们发现文件及其软链接的inode编号不同,说明它们是两个文件。

其实Linux中的软链接与windows中的快捷方式本质是一个东西,我们可以直接通过类比来进行理解。

硬链接

同样的,我们先来见一见硬链接:

我们通过如下指令创建硬链接: 

// ln -s 文件名 硬链接名
ln -s log.txt log_soft.link

我们再看一看红框中的内容,我们发现文件及其硬链接的inode编号相同,所以他们本质是一个文件。

同样的,我们也发现了它们属性中有一项数字变成了2,这一项是文件的引用计数,表示文件名与硬盘中存储的文件的对应个数。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值