在计算机出现之前似乎就有文件系统的概念了,此时的文件系统是指用于管理(储存和检索等)纸质文件的系统。计算机及发明后,文件系统渐渐专指用于管理储存介质的系统。它通过简单的插口给用户,便捷用户使用储存设备。
Linux操作系统下的文件系统基本上也是这么。当我们步入Linux操作系统时,首先见到的是各种类型的目录(参考一篇文章学会Linux系统目录管理)和各类文件。Linux有个理念就是“一切皆文件”,在Linux操作系统中几乎所有资源都是以文件的方式呈现的。例如c盘是文件,套接字是文件,系统配置项也是文件。所有那些内容在Linux都是通过文件系统来管理的。
在操作系统中,文件系统的概念得到了延展。Linux的文件系统分为两类,一类是真实的文件系统,用于储存数据;另一类是伪文件系统,这种文件系统并不会持久化数据。明天我们将对Linux下的文件系统进行整体的介绍,让你们对文件系统有个概括的了解。
文件系统的使用
在Linux操作系统中文件系统的使用是极其简单的。假如使用的是Ubuntu等有图形界面的操作系统,这么我们可以通过GUI浏览文件系统。这个跟使用Windows和MacOS操作系统很像。从用户角度来看红帽子linux下载,文件系统的文件被组织成树状结构。用户可以自由的创建目录和文件。
然而若果是命令行的系统,这么就没有图形界面便捷了。并且,从组织方式上来说,也是树状结构。只不过没有这么直观。如图我们通过tree命令可以看见文件系统的内容及结构。
其实,里面说的都是文件系统早已挂载的场景。有些情况下我们有一个新的c盘,但并没有挂载,这个时侯如何能够使用这块c盘呢?方式也是十分简单的,只须要做如下几步:
低格c盘sogou pinyin linux,因为Linux支持好多种文件系统,我们在使用c盘之前须要使用某种文件系统进行低格。例如低格为Ext4文件系统,mkfs.ext4/dev/sdc。
挂载文件系统,低格后并不能马上使用,须要挂载到目录树上才可以使用。具体命令是mount/dev/sdc/mnt/ext4_test。
完成上述步骤后,/mnt/ext4_test目录就是新c盘的根目录了,我们可以在其中创建子目录或则新文件了。从普通用户的角度来看,它只是一个子目录,并不会感知到其是一个新的c盘,或则文件系统的具体类型。这一点与Windows有比较大的差别。
文件系统的基本原理
在操作系统层面,文件系统是其最关键的子系统之一,其核心功能是对储存资源的管理。也就是说文件系统是对c盘(还包括光碟或则磁带等其它类型的储存介质)的空间进行管理的。文件系统对c盘空间的管理虽然还是比较简单的,就是将大的c盘空间切割为很小的区域(比如4KB),之后通过对这种小区域的分配和释放来使用c盘空间。
尽管文件系统是一个树状结构,并且c盘本身的空间却是一个扁平的线性储存空间。以Ext4为例,文件系统将c盘界定为若干个块组linux操作系统原理及应用,每位块组又界定为若干c盘块(可以在低格时指定,默认是1KB)。
为了管理这种c盘块,总是须要一些区域来记录什么c盘块早已被使用了,什么还没有被使用。记录那些数据的数据一般在c盘的特殊区域,我们称这种数据为文件系统的元数据。通过这种元数据文件系统实现了对c盘空间的管理,最终为用户提供了简单易用的插口(使用插口,非API)。
文件系统的分类
前文我们介绍了基于储存介质的本地文件系统,对其基本原理也做了介绍。虽然文件系统发展到如今,其种类也丰富多样。例如基于c盘的普通本地文件系统不仅Ext4外,还包括XFS、ZFS和Btrfs等等。其中Btrfs和ZFS不仅仅可以管理一块c盘,还可以实现多块c盘的管理,同时实现数据的冗余管理,这样可以防止c盘故障造成的数据遗失。
另一个方面,不仅对c盘数据管理的文件系统外,还有一些网路文件系统。也就是说,这种文件系统看似在本地,但毕竟数据是在远程的专门的设备上。顾客端是通过一些网路合同实现数据的传输的。例如NFS和GlusterFS等等文件系统。
几六年的发展,文件系统的种类也十分多,我们没有办法一一进行介绍。明天我们就根据大类对主要的文件系统进行介绍,不足之处还请指教。
本地文件系统
本地文件系统是对c盘空间进行管理的文件系统。从呈现形态上来看,文件系统就是一个树状的目录结构。上面我们早已介绍了比较多的概念,其本质上就是实现对c盘空间的管理,实现c盘线性空间与目录结构的转换。
从普通用户的角度来说,主要便捷了对c盘空的使用,减少了使用难度,提升了借助效率。常见的本地文件系统有Ext4、Btrfs、XFS和ZFS等等。
伪文件系统
伪文件系统是对传统文件系统的延展。伪文件系统并不会持久化数据,而是在显存中的文件系统。它以文件系统的形态实现用户与内核数据的交互。例如我们常见的伪文件系统包括proc、sysfs和configfs等等。
在Linux操作系统中伪文件系统主要实现内核与用户态的交互。例如获取IPv4合同的参数,我们只须要
网路(分布式)文件系统
网路文件系统是一种将数据储存在远端的文件系统。网路文件系统一般分为顾客端和服务端,其中顾客端类似本地文件系统,而服务端则是对数据进行管理的系统。网路文件系统的使用与本地文件系统没有任何差异,只须要执行mount命令挂载即可。网路文件系统种类也好多,例如NFS、CephFS和Gluster等。
在用户层面,完成挂载后的网路文件系统与本地文件系统完全一样,看不出任何差别,对用户是透明的。网路文件系统就好象将远程的文件系统映射到了本地。
如图是将文件系统服务中文件系统映射到顾客端的示意图。从用户的角度只是某个子目录,但实际上读写恳求须要通过网路转发到服务端进行处理。
集群文件系统
集群文件系统也是一种本地文件系统。与普通本地文件系统的差别在于其前端c盘一般是基于网路的SAN设备,且在多个节点共享(非绝对)。集群文件系统可以实现多个节点对c盘介质的共同访问。
同时,对于集群文件系统来说,其最大的特征是多个结点可以同时为应用层提供文件系统服务。这些常见非常适宜用于应用业务多活的场景,通过集群文件系统提供高可用集群机制,防止宕机导致的服务失效情况。
明天的内容先到这儿,关于文件系统的更多,更详尽的内容请关注本号及本专栏,我们后续会愈加详尽的介绍。
文章后期可能会进行错误更正和内容更新linux操作系统原理及应用,关注我们更便捷了解内容变化。
这是一个有体温的公众号