如何更新远程主机上的 Linux 内核
http://blog.csdn.net/robertsong2004/article/details/47277121
转载至:http://www.tinylab.org/how-to-update-the-linux-kernel-of-a-remote-machine/
注:最近在 linuxsir.org 看到有一篇《能否不重新起動而使用新遍譯好的內核》的帖子,最近楼主自己发了一个解决办法的帖子,叫《用 kexec 迅速切换内核》,即参考资料,另外,也请参考一下资料。这种方法启动更快,但是要求内核高于2.6.23。
问题背景
先来讨论这样一个问题:
假设我们有一台服务器放在网络中心,网络中心却离我们呆的地方比较远,如果想更新这台服务器上的 Linux 内核,那该怎么办呢?类似的问题是:即使网络中心就在我们隔壁,那里头嘈杂的环境确实不应该是人呆的地方,所以还是有必要试图远程更新这台主机上的内核。
也许答案很简单:直接在服务器上安装一个远程 Shell 服务,比如 ssh,在本地登录上去,通过发行版提供的方式或者是自己手动配置和编译一个内核,然后在启动引导管理器 grub 或者 lilo 中修改相关配置,启动新内核就 ok。
如果新编译的内核没有问题,这肯定就是最简单的方式了,但是:如果新编译的内核无法启动,比如 kernel panic,那该怎么办?系统挂在那里,所以这个时候别指望那个 ssh 服务器开着,等你连上解决问题,因为内核都没有起来,这个 ssh 服务就没有办法起来了,这个时候你得给网络中心的老大打个电话或者自己驱车过去跑一趟,而且还得忍受那嘈杂的机房环境,真是够倒霉的 ![]()
解决办法
不要灰心,也许这个内核的启动参数会有帮助:
|
1
2
|
panic=10
|
上述参数告诉内核,在它出现 panic 的10秒后,自动重启(请参考man bootparam)。
如果内核重启解决不了问题呢?你还得重复上面的工作,叫网络中心老大……所以我们还得找其他的解决办法,比如:
在那台服务器之上安装一个虚拟机(比如 Linux+xen, UML, qemu 等,更多请参考资料),在虚拟机之上再安装提供服务的 Linux 操作系统,因此更新内核的操作可以通过虚拟机来完成了,就不存在重启硬件的问题了。
这个基本上是可以解决问题的,但是如果你嫌弃虚拟机可能带来的效率问题,而不想这么干,那该怎么办呢?
还是有办法,因为有专门的工具来引导 Linux 的启动,所以如果启动失败,启动管理器应该可以作一些力所能及的工作。
资料提到 grub 0.95 及以后的版本提供了这样的功能:通过一定的配置,可以告诉 grub,如果它引导的内核启动失败,那么可以让它启动其他的内核。
这里头存在两个比较重要的问题,我们需要告诉 grub:
- 你想启动哪个内核
- 你想启动的内核启动失败后应该启动哪个内核
它们可以分别通过 default,fallback 在 grub 配置文件(例如 Ubuntu 中 0.97 版的 Grub 的配置文件为 /boot/grub/menu.lst)中指定:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#
# Sample boot menu configuration file
#
# Boot automatically after 30 secs.
timeout 10
# By default, boot the first entry.
default 0
# Fallback to the second entry.
fallback 1
# For booting GNU (also known as GNU/Hurd)
title Ubuntu/Hardy
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-16-generic root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic
boot
title Ubuntu/Hardy (recover mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-16-generic root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.24-16-generic
|
default 和 fallback 后面跟上内核入口“编号”,即它们的配置信息在上述配置文件中所处的位置,上面的配置文件通过”default 0″把Ubuntu/Hardy 设置为你想启动的内核,通过”fallback 1″把 Ubuntu/Hardy (recover mode) 设置为”你想启动的内核”启动失败后 grub 自动进入的内核。因此,当无法正常进入 Ubuntu/Hardy 内核时,grub 会自动切换到 Ubuntu/Hardy (recover mode)。
这样的话,只要我们的服务器上有一个能够正常启动的内核,并通过”fallback 该内核的入口编号”进行设置,那么我们就可以非常方便地编译新内核,通过”default 新内核的入口编号”设置为默认启动的内核(也可以直接通过”grub-set-deafult 新内核入口编号”命令来配置),并尝试远程启动进入新内核了。即使新内核启动失败,我们也不用担心系统一直挂在那里,因为 grub 会帮我们启动到正常的内核。
关于重启远程服务器的更多办法,建议阅读一下资料;关于虚拟机的更多信息,建议阅读资料;关于 Grub 的详细用法可以参考一下下面的 Grub 相关资料。
参考资料
如何更新远程主机上的 Linux 内核的更多相关文章
- 如何在Ubuntu/CentOS上安装Linux内核4.0
大家好,今天我们学习一下如何从Elrepo或者源代码来安装最新的Linux内核4.0.代号为‘Hurr durr I'm a sheep’的Linux内核4.0是目前为止最新的主干内核.它是稳定版3. ...
- ubuntu上编译linux内核
Linux 编译:1,首先解压缩内核.2,make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- digilent_z ...
- 使用yum更新时不升级Linux内核的方法
RedHat/CentOS/Fedora使用 yum update 更新时,默认会 升级内核 .但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦. ...
- 运行在TQ2440开发板上以及X86平台上的linux内核编译
一.运行在TQ2440开发板上的linux内核编译 1.获取源码并解压 直接使用天嵌移植好的“linux-2.6.30.4_20100531.tar.bz2”源码包. 解压(天嵌默认解压到/opt/E ...
- 嵌入式Linux内核制作【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/51291316 1. Linux体系结构 从整体上来分,linux可以分为User ...
- linux内核--内存管理(二)
一.进程与内存 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内 ...
- Linux内核设计与实现(chapter1/2)
Linux内核简介 Unix从一个失败的多用户操作系统Multics中衍生来的. Unix强大的原因: 简洁 几乎所有的东西都被当做文件来对待,可以通过相同的系统调用接口来进行调用. 因为它是由c语言 ...
- Linux内核内存管理-内存访问与缺页中断【转】
转自:https://yq.aliyun.com/articles/5865 摘要: 简单描述了x86 32位体系结构下Linux内核的用户进程和内核线程的线性地址空间和物理内存的联系,分析了高端内存 ...
- Linux内核学习总览
断断续续学习操作系统已经有大半年时间了,一直想系统地梳理一下. 正好借助<深入Linux内核架构> (Wolfgang Manuere 著,郭旭 译)汇总一下. 首先基础框架篇,Linux ...
随机推荐
- 【bzoj3754】Tree之最小方差树 最小生成树
题目描述 给出一张无向图,求它的一棵生成树,使得选出的所有边的方差最小.输出这个最小方差. 输入 第一行两个正整数N,M 接下来M行,每行三个正整数Ui,Vi,Ci N<=100,M<=2 ...
- 【bzoj4540】[Hnoi2016]序列 单调栈+离线+扫描线+树状数组区间修改区间查询
题目描述 给出一个序列,多次询问一个区间的所有子区间最小值之和. 输入 输入文件的第一行包含两个整数n和q,分别代表序列长度和询问数.接下来一行,包含n个整数,以空格隔开,第i个整数为ai,即序列第i ...
- hdu 1851(A Simple Game)(sg博弈)
A Simple Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/65535 K (Java/Others)Tot ...
- Skills - CF613B
Lesha plays the recently published new version of the legendary game hacknet. In this version charac ...
- cf 442 div2 F. Ann and Books(莫队算法)
cf 442 div2 F. Ann and Books(莫队算法) 题意: \(给出n和k,和a_i,sum_i表示前i个数的和,有q个查询[l,r]\) 每次查询区间\([l,r]内有多少对(i, ...
- 使用openssl进行文件加密
#include <iostream> #include <string> #include <stdlib.h> using namespace std; int ...
- RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件
SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...
- ACE线程管理机制-并发控制(1)
转载于:http://www.cnblogs.com/TianFang/archive/2006/12/04/581771.html ACE Lock类属 锁类属包含的类包装简单的锁定机制,比如互斥体 ...
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) A B C D 水 模拟 构造
A. Neverending competitions time limit per test 2 seconds memory limit per test 512 megabytes input ...
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...