磁盘文件
结构
磁盘是计算机中的一个重要的机械设备,文件在没有运行起来的时候,一般都是存放在磁盘上的。一个文件的构成是由文件属性和文件内容构成的。磁盘可以认为是一种线性结构,他的基本单元是扇区,各个扇区可以近似的认为是类似于数组的一种结构。
管理方式
磁盘是一个很大的结构,直接对磁盘管理的话成本会很高,那么对于磁盘该怎么高效的进行管理呢?可以想到使用分而治之的方法,将磁盘分为很多区域,实际上计算机系统也是这么做的。将磁盘进行分区,使得大磁盘变为很多小空间。磁盘格式化的本质实际上就是重新写入文件系统的过程。磁盘在被分为小区域后,每个区域可能还会比较大,于是每个分区中,又进行如下的进一步划分,将分区再次划分为各个Block group 于是,我们研究文件系统,只需要研究一个Block group中的内容即可,那么每个Block group当中又有什么呢?如下是一个Block group中存放的内容,我们依次看看各个部分所代表的意义。
Super Block
一般Super Block代表文件中空间的使用情况,例如文件系统相关的类型信息等,与文件系统相关
Group Descriptor Table
这个字段一般存放与组相关的描述信息,例如组的大小以及组内的inode和block的使用情况等信息
Data blocks
存放文件内容,可以想象这个部分是一个分为很多块的存放数据的结构,用来保存文件内容,每个小空间可以被称为一个block
inode Table
存放文件属性信息,这个区域和Data blocks类似,也有很多小空间,但是他不存放文件内容,用来存放文件属性。每个小空间可以被称为一个inode。这里可以注意一点,文件名在操作系统没有意义,操作系统识别文件并不是通过文件名来识别的,文件名是用户使用的,那么操作系统怎么识别文件呢?Linux中标识一个文件正是使用这里的inode编号,每个文件对应一个indoe。每个Inode可以被认识类似于一个结构体的结构,里面存放了文件的所有属性以及inode编号还有与block关联关系等信息。
inode Bitmap
怎么查看inode Table中的各个inode的使用情况呢?难道需要一个个的去进行遍历么?这时候就用到了这里的inode Bitmap。从名字上来看,这个结构是一个位图,每个比特位的位置含义代表了inode编号,每个比特位的内容含义指的是这个inode是否被使用
Block Bitmap
这里的Block Bitmap功能和上面的inode Bitmap类似,代表各个Data block中各个block的使用情况以及编号。
目录
目录也是一种文件,因此目录也有自己的inode,也有数据,任何所创建文件都在一个特定的目录下,因此目录的数据块中存放文件名与inode编号映射关系。
删除文件
删除文件本质上实际上只需要根据文件的inode,在inode Bitmap中将1置为0即可进行删除,这就是为什么删除文件操作一般会比较快而复制文件内容会需要时间,删除文件只需要进行位图清零就可以实现。
软硬链接
软链接
创建软链接方式:ln -s + 文件名 + 链接名 删除链接可以使用rm进行删除 也可以使用unlink + 链接名
软链接可以通过创建的链接进行对原文件的访问,功能类似于windows中的快捷方式的功能,可以针对某些执行路径比较深的程序
硬链接
创建方式: ln + 文件名 +硬链接名
软硬链接区别
软链接有自己独立的inode代表是一个独立的文件有自己的inode属性和数据块,数据块保存的是指向文件所在的路径以及文件名。 硬连接本质上不是一个独立的文件,而是一个文件名和inode编号的映射关系,因为没有自己独立的inode,创建硬连接本质是在特定目录下,填写一对文件名和inode的映射关系
硬链接数
我们使用ls -l命令查看当前目录内容时,这一部分代表的是文件对应的硬链接数 这个硬链接数的值保存在inode属性的结构体中,用int值来保存,有一个文件指向则进行加1,类似于引用计数的方法。当该值为0的时候就代表没有文件指向这个inode,表示文件被删除了
目录链接数
使用mkdir创建一个空目录,这里可以看到此时的链接数是2,这是为什么呢? 这是因为每个空目录下还有隐藏文件,这里可以看到隐藏文件.的inode和目录的inode正是指向当前目录,因此引用计数会进行加一 同理,如果在test目录下在创建一个目录,硬链接数会再次加一,这是因为新创建的目录中…隐藏文件也指向同一个inode
|