什么是文件系统?
文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。这的方法指的是文件管理系统(程序),简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
常规认知:根目录就是文件系统(文件系统目录结构是从根目录开始的)
严谨来说文件系统是文件管理系统,是一个程序,简称文件系统。
文件系统(文件管理系统的方法)的种类有哪些?
FAT,NTFS,CDFS,Ext2/3/4 ZFS HFS VFAT 。。。
Windows的文件系统是NTFS
Linux的文件系统就是Type那一列
查看文件系统的命令df -T
ext4:根目录分区
vfat:boot(bootloader,kernel)
tmpfs:内存文件系统
什么是分区?
Windows面向普通用户
比如Windows操作系统的C盘,D盘 通常C盘是系统盘,Windows没有那么严格,很随意
用Linux的大多都是开发者
而Linux操作系统按照功能来分区,每个分区严格存放文件
嵌入式系统可以分为4个区,分别是bootloader、para、kernel、根分区等
bootloader:启动代码
para:启动代码向内核传递参数位置
kernel:内核分区
根分区:文件系统结构
- 在嵌入式系统中,没有swap分区,只有实际的物理空间。
- bootloader、para、kernel这三个分区的功能类似于Linux系统中的/boot分区,这三个分区分别存放嵌入式系统的启动代码和内核。
注:Linux系统中/boot分区内存放着linux启动代码和内核源码。 - 根分区(/)可以构造,其功能类似于Linux系统中的根分区.在这个分区中可以创建许多目录,比如/root、/home、/usr等,但不能创建/boot目录。
- 分区bootloader、para、kernel只能由地址来区分,而根分区只能由目录来区分。
- 嵌入式系统的驱动程序、上层软件都放在根分区.在嵌入式系统启动后,系统无法查看到bootloader、para、kernel这三个分区。
Windows操作系统磁盘是连续的,比如C盘有一个游戏,那么这游戏肯定在一个连续的分区里面
但对于linux来说,磁盘不是连续的,可能来自不同的分区
从下图明显能看出来自不同的分区
文件系统目录结构
文件系统目录结构就是根目录,在Windows目录即分区,但是在Linux目录不是分区
/bin 存放我们常用的一些指令
/boot 存放系统启动时相关的文件,比如kernel内核,grub引导菜单
/home 存放普通用户的家目录
/etc 存放配置文件的目录
细节部分可以点蓝字看下面那篇文章
Linux文件系统目录结构
虚拟文件系统(vfs)
什么是vfs?
虚拟文件系统(Virtual File System)就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口
vfs有什么作用?
简化应用程序员的开发,不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作。
比如cp指令,cp不需要知道文件是什么类型的,它只需要调用标准的系统调用,比如 read、 write,把底层文件系统不同带来的复杂度交给 kernel。
比如说我要打开test.config这个文件,这个文件文件在硬盘里面,实际我们需要先到VFS,然后由VFS发配才打开。本来我们打开不同的文件要不同的API,现在只需要一个open就可以打开不同类型的文件,对于上层应用开发师来说简单了许多。