当某个进程有其工作目录或根目录时,我可以卸载或重新安装文件系统吗?

当某个进程有其工作目录或根目录时,我可以卸载或重新安装文件系统吗?

如果某个进程的当前工作目录或根目录位于已安装的文件系统上,我可以卸载/重新安装该文件系统吗?

如果某个进程在已安装的文件系统上具有读/写文件描述符或读/写/共享映射文件,我可以将该文件系统重新挂载为只读吗?如果是,当您写入这些文件描述符和 mmap 时,它们会发生什么?

答案1

进程的工作目录和根目录被视为对文件系统的活动引用,与打开的文件相同。因此它们会阻止文件系统被卸载。内核返回“忙”错误。

EBUSY 目标无法卸载,因为它正忙。

--man umount

如果没有打开用于写入的文件,则可以将文件系统重新挂载为只读。进程的工作目录和根目录不计为打开写入的文件;它们不会阻止文件系统重新挂载为只读。

EBUSY 源无法以只读方式重新安装,因为它仍然保持文件打开以供写入。

man mount

还有另一种情况:至少在某些文件系统上,如果打开了未链接的文件,则无法将其重新挂载为只读,即使是为了读取。关闭未链接的文件可以回收空间,但这可能需要更新磁盘上的文件系统元数据块。

该命令umount -l(使用umount2(..., MNT_DETACH))能够从挂载树中分离繁忙的文件系统。文件系统保持活动状态。一旦最后一个打开的文件被关闭,它将被关闭。该文档没有说明关闭是否发生在后台,或者您是否可以依赖在最后一次 close() 调用返回后彻底关闭的文件系统。

相关内容