Linux · 5 7 月, 2026 0

CentOS 7现代化改造:编译安装的新内核可以移植到其他主机吗?

可以吗?

之前介绍了如何在CentOS 7上编译安装新内核。在一台主机上这么做也还好,对于有多台CentOS 7主机的用户来说,如果在每台主机上都这么编译一次,工作量未免也太大了。

于是一个想法就会自然而然地冒出来:可不可以把在某台设备上编译好的内核,分发给其他设备?

答案是:可以,但有条件

怎么做?

注意:对于准备移植新内核的主机,请提前备份系统以防不测!

假设你准备使用这里介绍的方法编译的内核进行移植。那么接下来分两种情况:

情况1:同平台移植

例如,如果你用于编译和安装新内核的主机都是在VMware上安装的虚拟机,则适用此方法。

  • 1-1 制作安装包

方式1:在新内核已经编译完毕的前提下,cd到内核源码目录(以/usr/src/linux-6.6.52/为例),执行以下命令:

KVER="6.6.52"
mkdir -p /tmp/kernelpkg/boot
make modules_install INSTALL_MOD_PATH=/tmp/kernelpkg
cp ./arch/x86_64/boot/bzImage /tmp/kernelpkg/boot/vmlinuz-$KVER

cd /tmp/kernelpkg
tar -zcvf linux-6.6-portable.tar.gz ./boot ./lib
# ^^ 生成安装包linux-6.6-portable.tar.gz

方式2:如果你安装完新内核后删除了源码也没有关系,使用以下命令制作安装包:

KVER="6.6.52"
mkdir -p /tmp/kernelpkg/boot
cp /boot/vmlinuz-$KVER /tmp/kernelpkg/boot
cp /boot/System.map-$KVER /tmp/kernelpkg/boot

mkdir -p /tmp/kernelpkg/lib/modules
cp -r /lib/modules/$KVER/ /tmp/kernelpkg/lib/modules

cd /tmp/kernelpkg
tar -zcvf linux-6.6-portable.tar.gz ./boot ./lib
# ^^ 生成安装包linux-6.6-portable.tar.gz
  • 1-2 移植内核

linux-6.6-portable.tar.gz传送到需要升级内核的主机上,执行:

KVER="6.6.52"
tar -zxvf ./linux-6.6-portable.tar.gz -C /
dracut --force /boot/initramfs-$KVER.img $KVER
# ^^ 决定移植成功与否的关键
grub2-mkconfig -o /boot/grub2/grub.cfg
# ^^ 执行结果中出现新版本内核则说明新内核已被识别
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \'
grub2-set-default 0
# ^^ 如果在上一条命令的执行结果中新内核显示在列表第一位,那么这里的数字就是0。以此类推
reboot

如果系统成功启动,则内核移植成功。

情况2:不同平台移植

例如,如果你准备在VMware虚拟机上编译新版Linux内核,但移植的目标平台是阿里云的VPS,那么就不能用情况1中提到的方法直接进行移植。否则可能会因为缺少目标平台所需驱动导致目标平台的主机无法进入系统。

我们可以基于目标平台的配置文件在本地编译新内核,然后再移植到目标平台的主机上。以下为操作步骤。

  • 1-1 获取目标主机的配置文件

将目标平台的配置文件(即/boot/config-3.10.xxx)放入本地内核源码目录中,命名为.config。示例:

[Aliyun]
/boot/config-3.10.0-1160.119.1.el7.x86_64 <- 把这个文件
* 根据目标平台当前使用的内核不同,文件名尾数会有差异

[本地]
/usr/src/linux-6.6.52/.config <- 复制到这里
  • 1-2 本地编译适用于目标主机的内核

cd到内核源码目录,执行以下命令:

yes "" | make oldconfig

关于用make menuconfig添加新模块的方法,请参考在CentOS 7上编译安装新内核中的“2. 生成配置”部分。这里不再赘述。

然后开始编译内核和各个模块,等待完成。

make -j$(nproc)
make -j$(nproc) modules
  • 1-3 制作安装包并移植到新主机

使用步骤情况1 > 1-1 制作安装包 > 方式1制作新内核的安装包。

使用步骤情况1 > 1-2 移植内核将新内核安装到目标主机。