为什么更新正在运行的Linux系统不成问题?

Modified on: Fri, 13 Jul 2018 15:18:00 +0800

多年来我每天都在使用Linux系统,而且在运行时更新系统时我从来没有遇到过重大问题,但我仍然想知道为什么这样做是可能的。

让我举个例子。

假设某个程序包中的程序“A”正在系统上运行。此程序在某个时刻需要从同一个包中打开另一个文件(“B”)。之后,程序“A”关闭“B”,因为它不再需要它。假设我现在更新包“A”和“B”属于。 “A”并不直接受此操作的影响,至少目前是这样,因为它在RAM中运行并且更新刚刚替换为硬盘上的“A”。假设文件系统上也替换了“B”。现在“A”由于某种原因需要再次读取“B”。问题是:“A”是否有可能找到“B”的不兼容版本,并以其他方式发生崩溃或故障?

为什么没有人通过使用Live CD或类似程序重启来更新系统?

最佳答案

更新用户空间几乎不是问题

您经常可以在实时系统上更新软件包,因为:

  1. 共享库存储在内存中,而不是在每次调用时从磁盘读取,因此旧版本将继续使用,直到重新启动应用程序。
  2. 实际上是从文件描述符中读取打开的文件,而不是文件名,因此文件内容仍可供即使移动/重命名/删除应用程序,直到扇区被覆盖或文件描述符被关闭。
  3. 如果包经过精心设计,包管理器通常会正确处理需要重新加载或重新启动的包。例如,只要libc6升级,Debian就会重启某些服务。
  4. 醇>

    通常,除非您更新内核并且未使用ksplice,否则可能需要重新启动程序或服务才能利用更新。但是,很少需要重新启动系统来更新userland中的任何内容,尽管在台式机上它有时比重新启动单个服务更容易。

    另见

    http://en.wikipedia.org/wiki/Ring_%28computer_security%29#Supervisor_mode一>

作者:CodeGnome

相关问答

添加新评论