有多个版本的 Linux 内核好不好?

Man*_*ani 14 linux kernel centos

有一次,我正在安装一些内核补丁,但在我们有数百个客户端的实时服务器上出现了问题。系统中只有一个内核。因此,服务器停机了一段时间,我们使用 Live CD 启动并运行系统,并进行了进一步的修复工作。

现在我的问题是:拥有 2 个版本的内核是否是个好主意,这样如果内核损坏,我们可以随时使用另一个可用内核重新启动?请告诉我。

另外,是否可以有相同内核的 2 个版本?以便在内核损坏时我可以选择另一个内核?

Edited:
My Server Details:
2.6.32-431.el6.x86_64
CentOS release 6.5 (Final)
Run Code Online (Sandbox Code Playgroud)

我怎样才能拥有这个内核的相同副本,以便当我的内核损坏时,我可以启动备份内核?

gol*_*lem 18

当您使用yumapt-get默认安装新的内核时,RedHat 和基于 Debian 的发行版都会保留多个版本的内核。这被认为是一种很好的做法,并且完全适用于您所描述的情况:如果最新内核出现问题,您可以随时重新启动,并且在 GRUB 中选择使用以前的内核之一进行引导。

在 RedHat 发行版中,您可以控制内核数量以/etc/yum.confinstallonly_limit设置保持一致。在我新安装的 CentOS 7 上,它默认为 5。

此外,如果在 RedHat 上您从 RPM 包安装新内核,则应使用rpm -ivh,而不是rpm -Uvh:前者将保留旧内核,而后者将替换它。

Debian 保留旧内核,但不会自动删除它们。如果您需要释放引导分区,则必须手动删除旧内核(请记住至少保留一个以前的内核)。要列出所有内核安装和内核头包,请使用dpkg -l | egrep "linux-(im|he)".

回答你的问题——另外,是否有可能有同一个内核的 2 个版本? - 对的,这是可能的。我现在无法在 CentOS 6.5 上检查它,但是在 CentOS 7 上我能够通过复制/boot目录的内核相关文件并重建 grub 菜单来产生所需的结果:

cd /boot

# Duplicate kernel files; 
# "3.10.0-123.el7" is a substring in the name of the current kernel
ls -1 | grep "3.10.0-123.el7" | { while read i; \
    do cp $i $(echo $i | sed 's/el7/el7.backup/'); done; }

# Backup the grub configuration, just in case
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.backup

# Rebuild grub configuration
grub2-mkconfig -o /boot/grub2/grub.cfg

# At this point you can reboot and see that a new kernel is available 
# for you to choose in GRUB menu
Run Code Online (Sandbox Code Playgroud)


pet*_*rph 7

是的,这是可能的,我会说甚至是可取的。您只需要设置启动过程即可为您提供替代方案。通常这是在引导加载程序配置中完成的 - 通常您只需复制那里的条目并更改内核映像文件名和引导菜单条目标签。

在生产服务器上,这通常不是问题,但是每当您升级内核时,最好有一个备份存在。一些 Linux 发行版在包更新时提供回滚(通常由文件系统快照功能支持),以使过程尽可能轻松,但即使在这些情况下,我也倾向于准备好备份。

至于拥有多个相同内核的副本 - 即使这样也有意义,但正如@goldilocks 在下面的评论中指出的那样,如果您的内核损坏,您应该考虑更换硬件。另一方面,将副本放在不同的物理硬盘上可能会为您省去一些麻烦。但请记住,内核映像文件只曾经启动时使用。

  • 你不应该做任何事情,它们已经在那里了——但在不同的版本中。除非你自己编译了其中一个,否则拥有两个相同的版本是没有意义的,否则它们只是相同的副本。“损坏”的问题有点像假的——根据这个逻辑,你需要整个系统的两个相同副本,以防 bash 二进制文件损坏、libc 损坏等。所有这些都将呈现系统没用。这些文件不应该被“损坏”。*如果是,请更换您的硬件。* (3认同)