Linux文件系统

目录

一.认识硬件-磁盘

1.磁盘的组成

1.盘面

2.主轴与转动马达

3.磁头

4.磁头臂

2.磁盘的存储构成

1.磁道

2.柱面

3.扇区

4.总结

3.磁盘的逻辑结构

二.理解文件系统

1.引入


一.认识硬件-磁盘

1.磁盘的组成

上图所示,就是一个磁盘,其中,主要有以下几个部分:

1.盘面

盘面是储存数据的载体,盘面的表面有无数磁性颗粒组成,大家都玩过吸铁石吧,我们都知道,吸铁石有南北两级,磁性颗粒也是一样,不同的是磁性颗粒的磁场方向可以被磁头改变,这个就可以表示二进制数(0和1)。并且盘面的两面都可以用,且一个磁盘往往有多个盘面。

2.主轴与转动马达

主轴是连接所有盘面的金属轴,由底部的转动马达驱动,马达以恒定的速度顺时针或逆时针转动盘面。转速直接决定了数据读写的延迟和吞吐量。

3.磁头

每个盘面都有一个磁头(正反两面都是),悬浮在盘面几纳米的距离,没有与盘面直接接触通过感应或改变磁场来读写数据。

4.磁头臂

所有磁头臂通过一个装置一起移动,确保多个磁头始终对其不同盘面的磁道。同时不断地左右旋转,本质带动磁头是寻找磁道或柱面。

2.磁盘的存储构成

如上图所示,磁盘的存储构成主要包括磁道,柱面,和扇区。

1.磁道

1.定义:每个盘面划分的成百上千的同心圆环。

2.柱面

定义:所有盘面的半径相同的磁道构成的柱面。

3.扇区

1.定义:每个磁道换分的多个扇形区域

2.特点:扇区是磁盘存储的最小单位。类似与字节是内存存储的最小单位。

扇区的大小一般为512字节,也有4KB的格式。

4.总结

1.磁头的左右摆动本质是在寻找数据存储在那个盘面和磁道,而盘面的旋转是在找一个磁道上的具体的扇区。所以,如果要提升存储效率,必须减少磁头和盘面的机械运动,所以要尽可能将关联的数据放到相近的地方储存。

2.要把数据存储在磁盘,第一个要解决的问题是要找到对应的盘面(磁头),磁道,扇区。

至于如何寻找,其实,我们可以给所有的扇区编号,只要我们知道了扇区编号,然后根据算法就可以找应的盘面,磁道,扇区。

3.磁盘的逻辑结构

磁盘的逻辑结构其实是线性结构。

我们可以根据LBA地址转化为chs地址。

比如每个盘面有2w个扇区,每个盘面有50个磁道,每个磁道有400个扇区,扇区编号是28888,那么s=28888/20000=1,c=8888/400=22 s=8888%400=88.这样就完成了LBA地址到chs地址的转换。

最后,内存的数据是怎么到磁盘上的呢?

其实,磁盘也有寄存器,分别是控制寄存器,用来控制磁盘是读是写,数据寄存器里面是读到的或者要写入的数据,地址寄存器里面放着要在哪里读或者那里写,状态寄存器保存了是否读取完成或者写入完成。

二.理解文件系统

1.引入

假如我们有一块800G磁盘空间需要管理该怎么办?其实我们可以先对磁盘进行分区,把他划分为几块分区就好操作了。例如在Windows下磁盘一般被分为C盘和D盘两个区域

如上图所示,我们可以把800G的磁盘分为一个200G分区和其他几个分区,要想管理好800G的磁盘,只需要把200G的分区管理好就行了,至于其他几个分区,只需要复制管理200G的分区的方法管理其他分区就能管理好所有分区,所有分区管理好,800G的磁盘也就被管理好了,这就是分治的思想。                                                                                                                                             注意:在分区之后,还要进行磁盘的格式化,磁盘的格式化就是对磁盘的分区进行初始化的操作,这种操作往往会导致现有分区的文件被删除,并且,磁盘格式化会对磁盘的分区后的区域写入管理信息,并且,写入的管理信息通常是由对应的文件系统决定的,常见的文件系统包括ext2等

2.分区

由上图所知,每个分区包括Boot Block还有多个Block group。

1.Boot Block

他是存放引导程序的特殊区域,负责在开机的时候启动操作系统。

2.Block group

3.块组

1.super Block(超级块)

存储的是整个文件系统的关键信息

2.GDT

存储的是该块组的基本信息,包括inode总数,已经使用的inode

3.Block Bitmap

确定一个data Block是否被使用

4.inode Bitmap

确定一个inode是否被使用

5.inode Table

存放的是文件的属性信息。这些属性被称为元数据。inode其实是以结构体的方式存储的。

#define N 15

struct inode

{

        inode number;

        文件类型

        权限;

        引用计数;

        拥有者;

        所属组;

        acm时间;

        int blocks[N];

        ...

};

其中struct inode中数组blocks存放了该文件内容的data Blocks。其中前12个元素被称为一级索引,数组直接存放的就是data blocks的编号,这些dataBlock直接存放的就是文件内容,而第13和14个元素则是二级索引,存放的datablock里面的内容全部是存贮文件内容的dataBlock编号。最后一个是三级索引,存放的的Block的内容全是dataBlock的编号,而这些datablock存放的也是datablock的编号。这些编号指向的dataBlocks的内容才是文件内容。

注意:文件名不存储在inode当中。一个inode的大小是128个字节。

6.Data Blocks

存放的是文件的内容。存储大小是一般是4KB

4.理解目录

我们都说Linux下一切皆文件,那么目录也是文件。目录也有自己的inode和数据块。目录的inode里面也是他自己的权限,acm时间等属性信息。而数据块中存储的是当前目录下的文件的文件名和文件对应的inode的对应关系。

5.理解一些问题

1.如何创建一个文件?

首先,我们知道,创建文件肯定要给创建文件的路径和文件名。那么OS首先就会根据路径从根目录找到当前目录,然后OS会在当前分区中找到一个块组,在这个块组里通过inodebitmap 找到一个空闲的inode编号,把当前编号置为1,再通过编号找到对应的inode,往inode里面填充信息,然后通过Blockbitmap找到空闲的数据块,把这些Blockbitmap中这些空闲的数据块的值置为1,再把这些数据块号填到inode里的数组里面。最后在目录下的数据块里面把创建的文件名和这个inode编号建立映射关系。

2.如何删除一个文件?

首先根据路径找到当前目录,访问目录的数据块,在里面找到待删除文件的文件名和对应的inode编号,通过inode编号,找到对应的inode,在里面又找到数据块的编号,再通过这些编号找到inodebitmap,blockbitmap里的这些位置置为0.最后删除当前目录的数据块中的要删除的文件名和他的inode编号。

6.软硬链接

1.软链接

可以通过以下方法创建一个软链接

 ln -s 被链接的文件 待创建的文件

由图可知,我们创建了一个软链接link,并且有一个箭头指向a.out,那么link和a.out有什么关系吗?其实link是一个独立的文件,他的数据块中存放的是a.out的路径,因此,link和a.out的效果相同,但是文件大小link要远小于a.out。可以把link理解为a.out的快捷方式。

如上图,两者的inode编号不同,证明是不同文件。

同时,如果a.out被删除,那么link指向的路径就失效了。link就会出现问题。

2.硬链接

可以通过以下方法创建一个硬链接

 ln 被链接的文件 待创建的文件

和软链接不同,硬链接不是独立的文件,而是类似取别名这样一种感觉。在底层上,硬链接本质是在当前目录下的被链接的文件名和inode的对应关系中再添加一个文件名与被链接的inode的对应关系

如上图,两者的inode编号一致,证明两者是同一个文件。这时,如果我们删除a.out,link会怎么样呢?补充:如果删除link,可以用rm,也可以用指令unlink。

如上图,a.out被删除之后,link依然能运行,这是因为引用计数的原因,inode里面有一个硬链接数的属性,如果建立一个硬链接,就会++,如果删除任意一个指向该inode的文件,就会--,只用等他减为0时,inode才会被inodebitmap置为0。

3.软硬链接的区别

  1. 软链接是一个独立的文件,有独立的inode,而硬链接没有独立的inode。
  2. 软链接相当于快捷方式,硬链接本质没有创建文件,只是建立了一个文件名和已有的inode的映射关系,并写入当前目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值