当前位置: 首页 > 科技观察

Linux文件系统的基本原理和常见类型

时间:2023-03-12 04:02:03 科技观察

其实在计算机出现之前就有了文件系统的概念。此时,文件系统是指用于管理(存储和检索等)纸质文件的系统。计算机和计算机发明后,文件系统逐渐指代用来管理存储介质的系统。它为用户提供了一个简单的界面,方便用户使用存储设备。Linux操作系统下的文件系统基本相同。当我们进入Linux操作系统后,首先看到的是各种类型的目录(学习Linux系统目录管理可参考一篇文章)和各种文件。Linux有一个概念“一切皆文件”。在Linux操作系统中,几乎所有的资源都是以文件的形式呈现的。比如磁盘是文件,socket是文件,系统配置项也是文件。所有这些内容都通过Linux中的文件系统进行管理。在操作系统中,文件系统的概念得到了扩展。Linux文件系统分为两类,一类是用于存储数据的真实文件系统;另一种是伪文件系统,这些文件系统不持久化数据。今天我们就对Linux下的文件系统做一个整体的介绍,让大家对文件系统有一个大概的了解。文件系统的使用Linux操作系统中文件系统的使用非常简单。如果你使用的是Ubuntu等带有图形界面的操作系统,那么我们可以通过GUI来浏览文件系统。这与使用Windows和MacOS操作系统非常相似。从用户的角度来看,文件系统的文件被组织成树状结构。用户可以自由创建目录和文件。但是如果是命令行系统,那就没有方便的图形界面了。但从组织形式上来说,也是树状结构。它只是不那么直观。如图所示,我们可以通过tree命令看到文件系统的内容和结构。当然,以上都是已经挂载了文件系统的场景。在某些情况下,我们有一个新磁盘,但未安装。这个时候我们如何使用这个磁盘呢?方法也很简单,只需执行以下步骤即可:格式化磁盘,因为Linux支持多种文件系统,所以我们在使用前需要用某种文件系统格式化磁盘。例如,格式为Ext4文件系统,mkfs.ext4/dev/sdc。挂载文件系统不能在格式化后立即使用。它需要挂载在目录树上才能使用。具体命令为mount/dev/sdc/mnt/ext4_test。完成以上步骤后,/mnt/ext4_test目录即为新磁盘的根目录,我们可以在其中创建子目录或新建文件。从普通用户的角度来看,它只是一个子目录,并没有将其感知为一个新的磁盘,或者特定类型的文件系统。这与Windows完全不同。文件系统的基本原理在操作系统层面,文件系统是其最关键的子系统之一,其核心功能是对存储资源的管理。也就是说,文件系统管理着磁盘(包括其他类型的存储介质,如光盘或磁带)的空间。文件系统对磁盘空间的管理其实比较简单,就是把大的磁盘空间切割成小的区域(比如4KB),然后通过分配和释放这些小区域来使用磁盘空间。文件系统虽然是树状结构,但是磁盘空间本身就是一个扁平的线性存储空间。以Ext4为例,文件系统将磁盘分成若干个块组,每个块组又分为若干个磁盘块(格式化时可指定,默认为1KB)。为了管理这些磁盘块,总是需要一些区域来记录哪些磁盘块被使用过,哪些没有被使用过。记录这些数据的数据通常在磁盘的一个特殊区域,我们称这些数据为文件系统的元数据。磁盘空间的管理是通过这些元数据文件系统实现的,最终为用户提供了一个易于使用的接口(usinginterface,notAPI)。文件系统的分类上一节我们介绍了基于存储介质的本地文件系统,也介绍了它的基本原理。其实文件系统发展到现在,其种类也是丰富多样。例如,普通的基于磁盘的本地文件系统,除了Ext4之外,还有XFS、ZFS、Btrfs等。其中Btrfs和ZFS不仅可以管理一个磁盘,还可以实现对多个磁盘的管理,同时实现数据冗余管理,避免磁盘故障导致数据丢失。另一方面,除了用于磁盘数据管理的文件系统外,还有一些网络文件系统。也就是说,这些文件系统看似在本地,但实际上数据在远程的专用设备上。客户端通过一些网络协议实现数据传输。比如NFS和GlusterFS等文件系统。经过几十年的发展,文件系统种类繁多,我们没有办法一一介绍。今天我们将按大类介绍主要的文件系统,不足之处还请大家指教。1.本地文件系统本地文件系统是管理磁盘空间的文件系统。从外观上看,文件系统是一个树形的目录结构。前面我们介绍了很多概念,本质上是实现了磁盘空间的管理,实现了磁盘线性空间和目录结构之间的转换。从普通用户的角度来看,主要是方便了磁盘空间的使用,降低了使用难度,提高了利用效率。常见的本地文件系统有Ext4、Btrfs、XFS、ZFS等。2.伪文件系统伪文件系统是传统文件系统的扩展。伪文件系统不持久化数据,而是一个内存文件系统。它以文件系统的形式实现用户和内核数据的交互。比如我们常见的伪文件系统有proc、sysfs、configfs等。在Linux操作系统中,伪文件系统主要实现内核态和用户态的交互。比如获取IPv4协议的参数,我们只需要3.网络(分布式)文件系统网络文件系统是在远端存储数据的文件系统。网络文件系统一般分为客户端和服务器,其中客户端类似于本地文件系统,服务器是管理数据的系统。使用网络文件系统和使用本地文件系统没有区别,只需要执行mount命令挂载即可。网络文件系统也有很多种,比如NFS、CephFS、Gluster等。在用户层面,挂载的网络文件系统与本地文件系统完全一样,没有区别,对用户是透明的。网络文件系统就像是将远程文件系统映射到本地。图为文件系统服务中的文件系统映射到客户端的示意图。从用户的角度来看,它只是某个子目录,但实际上,读写请求需要通过网络转发到服务器进行处理。4、集群文件系统集群文件系统也是一种本地文件系统。与普通本地文件系统不同的是,它们的后端磁盘通常是基于网络的SAN设备,在多个节点之间共享(非绝对)。集群文件系统可以实现多个节点对磁盘介质的共同访问。同时,对于集群文件系统,其最大的特点是多个节点可以同时为应用层提供文件系统服务。这种常用方式特别适用于应用业务多活的场景。集群文件系统提供高可用的集群机制,避免宕机导致的服务失败。