Linux的文件系统
1. 基础概念
1. 在LINUX系统中有一个重要的概念:一切都是文件。Linux是重写UNIX而来,在UNIX系统中,把一切资源都看作是文件,包括硬件设备。
2. Linux的文件系统因为Linux的版本不一样而不一样,会向下兼容,而且一个Linux发行版不会只有一个文件系统。
2. 整体结构如下
1. 存储硬件:常见的硬盘有PATA, SATA和AHCI等,
2. 在Linux系统中,对不同硬盘所提供的驱动模块一般都存放在内核目录树drivers/ata中,而对于一般通用的硬盘驱动,也许会直接被编译到内核中,
而不会以模块的方式出现,可以通过查看/boot/config-xxx.xxx文件来确认。
3. General Block Device Layer 通用设备操作接口
不同的硬盘驱动,会提供不同的IO接口,内核认为这种杂乱的接口,不利于管理,需要把这些接口抽象一下,形成一个统一的对外接口,这样,不管你是什么硬盘,什么驱动,对外而言,它们所提供的IO接口没什么区别,都一视同仁的被看作块设备来处理。所以,如果在一层做的任何修改,将会直接影响到所有文件系统,不管是ext3,ext4还是其它文件系统,只要在这一层次做了某种修改,对它们都会产生影响。
4. 文件系统 File System
目前Linux的支持的文件系统由好多,大多Linux发行版本默认使用的文件系统一般是ext4,另外,新一代的btrfs也呼之欲出,不管什么样的文件系统,都是由一系列的mkfs.xxx命令来创建。
5. Virtual File System 虚拟文件系统
文件系统那么多,那不同的文件系统的操作也不一致,所以需要一个统一的接口来对文件系统操作, 而不是直接操作文件系统。VFS就把这些不同的文件系统做一个抽象,提供统一的API访问接口,这样,用户空间就不用关心不同文件系统中不一样的API了。VFS所提供的这些统一的API,再经过System Call包装一下,用户空间就可以经过SCI的系统调用来操作不同的文件系统。
VFS所提供的常用API有:
mount(), umount() …
open(),close() …
mkdir() …