文件系统只能在块设备上创建,而不能在字符设备上创建吗?

文件系统只能在块设备上创建,而不能在字符设备上创建吗?

文件系统只能在块设备上创建,而不能在字符设备上创建吗?

文件系统本身可以被视为块设备吗(例如,当编程使用文件系统时)?

我的猜测是肯定的,但基于以下几点不太确定:

  • 有一个 Linux 的图表,来自操作系统概念:

    在此输入图像描述

  • 看来在了解 Linux 内核与字符设备文件上的 IO 操作相比,常规文件和块设备文件上的 IO 操作在很大程度上与上述设备驱动程序的实现类似。

谢谢。

我似乎记得有些文件系统不是建立在物理设备上的,例如/proc.但我并没有考虑它们,或者只是将它们视为构建在 RAM(块设备)上,不是吗?

答案1

文件系统通常构建在块设备上,除非它们用作内核的接口或通过网络访问文件或在用户空间中实现。如果要将文件存储在硬盘或 SSD 上,将其作为块设备访问是最简单的方法。存在像 SquashFS 这样的文件系统,它们不会在块边界上对齐数据,但它们仍然使用在块设备上工作的底层缓冲区缓存。一些 Unix 系统提供字符设备来访问磁盘而不使用缓冲区高速缓存,在 Linux 上使用openO_DIRECT标志来实现此目的。

您可以将文件用作块设备,请参阅losetup

文件系统不是块设备。

编辑

从有关不在块设备上的文件系统的注释中回答问题

  • “内核的接口”:这主要是/proc/sys但也是一堆cgroup文件系统,通常安装在/sys/fs/cgroup,等等下。
  • “通过网络访问文件”:NFS(通常在 Unix/Linux 上)、SMB/CIFS (Windows) 等
  • “在用户空间中实现”:“FUSE”表示“用户空间中的文件系统”。从内核的角度来看,这是由用户空间程序支持的。这个程序可能又会用到块设备(fuseblk),NTFS就是用fuseblk实现的。它还可以使用网络或其他任何东西来呈现文件系统。

相关内容