Linux内核中的各种文件系统:proc、tmpfs、devfs、sysfs

Linux内核中的各种文件系统:proc、tmpfs、devfs、sysfs

背景

刚学完proc文件系统在内核驱动 中的使用,就看到另外的sysfs的有关接口。很好奇proc文件系统和sysfs文件系统有啥区别。

proc

虚拟文件系统,在linux系统中被挂载与/proc目录下。里面的文件包含了很多系统信息,比如cpu负载、 内存、网络配置和文件系统等等。我们可以通过内部文本流来查看进程信息(正在运行的各个进程的PID号也以目录名形式存在/proc目录下)和机器的状态。

tmpfs

虚拟内存文件系统,使用内存作为临时存储分区,掉电之后会丢失数据,创建时不需要使用mkfs等格式化

因为内存的访问速度高于flash,所以tmpfs可以提高存储效率,避免对flash频繁读写(flash寿命有限)

devfs

设备文件,提供类似于文件的方法来管理位于/dev目录下的设备

缺点:不确定的设备映射,有时一个设备映射的设备文件可能不同,假如挂载的u盘可能对应sda也可能对应sdb 没有足够的主/辅设备号,当设备过多的时候,显然会成为一个问题。

sysfs

虚拟内存文件系统,2.6内核之前没有规定sysfs的标准挂载目录,但是在2.6之后就规定了要挂载到/sys目录下(针对以前的 sysfs 挂载位置不固定或没有标准被挂载,有些程序从 /proc/mounts 中解析出 sysfs 是否被挂载以及具体的挂载点,这个步骤现在已经不需要了)。

它的作用类似于proc,但除了与 proc 相同的具有查看和设定内核参数功能之外,还有为 Linux 统一设备模型作为管理之用。

相比于 proc 文件系统,使用 sysfs 导出内核数据的方式更为统一,并且组织的方式更好。

sysfs与proc的比较

结论:新设计的内核机制应该尽量使用 sysfs 机制,而将 proc 保留给纯净的“进程文件系统”。

sysfs 与 proc 相比有很多优点,最重要的莫过于设计上的清晰。

一个 proc 虚拟文件可能有内部格式,如 /proc/scsi/scsi ,它是可读可写的,(其文件权限被错误地标记为了 0444 !,这是内核的一个BUG),并且读写格式不一样,代表不同的操作,应用程序中读到了这个文件的内容一般还需要进行字符串解析,而在写入时需要先用字符串格式化按指定的格式写入字符串进行操作;

相比而言, sysfs 的设计原则是一个属性文件只做一件事情, sysfs 属性文件一般只有一个值,直接读取或写入。

整个 /proc/scsi 目录在2.6内核中已被标记为过时(LEGACY),它的功能已经被相应的 /sys 属性文件所完全取代。

上一篇:JupyterHub on Kubernetes部署


下一篇:zero-to-jupyterhub如何自定义内存和CPU