使用 iPXE 和 netboot.xyz 重装 VPS 系统
使用 iPXE 和 netboot.xyz 重装 VPS 系统
下面我将介绍使用 iPXE 和 netboot.xyz 引导 Linux 安装程序(本文以 Ubuntu Server 为例),自行安装系统。
前提条件
要使用此方法重装系统,VPS 需要满足以下几个条件:
- 不能是 OpenVZ 等虚拟化技术
- 有 VNC
- 使用 GRUB2 引导系统
- 包管理有 iPXE(如果没有,则需要手动安装)
如果 VPS 使用的是 OpenVZ 技术,或者不提供 VNC 功能,则无法进行安装;不满足其他两项的,理论上也可以实现,但不在本文讨论范围之内。
此外,不保证你安装过程中不会遇到奇奇怪怪的问题。安装前请备份数据。
重装步骤
1. 修改 grub 配置文件,延长默认等待时间
默认情况下引导菜单可能太快消失,或者根本不出现。这一步的目的是使稍后选择 iPXE 引导选项更容易。
编辑 grub 配置文件 /etc/default/grub
。
sudo nano /etc/default/grub
修改前的配置文件:
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
修改后的配置文件:
GRUB_DEFAULT=0
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=300
#GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity"
这一步的要点是,让引导菜单显示足够长的时间以便选择引导选项。
修改完成后,运行更新命令:
sudo update-grub
2. 记录机器 IP 地址(如有必要)
如果你的 VPS 是用 DHCP 获取地址的,那就不需要进行这一步操作;否则需要记录下接口名、IP 地址、掩码、网关等信息。
运行命令:
> ifconfig
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 104.*.*.* netmask 255.255.255.0 broadcast 104.*.*.255
inet6 fe80::* prefixlen 64 scopeid 0x20<link>
ether 00:* txqueuelen 1000 (Ethernet)
RX packets 9779 bytes 707184 (707.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 109 bytes 14479 (14.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此处接口名是 ens3
,IP 地址是 104.*.*.*
,掩码是 255.255.255.0
网关:
> ip route
default via 104.*.*.1 dev ens3 proto static
104.*.*.0/24 dev ens3 proto kernel scope link src 104.*.*.*
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
这里显示网关是 104.*.*.1
3. 安装 iPXE 并重启
Ubuntu 或 Debian 可以用以下命令安装 iPXE:
sudo apt install ipxe
sudo reboot
如果你用的是 CentOS,可以参考《CentOS7 配置 GRUB2+iPXE 进行网络重装》。
完成之后重启并进入 VNC。
选择“Network boot (iPXE)”选项,进入 iPXE。
4. 在 iPXE 中引导 netboot.xyz
进入 iPXE 命令行
当你看到“Press Ctrl-B for the iPXE command line…”时,请立即按下 Ctrl + B 快捷键,进入 iPXE 命令行。此消息转瞬即逝,可以在进入之前就保持狂按,以免错过。
配置网络
接下来,我们需要配置网络。根据 VPS 是否有 DHCP,配置方式有所不同。
-
有 DHCP 时,只需执行
dhcp set dns 1.1.1.1 ifopen net0
-
无 DHCP 时,需要执行下列命令,并把其中的“
、 、 、 ”换成之前记下的 IP 地址、掩码、网关及 1.1.1.1
或其他可用的 DNS 服务器set net0/ip <ip> set net0/netmask <netmask> set net0/gateway <gateway> set dns <nameserver> ifopen net0
引导 netboot.xyz
配置好网络后,就可以用以下命令引导进入 netboot.xyz 了:
chain --autofree http://boot.netboot.xyz