有一次,我正在安装一些内核补丁,在我们拥有数百个客户端的实时服务器上出现了问题。系统中只有一个内核。因此,服务器停机了一段时间,我们使用 Live CD 使系统启动并运行并进行了进一步的修复工作。
现在我的问题是:拥有 2 个版本的内核是个好主意吗?这样,如果内核损坏,我们总是可以使用另一个可用内核重新启动?请告诉我。
另外,同一个内核是否可以有两个版本?这样当内核损坏时我可以选择另一个内核吗?
Edited:
My Server Details:
2.6.32-431.el6.x86_64
CentOS release 6.5 (Final)
我怎样才能拥有该内核的相同副本,以便当我的内核损坏时,我可以启动备份内核?
答案1
yum
当您使用或apt-get
默认安装新版本时,RedHat 和基于 Debian 的发行版都会保留多个版本的内核。这被认为是一种很好的做法,并且完全针对您所描述的情况进行:如果最新内核出现问题,您可以随时重新启动,并在 GRUB 中选择使用以前的内核之一进行引导。
在 RedHat 发行版中,您可以控制内核数量以保持/etc/yum.conf
设置installonly_limit
。在我新安装的 CentOS 7 上,它默认为 5。
另外,如果在 RedHat 上您要从 RPM 包安装新内核,则应该使用rpm -ivh
,而不是rpm -Uvh
:前者将保留旧内核,而后者将替换它。
Debian 保留旧内核,但不会自动删除它们。如果您需要释放启动分区,则必须手动删除旧内核(请记住至少保留一个以前的内核)。要列出所有内核安装和内核头包,请使用dpkg -l | egrep "linux-(im|he)"
.
回答你的问题——另外,是否可以有同一内核的两个版本? - 对的,这是可能的。我现在无法在 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
答案2
是的,这是可能的,我什至会说这是可取的。您只需设置启动过程即可为您提供替代方案。通常,这是在引导加载程序配置中完成的 - 通常您只需复制那里的条目并更改内核映像文件名和引导菜单条目标签。
在生产服务器上,这通常不是问题,但每当您升级内核时,最好有一个备份。一些 Linux 发行版在软件包更新时提供回滚(通常由文件系统快照功能支持),以使该过程尽可能轻松,但即使在这些情况下,我也倾向于准备好备份。
至于拥有同一内核的多个副本 - 即使这也是有意义的,但正如 @goldilocks 在下面的评论中指出的那样,如果您的内核损坏,您应该考虑更换硬件。另一方面,将副本放在不同的物理硬盘上可能会省去一些麻烦。但请记住,内核映像文件只是曾经启动期间使用。