一个盘片都有正反两面,一面都会对应一个读写磁头,假设有5个盘片,就是有10个面,那么就会存在10个磁头,这个磁头是一起摆动的,不能单独动,一个磁头负责一面磁片的读写。
那么磁头是怎么进行读写的呢?
其实在磁片上有很多个微小单元,这些微小单元其实就是一个小磁铁,我们都知道磁铁有南北极,南极表示1,北极表示0,如果要写入数据,就把北极改为南极,对内容做磁化,如果要删除数据就是把南极改为北极
把磁盘的物理构造图像抽象出来后为下图:
- 每个盘片被分为很多个同心圆,每一个圆都是一个磁道。
- 每一个磁道会分为若干个扇区。
- 每个扇区的存储容量都是
512
字节,不论离圆心斤或是远。- 文件系统访问磁盘的基本单位是
4kb
。
可以把盘面抽象为一个线性结构,每一个盘面上面有很多个磁道,每个磁道又有8个扇区,每个扇区是512
字节,那么8个扇区就是一个磁道就是4kb
。
磁盘分区好了之后,每一个分区的头部都会有一个引导块Boot Block
,其余部分EXT2
文件系统会根据分区的大小分配块组(Block Group)
引导块(boot block)是存储在计算机硬盘的特定扇区中的一段代码。它是计算机启动过程中的第一个扇区,也被称为主引导记录(Master Boot Record,MBR)。
引导块的主要作用是引导计算机的操作系统。当计算机启动时,BIOS(Basic Input/Output System)会读取硬盘的引导块,并将控制权转交给引导块中的引导程序。
引导程序是一段特定的机器码,它能够加载操作系统的核心代码(内核)到计算机的内存中,并将控制权交给操作系统。引导程序通常位于引导块的开头位置,其大小一般为512字节。
引导块还包含了分区表(Partition Table),它记录了硬盘上的分区信息。分区是硬盘被划分成多个逻辑部分,每个分区可以包含一个操作系统或其他数据。分区表中的记录描述了每个分区的起始位置和大小。
通过引导块中的引导程序和分区表,计算机能够正确加载并启动操作系统,从而使计算机能够正常运行。
而每一个分区当中的头部都会存在一个Super Block
,这个块主要存放文件的很多重要信息,一旦丢失,那么文件也全部都丢失了,所以需要在每一个块组前面设置一个当作备份,防止文件丢失。
Super Block
:记录了文件系统的大小,包括所有的数据块和inode结构的大小、每个数据块的大小、inode
表起始的位置等等…
Group Descriptor Table
:该组中第一个数据块的块号、该组中哪些数据块被使用的位图的起始块号、组中未被使用的数据块数量、组中未被使用的inode数量、组中目录的数量。
Block Bitmap
:记录Data Blocks
中哪些数据块被占用,哪些没有被占用。
inode Bitmap
:inode
节点的分配情况。
inode Table
:存放文件的属性,每个文件的inode
,文件内容在Data Blocks
中的分布情况。
Data Block
:存放文件内容。
1.首先在inode bitmap
当中找到一个没有被使用的inode
。
2.在inode
表当中找到对应的inode
结构体,并且把文件信息写入到inode
结构体当中。
3.将该文件的文件名和指向inode
结构体的指针添加到目录文件的数据块中。
1.通过inode
找到inode
结构体
2.通过inode
结构体找到文件对应的Data Blocks
。
1.将文件的inode
在inode
位图中设置为0。
2.将文件的对应的数据块的数据块位图设置为0。
这也就是为什么下载很慢,删除很快,因为操作系统并没有删除数据,而是把映射关系取消掉了。
前面说到了,inode
保存了文件的属性,那么inode
是否也保存了文件名呢?
答案是没有。
文件名其实是保存在目录的数据块当中,当然,也会保存文件的inode
,不保存inode
的话那还怎么去找到文件呢。
同时,这也是为什么同一个目录下不能出现名字一样的文件的原因。
现在我要为d1/d2/d3/test
这个文件创建一个软链接。
ln -s d1/d2/d3/test soft
我现在去执行这个test
程序,看会打印什么
我再执行soft
呢?
接下来看一下文件信息
soft
的inode
是1576022,而test
的inode
是15706021,可以说明它们并不是同一个文件,但是soft
文件其实是指向test
文件的,soft
文件内容就是test
文件的地址。
这可以联想到windows
的桌面,其实基本都不是原文件,而是建立了一个软链接。
ln d1/d2/d3/test hard
可以看到这两个的inode
是一样的,其实他两都是同一个文件,只是在当前目录下同一个inode
,不同的文件名罢了,其实inode
当中是有一个引用计数的,如果创建了一个硬链接,那么计数就会+1,当计数为0的时候才会删除文件。
那么再来看到隐藏文件当中的.
和..
,就是当前文件目录和上一级文件目录,它们是怎么实现的呢?
这里.
的硬链接数是3,inode
为1576016,..
的硬链接数是8,inode
为786757。
可以看到.
的inode
和当前目录link
的inode
一模一样,而..
的inode
和上级目录study
的inode
一模一样,就说明其实它们两就是一个硬链接,那硬链接数是怎么回事呢?
这是由于study
目录下有6个文件,因为创建一个文件它的硬链接是1,就是它自己,那么目录也是如此,也有一个自己的硬链接,然后就是目录下的.
文件以及其它文件,1+1+6=8,所以是8个硬链接。