![文件系统技术内幕:大数据时代海量数据存储之道](https://wfqqreader-1252317822.image.myqcloud.com/cover/284/43738284/b_43738284.jpg)
1.1.2 操作系统层面的文件系统
上文从普通用户的角度介绍了文件系统。其目的是为用户提供一个方便管理文件(数据)的方式。而从操作系统角度来说,文件系统则主要实现对硬件资源的管理,也就是对磁盘资源的管理。
任何技术的出现都是为了解决问题,文件系统也是为了解决某些问题。那么文件系统是为了解决什么问题呢?
文件系统解决的是对磁盘空间使用的问题。通常一台计算机配置一个磁盘,而磁盘的空间就是一个线性空间,就好比一个非常大的数组。然而在一个操作系统上会运行很多软件,如视频软件、浏览器、音频软件和文本编辑软件等。这些软件通常都要使用磁盘空间。如果这些软件都直接使用磁盘空间则会有如下很多问题。
(1)磁盘空间的访问会存在冲突。由于没有软件统一管理磁盘空间,各个软件各自为政,那么在访问磁盘空间时就有可能存在冲突的情况。
(2)磁盘空间的管理会非常复杂。由于各种不同格式的文件,以及不同大小的文件,没有文件系统将导致磁盘空间很难管理。
在计算机领域中有一个非常有用的定律,任何复杂的问题都可以通过分层来解决。文件系统就是这样一种思路。操作系统实现了文件系统,而文件系统是应用程序与磁盘驱动程序之间的一层软件。
文件系统对下实现了对磁盘空间的管理,对上为用户(应用程序)呈现层级数据组织形式和统一的访问接口。
基于文件系统,用户(应用程序)只需要创建、删除或读取文件即可,他们并不需要关注磁盘空间的细节,所有磁盘空间管理相关的动作则由文件系统来处理。文件系统所处的位置如图1-13所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_24_1.jpg?sign=1739676435-ayjfdoQuE1egosqLFKBx89ikvGeCNp2o-0-79ffdeb27f770269b7ca05cca85c5f75)
图1-13 文件系统所处的位置
其实文件系统不仅可以构建在磁盘上,它还可以构建在任何块设备上,甚至网络上。在Linux中,最常见的块设备包括裸磁盘、分区、LVM卷和RAID等。我们可以对上述任何块设备进行格式化,构建文件系统。Windows中的文件系统也是可以构建在其卷组上的。
文件系统不仅仅可以构建在块设备上,甚至可以构建在一个普通的文件上。磁盘是一个线性空间,而文件也是一个线性空间。因此,在一个文件上构建文件系统是没有任何问题的。这也是我们在后面学习文件系统用到的一个便捷方法。
下面先简单看一下如何在一个文件上构建文件系统。首先要有一个内容全为0的文件。生成方法如下:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_24_2.jpg?sign=1739676435-zwGwtQUTRAhK1t2OnUmvq61OYHXa5AB9-0-ed96d8a2855e8e27037e8ce89515912a)
执行命令后,查看一下当前目录,可以看到生成了一个容量为1.0MB的新文件,如图1-14所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_25_1.jpg?sign=1739676435-37supb2kIKzyKSdngpFeh2RHXeW2RMCu-0-c755dd5515a9c84d5461dcd941e98b0f)
图1-14 生成的新文件信息
然后对该文件进行格式化。例如,构建一个Ext2文件系统,并对该文件系统进行格式化,具体方法及结果如图1-15所示。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_25_2.jpg?sign=1739676435-HYDwiVt7Vf2QgYoeIL9gL7tJBartbbCT-0-bd0de8ac7f31738aff05ac1b04ef051c)
图1-15 Ext2文件系统的格式化
从执行命令的结果可以看出,Ext2文件系统已经完成格式化。如何验证一下呢?一个简单的方法是使用dumpe2fs命令,该命令可以获取文件系统的描述信息。另外一个复杂的方法是借助Linux的循环设备(回环设备)。通过该循环设备可以将一个文件虚拟成块设备,然后将该块设备挂载到目录树中。具体需要执行的命令如下:
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_25_3.jpg?sign=1739676435-LNDyW7H7PmfBYCJqdyo9tk5s9rxCLTVM-0-d72eecfeb1b49257bb8eadd5143a9936)
执行完成上述命令后,如果没有出现错误,且可以看到如图1-16所示的目录内容,则说明Ext2文件系统格式化成功。当然,为了进一步的验证,可以向该目录拷贝文件。
![](https://epubservercos.yuewen.com/F77410/23020648909757306/epubprivate/OEBPS/Images/42478_25_4.jpg?sign=1739676435-0Cn8ofdqGr26Oq18Pc14MlSqY2DmIHZ1-0-02fbd284a593d5949ac8f89c955b60ca)
图1-16 Ext2文件系统挂载后的目录
综上所述,文件系统实现了对线性存储空间的管理,这里的线性存储空间既可以是磁盘等块设备,还可以是一个文件。