Linux文件系列:磁盘,文件系统,软硬链接
我们之前所学的都是被进程打开了的文件,接下来我们要学习没有被进程所打开的文件,它们是存储在磁盘当中的
要学习这些文件,首先我们要先学习一下磁盘
一.磁盘相关知识
1.磁盘机械构成
2.磁盘物理存储
3.磁盘逻辑存储
1.LBA地址
我们知道磁带在展开之后呈现一种带状结构,磁带中的数据就是以这种线性的方式进行存储的
那么我们可不可以把磁盘"展开"呢?
在逻辑上面我们可以想象一下磁盘"展开"后的样子,给磁盘上的每一个扇区进行编号,然后"折"回去.
最后只需要通过一种映射关系和CHS定位法不就可以定位到具体的扇区了吗?
其实"展开"之后,磁盘就类似于数组了,此时对磁盘的管理就变成了对数组的管理了
我们知道磁盘是外设,将磁盘加载到内存当中是很慢的,因此操作系统认为512字节太小了
因此操作系统认为IO的基本单位是4KB,将这个数组划分为若干个4KB的数据块,
数据块和扇区之间就要进行一些映射关系完成这种转换
一个数据块对应于8个扇区
这些数据块所对应的地址就被称为LBA(Logical Block Address 即:逻辑块地址)地址
2.磁盘的分区和分组
假设我们有800GB的磁盘,如何对这800GB进行管理呢?
我们都知道电脑当中有若干盘:C盘,D盘等等…
其实,我们日常提到的C盘,D盘…等等,本质上都只是对一块磁盘的不同分区而已,C盘是一个分区,D盘是一个分区…
其实这里采用了分治的思想,将800GB分为8个区,每个区100GB,只要管理好100GB,那么不就能够照猫画虎管理好这800GB了吗?
那么如何管理好100GB呢?
将100GB分为10个组,每个组10GB,只要管理好10GB,那么不就能管理好这100GB了吗?
那么如何管理好10GB呢?
这就是我们接下来要探讨的问题:文件系统和inode
二.文件系统和inode
1.inode结构体
我们知道:文件=内容+属性
其中文件内容的大小是不确定的,但是文件属性的大小是确定的
操作系统想要管理文件,就要通过"先描述,在组织"的原则来进行管理,
因此需要抽象出描述文件属性的结构体(就是这里要介绍的inode结构体)
大致的成员变量如下:
struct inode
{
类型;
大小;
权限;
时间;