加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

详解 Linux 中的虚拟文件系统

发布时间:2019-05-30 08:15:32 所属栏目:站长百科 来源:IT生涯
导读:什么是文件体系?按照早期的 Linux 孝顺者和作家 Robert Love 所说,文件体系是一个遵循特定布局的数据的分层存储。 不外,这种描写也同样合用于 VFAT(假造文件分派表Virtual File Allocation Table)、Git 和Cassandra(一种 NoSQL 数据库)。那么怎样区别文
副问题[/!--empirenews.page--]

什么是文件体系?按照早期的 Linux 孝顺者和作家 Robert Love 所说,“文件体系是一个遵循特定布局的数据的分层存储。” 不外,这种描写也同样合用于 VFAT(假造文件分派表Virtual File Allocation Table)、Git 和Cassandra(一种 NoSQL 数据库)。那么怎样区别文件体系呢?

详解 Linux 中的假造文件体系

文件体系基本观念

Linux 内核要求文件体系必需是实体,它还必需在耐久工具上实现 open()、read() 和 write() 要领,而且这些实体必要有与之关联的名字。从 面向工具编程 的角度来看,内核将通用文件体系视为一个抽象接口,这三大函数是“假造”的,没有默认界说。因此,内核的默认文件体系实现被称为假造文件体系(VFS)。

详解 Linux 中的假造文件体系

假如我们可以或许 open()、read() 和 write(),它就是一个文件,如这个主控台会话所示。

VFS 是闻名的类 Unix 体系中 “统统皆文件” 观念的基本。让我们看一下它有多稀疏,上面的小小演示浮现了字符装备 /dev/console 现实的事变。该图表现了一个在假造电传打字节制台(tty)上的交互式 Bash 会话。将一个字符串发送到假造节制台装备会使其表现在假造屏幕上。而 VFS 乃至尚有其余更稀疏的属性。譬喻,它可以在个中寻址。

我们认识的文件体系如 ext4、NFS 和 /proc 都在名为 file_operations 的 C 说话数据布局中提供了三大函数的界说。另外,个此外文件体系会以认识的面向工具的方法扩展和包围了 VFS 成果。正如 Robert Love 指出的那样,VFS 的抽象使 Linux 用户可以轻松地将文件复制到(或复制自)外部操纵体系或抽象实体(如管道),而无需担忧其内部数据名目。在用户空间这一侧,通过体系挪用,历程可以行使文件体系要领之一 read() 从文件复制到内核的数据布局中,然后行使另一种文件体系的要领 write() 输出数据。

属于 VFS 根基范例的函数界说自己可以在内核源代码的 fs/*.c 文件 中找到,而 fs/ 的子目次中包括了特定的文件体系。内核还包括了相同文件体系的实体,譬喻 cgroup、/dev 和 tmpfs,在引导进程的早期必要它们,因此界说在内核的 init/ 子目次中。请留意,cgroup、/dev 和 tmpfs 不会挪用 file_operations 的三大函数,而是直接读取和写入内存。

下图大抵声名白用户空间怎样会见凡是挂载在 Linux 体系上的各类范例文件体系。像管道、dmesg 和 POSIX 时钟这样的布局在此图中未表现,它们也实现了 struct file_operations,并且其会见也要通过 VFS 层。

详解 Linux 中的假造文件体系

How userspace accesses various types of filesystems

VFS 是个“垫片层”,位于体系挪用和特定 file_operations 的实现(如 ext4 和 procfs)之间。然后,file_operations 函数可以与特定于装备的驱动措施或内存会见器举办通讯。tmpfs、devtmpfs 和 cgroup 不行使 file_operations 而是直接会见内存。

VFS 的存在促进了代码重用,由于与文件体系相干的根基要领不必要由每种文件体系范例从头实现。代码重用是一种被普及接管的软件工程最佳实践!唉,可是假如重用的代码引入了严峻的错误,那么担任常用要领的全部实现城市受到影响。

/tmp:一个小提醒

找出体系中存在的 VFS 的简朴要领是键入 mount | grep -v sd | grep -v :/,在大大都计较机上,它将列出全部未驻留在磁盘上,同时也不是 NFS 的已挂载文件体系。个中一个列出的 VFS 挂载必定是 /tmp,对吧?

谁都知道把 /tmp 放在物理存储设惫亓?确是疯了!图片:https://tinyurl.com/ybomxyfo

为什么把 /tmp 留在存储装备上是不行取的?由于 /tmp 中的文件是姑且的(!),而且存储装备比内存慢,以是建设了 tmpfs 这种文件体系。另外,比起内存,物理装备频仍写入更轻易磨损。最后,/tmp 中的文件也许包括敏感信息,因此在每次从头启动时让它们消散是一项成果。

不幸的是,默认环境下,某些 Linux 刊行版的安装剧本仍会在存储装备上建设 /tmp。假如你的体系呈现这种环境,请不要绝望。凭证一向优越的 Arch Wiki 上的简朴声名来办理题目就行,记着分派给 tmpfs 的内存就不能用于其他目标了。换句话说,包括了大文件的复杂的 tmpfs 也许会让体系耗尽内存并瓦解。

另一个提醒:编辑 /etc/fstab 文件时,请务必以换行符竣事,不然体系将无法启动。(猜猜我怎么知道。)

/proc 和 /sys

除了 /tmp 之外,大大都 Linux 用户最认识的 VFS 是 /proc 和 /sys。(/dev 依靠于共享内存,而没有 file_operations 布局)。为什么有两种呢?让我们来看看更多细节。

procfs 为用户空间提供了内核及其节制的历程的瞬时状态的快照。在 /proc 中,内核宣布有关其提供的办法的信息,如间断、假造内存和调治措施。另外,/proc/sys 是存放可以通过 sysctl 呼吁设置的配置的处所,可供用户空间会见。单个历程的状态和统计信息在 /proc/ 目次中陈诉。

详解 Linux 中的假造文件体系

/proc/meminfo 是一个空文件,但仍包括有代价的信息。

/proc 文件的举动声名白 VFS 可以与磁盘上的文件体系差异。一方面,/proc/meminfo包括了可由呼吁 free 揭示出来的信息。另一方面,它照旧空的!怎么会这样?这种环境让人遐想起康奈尔大学物理学家 N. David Mermin 在 1985 年写的一篇名为《没有人望见玉轮的环境吗?实际和量子理论》。究竟是当历程从 /proc 哀求数据时内核再网络有关内存的统计信息,并且当没有人查察它时,/proc 中的文件现实上没有任何内容。正如 Mermin 所说,“这是一个根基的量子学说,一样平常来说,丈量不会显现被测属性的预先存在的代价。”(关于月球的题目的谜底留作操练。)

当没有历程会见它们时,/proc 中的文件为空。(来历)

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读