转自 https://juejin.im/post/5b8ba9e26fb9a019c372e100
https://zhuanlan.zhihu.com/p/50873899
设计一个文件系统需要考虑哪些因素 https://www.cnblogs.com/cxuanBlog/p/12517595.html
linux内核浅析--文件系统 https://zhuanlan.zhihu.com/p/61123802
linux内核--文件系统初探 https://juejin.im/post/5bb187a0f265da0aa3593bf9
从内核文件系统看文件读写过程 https://www.cnblogs.com/huxiao-tee/p/4657851.html
一些命令
stat filename 看文件inode信息
df -i 看inode总数和使用数量
dumpe2fs 可以dump ext2,ext3,ext4 filesystem information
sudo dumpe2fs -h /dev/hda | grep "Inode size"
ls -i 看inode号
sysctl -a | grep fs.file-max 第一个指令查看os最大打开数, 这是系统级限制.
ulimit -n 第二个指令查看单进程最大打开数, 这是用户级限制.
文件系统综述(见上链接)
就像操作系统提取处理器的概念来建立进程的抽象,以及提取物理存储器的概念建立进程(虚拟)地址空间的抽象,我们引入了一个新的抽象 - 文件来解决这个问题。进程(线程),地址空间和文件,这些概念都是操作系统中最重要的概念。
文件是进程创建的信息逻辑单元。一个磁盘一般包含几千甚至几百万个文件,每个文件是独立于其他文件的,唯一不同的是文件是对磁盘的建模,而非对RAM的建模。事实上,如果把文件看成一个地址空间,那么读者就能理解文件的本质了。
- 所有盘面上的同一磁道构成一个圆柱,称为柱面,柱面是系统分区的最小单位
文件可以有多种构造方式,下图列出了常见的三种:
VFS
总结:
硬盘经过分区和格式化,每个区都成为了一个文件系统,挂载这个文件系统后就可以让Linux操作系统通过VFS访问硬盘时跟访问一个普通文件夹一样。
文件实现的关键问题是记录各个文件分别用到哪些磁盘块