为什么基于 inode 的文件系统在更新库版本后不需要重新启动?

为什么基于 inode 的文件系统在更新库版本后不需要重新启动?

我想了解什么是索引节点。然而,这段话来自维基百科让我困惑:

使用 inode 文件系统安装新库非常简单。正在运行的进程可以访问库文件,而另一个进程会替换该文件,创建新的索引节点,并且新文件将存在全新的映射,以便后续访问该库的尝试获得新版本。此功能无需重新启动即可替换当前映射的库。因此,在更新程序时,最佳做法是先删除旧的可执行文件,然后为更新版本创建新的 inode,以便执行旧版本的任何进程都可以不受干扰地继续进行。

答案1

在 Unix 风格的文件系统中,系统所知道的有关文件的所有信息(文件名称除外)都存储在 inode 中或 inode 指向的位置。这包括其内容、所有权、修改日期和权限。 Unix 目录项只是一个名称和一个指向 inode 的指针,并且仅在进程打开文件时使用。一旦文件打开,目录条目就无关紧要了。

这意味着可以删除当前打开的文件,而不会干扰正在读取或写入该文件的进程。删除文件只是删除目录条目。索引节点一直保留到所有进程关闭该文件为止,此时索引节点和所有其他文件数据都将被删除(或至少标记为不再使用且可回收)。这是由一个称为“链接计数”的字段处理的,它是 inode 结构的一部分。

因此,如果要升级正在运行的程序正在使用的共享库,只需删除该库文件即可。由于程序已经打开了该文件,因此不会受到此影响。然后,您将库的新版本安装为新文件(它会获取新的索引节点)。

相关内容