最近工作中需要将几台服务器重装系统, 将 CentOS 6 换成最新的 CentOS 7.5. 于是研究了一下怎么从 grub lagecy 和 grub2 通过网络来升级或安装 CentOS 7.

从 grub 通过网络安装很容易, 还可以设置 VNC 远程安装. 从 CentOS 6 安装 CentOS 7, 和对 CentOS 7 重装比较类似.

从 CentOS 6 安装 CentOS 7

在启动之前, 我们需要下载 vmlinuzinitrd.img/boot/netinstall 文件夹下, 如果哦已经无法进入系统, 可以放在一个可以访问的 U 盘上.

CentOS 6 的启动方式是 grub lagecy, 配置文件是 /boot/grub/grub.conf, 我们需要在启动项开始或结束加入一个新的启动项. 如果已经无法进入系统, 在 grub 没有毁坏的情况下, 在启动选择界面 按c进入手动输入模式, 输入以下启动命令.

1
2
3
4
title CentOS 7 Install
root (hd0,2)
kernel /netinstall/vmlinuz ro ip=192.168.1.10 netmask=255.255.255.254 gateway=192.168.1.1 dns=1.1.1.1 method=http://mirrors.ustc.edu.cn/centos/7/os/x86_64/ lang=en_US keymap=us
initrd /netinstall/initrd.img

其中, ip, netmask, gateway, dns 是网络连接信息, method 是网络安装包位置. 根据需要修改网络信息和安装位置. 根据 /boot 所在位置 和 所下载文件位置, 修改相应路径. 如果要利用 vnc 通过远程进行安装, 需要 在kernel 语句后面加上 vnc vncpassword=MyPassword 就可以了. 另外, 如果默认网卡不是 eth0, 比如eth2 的话, 需要在 kernel 命令行加上 ksdevice=eth2

如果一切没有问题, 之后便会进入图形化安装界面. 如果想自动进行安装, 你可以指定 Kickstart 安装文件. 并在 kernel 语句后面加上文件位置如 ks=http://localfile/centos7.ks, 这样就会自动进行安装了, 当然需要实现准备好 ks 文件.

从 CentOS 7 重装 CentOS 7

重装 CentOS 7 的过程与 从 CentOS 6 安装 CentOS 7 类似. CentOS 7 使用的引导器是 grub2, 启动项参数相应有些改变.

1
2
3
4
5
menuentry "CentOS-7-Install"{
set root=(hd0,msdos2)
kernel16 /netinstall/vmlinuz ro ip=192.168.1.10::192.168.1.1:255.255.255.254:my_hostname:eth0:none nameserver=1.1.1.1 inst.repo=http://mirrors.ustc.edu.cn/centos/7/os/x86_64/ inst.vnc inst.vncpassword=MyPassword ksdevice=eth0 ks="http://where.my.ks.file.is" inst.lang=en_US inst.keymap=us
initrd16 /netinstall/initrd.img
}

其中 ip 的格式为 ip::gateway:netmask:hostname:interface:none, 或者 ip=dhcp.如果 硬盘是 GPT 格式的,则需要将 (hd0,msdos2) 改成 (hd0,gpt2), 且要加上 inst.gpt 选项.

1
grub2-reboot CentOS-7-Install

这样重启后一般就会进入自动化安装 CentOS 7 的程序啦.

Kickstart 配置文件

一般安装好 CentOSFedora 后, 会在 /root 下有一个 anaconda-ks.cfg, 这就是一个 Kickstart 配置文件, 可以参考这个修改成适合自己的安装脚本.


参考

  1. How to install CentOS 7 remotely using VNC
  2. Redhat Enterprise Linux 6 - Installation Guide - BOOT OPTIONS