文件系统
文件系统的组成
文件系统的概念
文件系统是操作系统中负责把用户的文件存到磁盘硬件中
- 负责管理持久数据的子系统
基本数据单位:文件
- 目的:对磁盘上的文件进行组织管理
“万物皆文件”
- 普通的文件和目录、管道、块设备、socket都是统一由文件系统管理
原理
为每个文件分配两个数据结构
索引节点inode
记录:文件的元信息
inode编号、文件大小、访问权限、创建/修改时间
数据在磁盘中的位置
索引节点是文件的唯一标识
- 跟文件一一对应
- 同样存储在硬盘中
- 跟文件一一对应
目录项dentry
记录:文件的名字、索引节点指针、与其他目录项的层级关联关系
不只是表示目录
也可以表示文件
目录项是由内核维护的一个数据结构
- 存放在内存中
目录也是文件
普通文件保存文件数据
目录文件保存子目录或者文件
目录项vs目录
区别
目录是文件,存放在硬盘里
目录项是内核的一个数据结构,缓存在内存中
关系
查询目录频繁从磁盘读,效率低
内核把读过的目录用目录项这个数据结构缓存在内存中
- 下次读到相同目录,直接从内存读
关系
目录项和索引节点是多对一的关系
- 一个文件可以有多个别字
区别
索引节点存放在硬盘
目录项存放在内存
文件数据如何存储在磁盘
逻辑块/数据块
磁盘读写的最小单位是扇区(512B),读写效率低
文件系统把多个扇区组成了一个数据块
每次读写的最小单位就是逻辑块
linux中逻辑块大小为4KB(一次性读写8个扇区)
- 提高读写效率
加速文件访问:把索引节点加载到内存
磁盘格式化后的存储区域
超级块
- 存储文件系统的详细信息
- 块个数、块大小、空闲块等
- 存储文件系统的详细信息
索引节点区
- 存储索引节点
数据块区
- 存储文件或者目录数据
加载策略:只有需要的时候加载进内存
超级块:文件系统挂载时加载进内存
索引节点区:当文件被访问时加载进内存