在Linux操作系统中支持很多种文件系统,例如常见的Ext2、Ext3、Ext4、proc、Btrfs和XFS等,多达几十个文件系统,每个文件系统是独立的,有自己的组织方法,操作方法。虽然支持的文件系统种类很多,但从用户层面使用方式无任何差别,用户并不感知其中的差异。对于普通用来说,数据都是组织成上文所述的树状结构。那么这种方式是如何实现的呢?
Linux的文件系统由两层结构构建:第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统。
VFS就是把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分,它位于用户程序和具体的文件系统之间。它对用户程序提供了标准的文件系统调用接口,对具体的文件系统(如EXT2、FAT32等),它通过一系列的对不同文件系统公用的函数指针来实际调用具体的文件系统函数,完成实际的各有差异的操作。任何使用文件系统的程序必须经过这层接口来使用它。通过这样的方式,VFS就对用户屏蔽了底层文件系统的实现细节和差异。
VFS不仅可以对具体文件系统的数据结构进行抽象,以一种统一的数据结构进行管理,并且还可以接受用户层的系统调用,如open()、read()、write()、stat()、link()等。此外,它还支持多种具体文件系统之间的相互访问,接受内核其他子系统的操作请求,例如,内存管理和进程调度。
查看系统中支持哪些文件系统:
[root@oa-dev /]# cat /proc/filesystems nodev sysfs nodev rootfs nodev ramfs nodev bdev nodev proc nodev cpuset nodev cgroup nodev cgroup2 nodev tmpfs nodev devtmpfs nodev binfmt_misc nodev debugfs nodev tracefs nodev securityfs nodev sockfs nodev bpf nodev pipefs nodev hugetlbfs nodev devpts ext3 ext2 ext4 squashfs vfat msdos
超级块:
一个超级块对应一个文件系统(已经安装的文件系统类型如ext2,此处是实际的文件系统哦,不是VFS)。之前我们已经说了文件系统用于管理这些文件的数据格式和操作之类的,系统文件有系统文件自己的文件系统,同时对于不同的磁盘分区也有可以是不同的文件系统。那么一个超级块对于一个独立的文件系统。保存文件系统的类型、大小、状态等等。
常见文件系统:
1. ext2
ext2是为解决ext文件系统的缺陷而设计的可扩展的、高性能的文件系统,又被称为二级扩展文件系统。它是Linux文件系统中使用最多的类型,并且在速度和CPU利用率上较为突出。ext2存取文件的性能极好,并可以支持256字节的长文件名,是GNU/Linux系统中标准的文件系统。
2. ext3
ext3是ext2文件系统的日志版本,它在ext2文件系统中增加了日志的功能。ext3提供了3种日志模式:日志(journal)、顺序(ordered)和回写(writeback)。与ext2相比,ext3提供了更好的安全性以及向上向下的兼容性能。因此,在Linux系统中可以挂在一个ext3文件系统代替ext2文件系统。ext3文件系统格式被广泛应用于目前的Linux系统中。ext3的缺点是缺乏现代文件系统所具有的高速数据处理和解压的性能。此外,使用ext3文件系统还要考虑磁盘限额问题。
3. ext4
是 ext3 文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4 的变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限数量子目录、Extents 连续数据块 概念、多块分配、延迟分配、持久预分配、快速 FSCK、日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.3 的默认文件系统。
4. xfs
方便管理,支持动态扩容。
5. swap
其实swap也是一种文件系统。swap主要是用于缓解内存的压力而单独设置的一个交换空间(类似于 Windows 中的虚拟内存),当内存不够用时,使用交换分区暂时替代内存。有三个相关命令mkswap
,swapon
,swapoff
。