大家好! 我们继续为您已经爱上的课程推出新的课程,现在我们急于宣布我们正在启动一组新的课程
虚拟文件系统是一种神奇的抽象,它允许 Linux 的哲学说“一切都是文件”。
什么是文件系统? 基于 Linux 最早的贡献者和作者之一的话
文件系统基础知识
Linux 内核对可被视为文件系统的实体有一定的要求。 它必须实现方法 open()
, read()
и write()
对于有名称的持久对象。 从面向对象的角度来看
如果我们可以打开、读取和写入一个实体,那么该实体就被视为一个文件,正如我们从上面控制台的示例中看到的那样。
VFS 现象只是强调了类似 Unix 的观察“一切都是文件”。 想想上面那个 /dev/console 的小例子展示了控制台的实际工作原理是多么奇怪。 图为交互式 Bash 会话。 将字符串发送到控制台(虚拟控制台设备)会将其显示在虚拟屏幕上。 VFS 还有其他甚至更奇怪的特性。 例如,它允许您通过以下方式搜索
诸如 ext4、NFS 和 /proc 等熟悉的系统在 C 数据结构中具有三个重要函数,称为 read()
一个文件系统然后使用该方法 write ()
用于数据输出的另一个文件系统。
属于基本 VFS 类型的函数定义位于文件中 fs/
包含某些文件系统。 核心还包含实体,例如 cgroups
, /dev
и tmpfs
,在启动过程中需要,因此在内核子目录中定义 init/
。 请注意 cgroups
, /dev
и tmpfs
不要调用“三大”功能 file_operations
,而是直接读写内存。
下图显示了用户空间如何访问 Linux 系统上通常安装的不同类型的文件系统。 结构未显示 pipes
, dmesg
и POSIX clocks
,它也实现了结构 file_operations
,通过VFS层访问。
VFS 是系统调用和某些特定实现之间的“包装层” file_operations
例如 ext4
и procfs
。 功能 file_operations
可以与设备驱动程序或内存访问设备交互。 tmpfs
, devtmpfs
и cgroups
不使用 file_operations
,而是直接访问内存。
VFS 的存在提供了重用代码的机会,因为与文件系统相关的基本方法不必由每种类型的文件系统重新实现。 代码重用是软件工程师的常见做法! 但是,如果可重用代码包含
/tmp:简单提示
检测系统上是否存在 VFS 的一个简单方法是输入 mount | grep -v sd | grep -v :/
,这将显示所有已安装的(mounted
)非磁盘驻留且非 NFS 的文件系统,这在大多数计算机上都是如此。 列出的坐骑之一(mounts
)VFS无疑会 /tmp
, 对?
大家都知道存储 / tmp
在物理媒介上——疯狂!
为什么不宜保存 /tmp
在物理媒体上? 因为文件在 /tmp
是临时的,存储设备比创建 tmpfs 的内存慢。 此外,物理介质在被覆盖时比内存更容易磨损。 最后,/tmp 中的文件可能包含敏感信息,因此使它们在每次重新启动时消失是一项重要功能。
不幸的是,某些 Linux 发行版安装脚本默认在存储设备上创建 /tmp。 如果您的系统也发生这种情况,请不要绝望。 请遵循一些简单的说明 tmpfs
无法用于其他目的。 换句话说,一个拥有巨大 tmpfs 和大文件的系统可能会耗尽内存并崩溃。 另一个提示:编辑文件时 /etc/fstab
,记住它必须以换行符结尾,否则你的系统将无法启动。
/proc 和 /sys
除了 /tmp
、Linux用户最熟悉的VFS(虚拟文件系统)是 /proc
и /sys
。 (/dev
驻留在共享内存中并且没有 file_operations
)。 为什么有这两个组件? 我们来看看这个问题。
procfs
创建内核及其监视的进程的快照 userspace
。 在 /proc
内核打印出有关其可用内容的信息,例如中断、虚拟内存和调度程序。 除了, /proc/sys
是命令配置参数的地方 sysctl
, 可以用来 userspace
。 各个进程的状态和统计信息显示在目录中 /proc/
.
这是 /proc/meminfo
是一个空文件,但包含有价值的信息。
行为 /proc
文件显示了 VFS 磁盘文件系统的不同之处。 一方面, /proc/meminfo
包含可以使用命令查看的信息 free
。 另一方面,却是空的! 它是如何工作的? 这种情况让人想起题为“ /proc
,实际上在文件中 /proc
当没人看的时候,什么也没有。 正如所说
看似空虚 procfs
这是有道理的,因为那里的信息是动态的。 情况略有不同 sysfs
。 让我们比较一下有多少个至少为 XNUMX 字节大小的文件 /proc
和 /sys
.
Procfs
有一个文件,即导出的内核配置,这是一个例外,因为它只需要在每次启动时生成一次。 另一方面,在 /sys
有许多较大的文件,其中许多占用了整个内存页。 通常文件 sysfs
与通过读取文件获得的信息表不同,仅包含一个数字或行 /proc/meminfo
.
目标 sysfs
- 提供内核调用的读/写属性 «kobjects»
在用户空间中。 唯一的目标 kobjects
是链接计数:当一个kobject的最后一个链接被删除时,系统将恢复与其关联的资源。 尽管如此, /sys
组成了大部分著名的
内核的稳定 ABI 限制了可以出现的内容 /sys
,而不是在那个特定时刻实际存在的内容。 列出 sysfs 中的文件权限可以深入了解设备、模块、文件系统等的可配置设置。 可以配置或读取。 合乎逻辑的结论是,procfs 也是内核稳定 ABI 的一部分,尽管在
文件位于 sysfs
描述每个实体的一个特定属性,并且可以是可读的、可写的或两者兼而有之。 文件中的“0”表示SSD无法移除。
让我们从如何使用 eBPF 和 bcc 工具监控 VFS 开始翻译的第二部分,现在我们正在等待您的评论,并传统上邀请您
来源: habr.com