文件系统
一、文件系统类型
Linux: 存在几十个文件系统类型:ext2,ext3,ext4,xfs,brtfs,zfs等,不同文件系统采用不同的方法来管理磁盘空间,各有优劣
Windows: FAT16、FAT32、NTFS等
二、硬盘组成
- 一个硬盘有多张盘片叠成,不同盘片有编号
- 每张盘片上都包括很多圈磁道,每个磁道都有自己的编号
- 每条磁道上都有一圈存储颗粒,每512*8(512字节,0.5KB)个存储颗粒作为一个扇区,扇区是硬盘上存储的最小物理单位
- N个扇区可以组成簇,N取决于不同的文件系统或是文件系统的配置,簇是此文件系统中的最小存储单位(在Windows下叫做簇;在Linux下叫做块(block))
- 所有盘面上的同一磁道构成一个圆柱,称为柱面,柱面是系统分区的最小单位
如图1所示,图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)
老式磁盘立体结构
磁盘存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数 (每个磁片有上下两面,每个磁面对应一个磁头)
三、文件系统布局
从上面我们知道,簇(块)是文件系统的最小存储单位,为了提高查找和存储效率,文件系统把块划分成若干块组,如下:
第一个是启动块(引导块),第二个是块组0(超级块),剩下的是其它块组
1、引导块(BootBlock):
它包括一个小程序,用于读入该分区上相应操作系统的引导部分,从而把该分区中的操作系统装入内存。(与之相对的MBR是引导整个磁盘上的操作系统的,即指定启动哪一个分区上的操作系统),当然如果一块磁盘上只装了一个操作系统,那么Boot block并无太大意义,可能不被使用。除掉引导块,该分区剩余部分将被用来存放数据。
2、块组0(超级块+全局描述表)
a、超级块(Super Block):
超级块的作用是对整个文件系统进行控制和管理。它包含有关文件系统的全部关键参数。当计算机加电进行引导或第一次遇到该文件系统时,就把超级块中的信息读入内存。超级块中包含标识文件系统类型的幻数、文件系统中的盘块数量、修改标记及其他关键管理方面的信息。即每一个组从哪一个块开始,到哪一个块结束等信息。因此一旦超级块坏掉了,其他所有块组的信息都无法读取了,因此超级块需要有很多备份,存放于其他块组中,但使用只使用块组0中的超级块,一旦坏了就从其他块组中找一个加以恢复。
b、全局描述表(Group Description Table )
紧跟在super block后面的是GDT,表示全局描述表,也称为块组描述表(Group Description Table),通常说到表,其中存放的多半是结构化信息,GDT也不例外,它存放的是 数据块位图+inode位图+inode表+数据块
1、数据块位图(Block Bitmap):即哪些块是已用的,哪些块是空闲的;
2、inode位图(Inode Bitmap):哪些inode是已用的,哪些inode是空闲的;
3、inode表 (Inode Table):通过Inode表就可以找到相应的磁盘块
4、数据块 (Data Blocks):保存数据
这样的位图比整个磁盘的位图要小得多,故扫描效率会提高很多。
3、其它块组(只有全局描述表)
数据块位图+inode位图+inode表+数据块
注意:超级块(Super Block)并不是每个块组都有,但GDT每个块组都有
四、文件系统存取文件
1、存储一个文件的流程:
1.在数据块位图上找到空闲数据块。
2.从inode 位图中获取空间inode节点,写入文件详细信息以及数据块信息
3.将文件目录项写入所在的目录文件中
目录文件:放的是一张表--目录下的文件信息(目录项:文件名+inode节点号)
2、读取一个文件的流程:cat a.txt
1.通过文件名在目录项中获取到inode节点号
2.inode区域中获取到inode节点
3.获取到文件数据块位置,进而读取到文件数据。
五、硬链接和软连接
在linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为硬链接(Hard Link)和 软链接(也称为符号链接(Symbolic Link))
1、硬链接
硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号号(InodeIndex或Inode),它是文件或者目录在一个文件系统中的唯一标识,文件的实际数据放置在数据区域(data block),目录文件存储着文件重要参数信息,也就是元数据,比如创建时间、修改时间、文件大小、属主、归属的用户组、读写权限、数据所在block号等
作用:
在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。也就是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据
特点:
1. 硬链接,以文件副本的形式存在。但不占用实际空间。
2. 不允许给目录创建硬链接。
3. 硬链接只有在同一个文件系统中才能创建。
4. 删除其中一个硬链接文件并不影响其他有相同 inode 号的文件。
2、软连接
类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。软链接可对文件或目录创建。
作用:
便于文件的管理,比如把一个复杂路径下的文件链接到一个简单路径下方便用户访问。节省空间解决空间不足问题,某个文件文件系统空间已经用完了,但是现在必须在该文件系统下创建一个新的目录并存储大量的文件,那么可以把另一个剩余空间较多的文件系统中的目录链接到该文件系统中。
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接就变成了死链接
特点:
1.软链接是存放另一个文件的路径的形式存在。
2.软链接可以 跨文件系统 ,硬链接不可以。
3.软链接可以对一个不存在的文件名进行链接,硬链接必须要有源文件。
4.软链接可以对目录进行链接。
不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
以上部分转载自:https://www.cnblogs.com/songgj/p/9115954.html和https://blog.csdn.net/qq_36791466/article/details/89414489两位大佬