文件可以在没有文件系统的情况下存在吗?

文件可以在没有文件系统的情况下存在吗?

我正在阅读有关文件系统的内容,并想到了一些问题。

问:如果文件是 unix/linux 的一个组成部分(即代表进程/proc或设备文件/dev),正如一句名言所说的那样“一切都是文件',它们是否存在于文件系统上下文之外?我觉得某些文件(例如网络套接字文件或块设备文件)是独立于文件系统的,更像是操作系统本身的一部分。

后续问题:unix/linux 可以在没有文件系统的情况下运行吗?例如,Linux系统可以通过手动访问辅助存储来工作吗?

答案1

是的。和不。或许。

不是一切一份文件;显然,硬盘驱动器不能包含包含文件系统的分区,然后文件系统又包含硬盘驱动器本身。只是有很多事情无障碍通过名字通过文件系统树可见。

就文件系统而言(逻辑文件系统,或者数据结构意义上的具体文件系统,如 ext4),只是某些文件被标记为某个特定编号设备的“设备节点”。但它们的功能是由单独的驱动程序实现的。当进程访问它们时,操作系统只是将访问转移到适当的驱动程序,而不是文件系统。将它们视为参考、指针等。

考虑到这一点,就很容易理解,eg/proc绝不是强制性的。即使没有它,系统也可以运行并且可以运行进程。您只是没有那种查看这些进程的方法。但是像fork()kill()和 之类的东西wait*()仍然可以工作,因为它们通过 PID 而不是通过某些文件系统名称来引用进程。一般来说,网络套接字也不显示为命名文件。 Unix 域套接字可以做到这一点,但 IIRC 它们不必这样做。而 TCP 或 UDP 套接字等则不然。但网络套接字确实显示为文件描述符进程,并且read()系统write()调用对它们的操作与管道或“真实”文件的操作相同。因此,从某种意义上说,网络套接字也像文件一样行走、交谈和发出嘎嘎声,尽管网络协议与在磁盘上存储位没有太大关系。

但是,据我所知,如果没有那些命名的设备节点,您实际上没有办法引用任意硬盘驱动器。你的硬件仍然存在,系统仍然有必要的 SATA/USB/任何与它们一起工作所需的驱动程序,但你无法告诉它这样做。尽管您可以挂载文件系统,然后删除指向文件系统所在设备的设备节点。这里没有问题,因为设备节点只是一种方式用户空间访问设备。

您问:“unix/linux 可以在没有文件系统的情况下运行吗?”。其一,Linux 无法在没有文件系统的情况下运行,因为它通过查找要运行的可执行文件来启动用户空间(最终运行保留下来的文件init)。不过,该文件系统不需要是常规磁盘驱动器上的文件系统,它可以是内核根据内核映像中包含的数据设置的特殊 rootfs 文件系统。 (顺便说一句,你无法摆脱 rootfs。它总是在那里,即使是空的,因此内核不需要处理没有任何安装的文件系统的想法。)参见ramfs-rootfs-initramfs.txt有关 rootfs 的详细信息,请参阅内核文档。

我想我们可以假设一些假设的操作系统可以在没有文件系统的情况下运行,但是例如execve()系统调用需要一个文件名,因此无论正在运行的程序都无法启动其他程序(正在运行的程序需要以其他方式加载),并且如果没有指定的设备节点,访问存储也会很困难。无论如何,它看起来与其他 Unixen 不太一样。

在 Linux 上,可以设计一个奇怪的单一用途系统,在启动时从 rootfs 启动单个用户空间程序,然后清除 rootfs 并且从不挂载任何其他文件系统。这将尽可能接近没有文件系统,并且程序仍然可以运行并例如访问网络。不过,我怀疑它是否有任何实际用途,并且像往常一样,任何打开的文件在关闭之前仍然存在,因此删除它们的名称可能不是很有用。

也可以看看Linux内核需要文件系统才能运行吗?,我在上面回应的部分答案。有关“一切都是文件”口头禅的详细讨论,请参阅这个答案外行人对“一切皆文件”的解释——与Windows有什么不同?

答案2

“文件”的计算机概念实际上早于文件系统。它是数据的集合(例如打孔卡上的数据)。

现代系统现在实际上只将文件视为文件系统的一部分,正如其他人已经回答的那样。存在与文件关联的元数据,例如所有权和权限,这些元数据不属于文件中的数据的一部分。但正如维基百科页面所示,情况并非总是如此。

另外,块设备文件和插座文件是代表操作系统对象的文件系统实现,它们根据定义需要文件系统。它们引用的操作系统对象不需要它们,文件只是对象的接口。并非所有文件系统都支持块设备和套接字文件。

答案3

这个问题具有相当的哲学性质。任何事物都可以脱离环境而存在吗?

从不那么哲学的角度来看:这取决于您对“文件”的定义。设备显然没有文件系统而存在。进程的存在没有文件系统。网络流的存在没有文件系统。

为了让这些东西发挥作用,它们必须有某种表示形式。无论您使用设备 ID 还是整数来枚举数据流都无关紧要。
您会将“硬盘块 23865 中有一些数据”或“网络流 3874”信息称为“文件”吗?那么你可以说文件可以在没有文件系统的情况下存在。

您可能希望有一些方法来存储、访问和管理这些信息。您将拥有网络流或当前活动进程的列表。您将“文件”存储在更大的数据结构中。这就是你的文件系统。虽然这些数据结构没有写入任何形式的持久存储,但它们仍然是管理文件的系统。

结论:不,没有文件系统,文件就不可能存在。

相关内容