目录
理解硬件
要理解文件系统,绕不开磁盘的物理结构,下图是磁盘的结构图

磁盘由一个个盘面组成,每个盘面上的一个个圆环就是磁道(cylinder),再将磁道分为一个个的扇区(sector),扇区就是磁盘存储数据的最小单位,大小通常为512字节,磁头(header)就是用来读写数据的
同一半径处的所有磁道,逻辑上构成了一个柱面
通过确定柱面(cylinder),磁头(header),扇区(sector)就可以确定磁盘上的某个空间位置,这就是CHS寻址方式
逻辑上我们可以把每个一个磁道展开成线性结构

展开了磁道就可以展开柱面,柱面由一系列半径相同的磁道组成
柱面展开,接下来就可以把整块磁盘展开了
可以看到上图其实就是三维数组,而三维数组是连续存储的
所以,每⼀个扇区都有⼀个下标,我们叫做 LBA(Logical Block Address) 地址,其实就是线性
地址。
操作系统使用LBA地址,而要访问磁盘必须使用CHS地址,于是必须要完成两者的转换,这个工作通常由硬件电路来完成
CHS与LBA的互相转换
CHS转LBA
磁头数 * 单磁道扇区数 = 每柱面扇区数
LBA = 柱面号C * 每柱面扇区数 + 磁头号H * 单磁道扇区数 + 扇区号S - 1
扇区号通常从1开始,LBA地址是从0开始
柱面和磁道都是从0编号
总柱⾯,磁道个数,扇区总数等信息,在磁盘内部会⾃动维护,上层开机的时候,会获取到这些参
数。
LBA转CHS
把//记作向下取整除法
C = LBA // 每柱面扇区数 (由CHS转LBA公式看出,两边同除以每柱面扇区数可以让后面的数都变为0)
B = (LBA % 每柱面扇区数) // 单磁道扇区数(取模可以让 柱面号C * 每柱面扇区数 这一项变为0)
S = (LBA % 单磁道扇区数) + 1 (取模可以让前两项都变为0)
从此往后,在磁盘使⽤者看来,根本就不关⼼CHS地址,⽽是直接使⽤LBA地址,磁盘内部⾃⼰
转换。所以:从现在开始,磁盘就是⼀个 元素为扇区 的⼀维数组,数组的下标就是每⼀个扇区的LBA地址。OS使⽤磁盘,就可以⽤⼀个数字访问磁盘扇区了。
引入文件系统
引入“块”概念
其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样
效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
硬盘的每个分区是被划分为⼀个个的”块”。⼀个”块”的⼤⼩是由格式化的时候确定的,并且不可
以更改,最常⻅的是4KB,即连续8个扇区组成⼀个 ”块”。”块”是⽂件存取的最⼩单位。也就是操作系统访问的最小单位

于是我们又将之前抽象出的三维数组按块来分,也就是8个扇区组成一个块,那么块号和LBA也可以互相转换
块号 = LBA / 8;
LBA = 块号 * 8 + n; (n表示块内第几个扇区)

引入“分区”概念
磁盘还会被分区以便于管理,比如Windows分出的C盘、D盘等,Linux下如何分区呢?
柱面是分区的最小单位,柱⾯⼤⼩⼀致,扇区个位⼀致,那么其实只要知道每个分区的起始和结束柱⾯号,知道每⼀个柱⾯多少个扇区,那么该分区多⼤就知道了
引入 "inode" 概念
ls -l命令可以看到文件的属性

从左到右依次是权限,硬连接数或者理解为文件的引用计数,文件拥有者,所属组,大小,最后修改时间,文件名
stat命令能看到更详细的信息

可以发现,文件除了他具体的数据,还需要存储这种属性,显然这些属性也必须存储在块中,存储这种属性的区域叫做inode
每个文件都有inode,Linux下⽂件的存储是属性和内容分离存储的
Linux下,保存⽂件属性的集合叫做inode,⼀个⽂件,⼀个inode,inode内有⼀个唯⼀的标识符,叫做inode号
struct ext2_inode {
__le16 i_mode;
/* File mode */
__le16 i_uid;
/* Low 16 bits of Owner Uid */
__le32 i_size;
/* Size in bytes */
__le32 i_atime;
/* Access time */
__le32 i_ctime;
/* Creation time */
__le32 i_mtime;
/* Modification time */
__le32 i_dtime;
/* Deletion Time */
__le16 i_gid;
/* Low 16 bits of Group Id */
__le16 i_links_count; /* Links count */
__le32 i_blocks;
/* Blocks count */
__le32 i_flags;
/* File flags */
...
};
&spm=1001.2101.3001.5002&articleId=149691764&d=1&t=3&u=9932f1e6e1f249d3aa2a71e414f6823b)
2248

被折叠的 条评论
为什么被折叠?



