Linux文件系统概述
这是这个专栏的第一篇文章。创建这个专栏就是想记录一些平时的技术点滴,并不想博得很多人的眼球,只是单纯的想让自己能坚持这样一件事情。既然很多文章可能都代表自己的主观看法,
题外话 这是这个专栏的第一篇文章。创建这个专栏就是想记录一些平时的技术点滴,并不想博得很多人的眼球,只是单纯的想让自己能坚持这样一件事情。既然很多文章可能都代表自己的主观看法,我也不是什么圣人,所以难免有片面甚至错误的地方,欢迎看出的人指正。 我想了想这第一篇文章该写些什么,有很多可选项,但是最后还是觉得以一篇宽泛些的介绍性文章来开头吧,后面再开始逐渐设计细节。欢迎感兴趣的朋友关注和投稿。我自己也不是全能,以后可能也会找一些朋友来投一些文章,来尽量弥补内容面过于专一的问题。 正篇 既然这篇叫文件系统概述,那我们就来说一下什么是文件系统。我没有查阅有没有教科书的定义,从操作系统概念上讲,文件系统可以说与进程调度、内存管理等子系统并驾齐驱的一大子系统,主要负责数据的组织、存储与检索。它不是指一个实体的存储设备,而是指管理存储数据的格式与方法。 我记得知乎上曾有人问分区表和文件系统有什么关系,我当时就简单的回答了一句“没有任何关系”。分区表代表的对存储设备分区域管理的概念,分区之后的每一块区域对于文件系统来说都是独立的存储设备,本地文件系统(如ExtN, XFS, NTFS等)都是架设在一块或几块(如果有子卷管理)存储设备上的,对分区表没有任何要求。比如你有一块磁盘或U盘显示为/dev/sdb,你可以在/dev/sdb上直接做文件系统然后挂载/dev/sdb:
也可以先对其分区,如分出/dev/sdb1和/dev/sdb2,然后在sdb1和sdb2上分别做文件系统并挂载:
你甚至还可以将sdb1和sdb2先做成LVM,然后在这个dm设备上做文件系统并挂载:
更甚者,如果你愿意你可以给这个由两个分区做出来的一个LVM设备再分区,再在LVM的分区上再做文件系统并挂载(不展示那么多了,只展示分区部分):
当然你还可以有更“变态”的操作,而这一切说明的就是文件系统和其底层的存储设备是什么样子的,理论上是没有关系的(当然如果存储有问题那文件系统可能也不能工作)。 使用一个文件系统最重要的两个步骤一个是创建一个是挂载,创建文件系统(windows下好像俗称格式化),意思就是将文件系统的基本组织格式写道存储设备上。这些基本组织格式包括数据块大小,超级块信息,Free space组织结构等等,这里不做展开讨论,以后说到具体某个文件系统的on-disk结构时再说。总之创建文件系统是第一步。 有了一个文件系统后我们并不能直接访问它,你可以访问文件系统所在的磁盘,比如你对磁盘进行读写操作都没问题。但是文件系统不能在未挂载的情况下使用,我后面可能也会用几个篇幅讲挂载,这里就先简单说一下。同样,这里我也没有查挂载是否有教科书定义,从我的理解来说,挂载就是将存储设备上的文件和目录和已有目录树关联,让你可以通过文件系统的逻辑来访问存储设备。有人可能会问windows下他从没见过挂载一个设备这种事,我不想对windows的逻辑做过多解释,只能说实际上windows也是挂载的,只是它把根目录隐藏了起来,把挂载点以盘符的形式展示给你。这也是用贯windows的人转用Linux后很难理解的其中一个问题“盘符在哪里”。 这个真是一个很难说清楚的数字,从历史的长河来看,出现过的文件系统非常多。现在大家比较熟知的是NTFS, Ext2/3/4,ZFS,XFS,Btrfs,NFS等。这些是目前比较主流的文件系统,其中NFS不是本地文件系统,它是通过网络虚拟出文件系统的概念来访问Server端数据,其数据端往往架设在一个现有的本地文件系统之上(如ext4),然后export出一个挂载点,供Client端挂载使用。类似这样概念的文件系统还有很多。 NTFS: Windows当前的默认文件系统,由于版权和组织格式(对inode不友好)等原因没有被Linux内核直接支持,但可以通过ntfs-3g用户态软件包配合Linux的FUSE机制来使用windows的NTFS文件系统。当你在Linux上插一块带有NTFS文件系统的U盘或硬盘时,挂载的时候Linux就会这样做。 ExtN: Ext系列是Linux的老牌文件系统了,一直是Linux的主打,从Ext3开始支持日志,Ext4更加完善了很多功能。目前看好像没有Ext5这种打算,没看见Ted提过。由于其组织形式的限制,很难将很多现代文件系统的功能加进去,所以Linux才会出Btrfs项目企图重头开发一个功能强劲的文件系统。 Btrfs: Btrfs的目标很远大,从创立之初就被冠以Linux下一代主打文件系统的称号。但是由于各种原因其一直不能足够稳定(这里说的是面对企业级应用级别,普通用户足够用)。RedHat一直没有将其纳入自己的系统主流,可见其确实bug不断。虽然SUSE选择的是Btrfs,但是也是在一定范围内支持,很多功能是不提供稳定保证的。希望Btrfs能越来越好。 ZFS: 这个可厉害了,它可以说是“目前最好”的文件系统(个人认为,抬杠就免了),功能强大且稳定。Btrfs也是很大程度上想超越至少看齐ZFS的。可惜ZFS只在Solaris上提供最新最全的功能,BSD上还是略逊,Linux上则没有这个直接支持。虽然有ZFSonLinux这个项目,但是那是另一个概念,不讨论了。 XFS: RedHat当前的主流文件系统,以支持大存储大数据量为目标,目前上游开发活跃发展迅速,也是我主要为之服务的文件系统。后面我会有更多文章涉及XFS具体细节,这里就不多说了。 *VFS: 这里我列一下VFS是为了强调一下,这个不是文件系统linux压缩,这是一个文件系统上层的抽象,不是具体的某个文件系统。你跟人说文件系统包括VFS,就好像你说你编程语言学的VC++一样。 嗯……乱七八糟的也说了这么多了,果然概述这种东西还是很容易收不住也很容易说乱了。这第一篇文章就在这收尾吧。没什么实质性的内容,知道的人就别浪费时间看我这瞎掰了,不知道而感兴趣的就好得看看就行。尽信书不如无书,我这里说的已经不知道是第几手的知识传递了,如遇与你所知不符还是以一手材料为准。 更多内容请参阅: 醉卧沙场:README - 专栏文章总索引 (编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |