文件寻址:
先从inode表中找到该文件对应的inode,然后由inode里的指针去寻找文件,包括连续文件、链接文件(隐式、显式)、索引文件
VFS(virtual filesystem)
介绍:linux中的文件使用统一的接口,比如read() open()等,这是由于VFS的存在,使不同的文件系统表现出一致性行为。
fd 文件描述符
用于指代被打开的文件,执行io都是通过文件描述符
1. 进程级的文件描述符表 ---- fd+指针,指针指向打开文件表中的一项
2. 系统级的打开文件描述符表 ----- 偏移量、状态信息,inode指针,指向i-node表中的一项
3. 文件系统的i-node表 ---- 文件类型+文件锁
硬链接&软链接:
硬链接:指向同一个inode,数据部分就是原文件的数据
软链接:指向了一个新的inode,数据部分仅包含链接的文件路径
dentry:是一种内存结构,包括文件名和指向inode的指针。通过某一路径访问某个文件时,每访问一个文件(目录)就建立一个dentry。实际上dentry构成的树状结构(path)可以说是是文件系统的目录结构在内存中的缓存。由于硬链接和软链接的存在,一个inode会有多个dentry指向它。
inode:保存了文件的属性信息,包括:权限、属组、数据块的位置、时间戳等信息。不包含文件名。
superblock:一个超级块对应一个文件系统,保存文件系统的类型、大小、状态,可以根据inode号索引到具体的inode
mount:将文件系统加载到Linux的管理下,具体指将该文件系统的superblock挂载到系统原有的filesystem链表中
其余一些比较偏的点
分布式文件系统 FTP、NFS:用来实现共享,即不同用户通过网络可以共享本地文件
日志型文件系统:解决的是,当系统掉电的时候维持数据的一致性问题。原理大概是,在更新磁盘数据之前先写一下更新了什么(日志),即使掉电也能根据所写的日志恢复
文件事件监听 fanotify:当应用层的进程操作文件时触发系统调用,内核的监听系统就把该进程对文件的操作上报给监听进程
LVM扩展文件系统大小:传统Linux是将磁盘分区,LVM创建了抽象层,使对存储设备的使用更灵活。(反正就是用于扩容)