前言
重装了一下服务器的系统,博客炸了三天,还被人发现了😓,真成事故了。还是提前实验实操过的,刷机需谨慎啊!😧
本文将详细讲述如何在无法连接服务器 IPMI 的情况下,仅通过 VNC 和 SSH 完成在线重装 Proxmox VE。
⚠️ 操作警告
重装过程中务必确保网络连接稳定,避免因断网导致系统损坏。
建议提前备份重要数据,以防意外丢失。
操作前请确认已掌握基本的 Linux 命令行操作技能。
正文开始
自托管 Netboot.xyz(境外服务器可跳过此步骤)
简介
Netboot.xyz 是一个开源的网络引导工具,允许用户通过网络启动各种操作系统安装程序或实用工具。它整合了多个发行版的网络安装镜像,无需下载完整的ISO文件即可进行系统安装。主要特点包括:
支持主流Linux发行版(如Ubuntu、Debian、CentOS等)
可通过PXE或iPXE启动
支持自定义启动菜单
但是由于 Netboot.xyz 官方是托管在 GitHub 上的,国内访问可能较慢或不稳定,所以本次重装选择了自托管 Netboot.xyz 用于加载镜像。
自托管
可以选择在自己别的服务器上部署,我这里选择使用
直接在终端里运行 Docker Cli 启动:
docker run -d \
--name=netbootxyz \
-e NGINX_PORT=80 `# 托管资产的 NGINX 服务器端口` \
-e WEB_APP_PORT=3000 `# Web 配置界面端口`\
-p 3000:3000 \
-p 80:80 \
-v ./config:/config `# 配置文件` \
-v ./assets:/assets `# 资产文件` \
--restart unless-stopped \
ghcr.io/netbootxyz/netbootxyz
启动后添加端口转发 80
,3000
:
托管静态文件
进入管理面板(3000 端口映射的页面):
切换到 Local Assets
选项卡,搜索 proxmox-ve
,点击 Select All
,进行 Pull Selected
:
修改配置
切换到 Menus
选项卡,点击修改 boot.cfg
文件:
第 8 行:
set boot_domain boot.netboot.xyz/2.0.87
改为aj5ceuh2p9-80.cnb.run/menus
(前面的域名为映射 80 端口的域名)第 14 行:
isset ${live_endpoint} || set live_endpoint https://github.com/netbootxyz
改为isset ${live_endpoint} || set live_endpoint https://aj5ceuh2p9-80.cnb.run
(域名为映射 80 端口的域名)
点击 Save Config
。
复制配置到托管文件
在终端中运行:rm -rf ./assets/menus/ && cp -r ./config/menus/ ./assets/
使配置公开生效。
配置 IPXE 启动项
Legacy BIOS
登陆需要重装的服务器的 SSH,安装 ipxe:apt update && apt install -y ipxe
可以查看 ipxe 的启动项:
自定义 ipxe 启动脚本并放到 /boot/ipxe.ipxe
(注意修改成你自己的网络配置和引导菜单链接):
cat >> /boot/ipxe.ipxe << EOF
#!ipxe
echo 正在设置静态 IP 地址...
set net0/ip 192.168.22.1
set net0/netmask 255.255.252.0
set net0/gateway 192.168.20.10
set dns 223.5.5.5
echo 激活网卡接口 net0...
ifopen net0 || goto net_failed
echo 加载远程引导菜单...
chain --autofree https://aj5ceuh2p9-80.cnb.run/menus/menu.ipxe || goto chain_failed
exit
:net_failed
echo 无法打开网卡接口!
sleep 3
:chain_failed
echo 加载远程菜单失败,请检查网络或URL
sleep 3
EOF
修改开机启动菜单配置:
# 设置默认启动项为 iPXE(对应 grub.cfg 中的 menuentry --id ipxe)
sed -i 's/^GRUB_DEFAULT=.*/GRUB_DEFAULT="ipxe"/' /etc/default/grub
# 启用 GRUB 菜单显示(menu 模式,允许用户选择)
sed -i 's/^GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=menu/' /etc/default/grub
# 设置菜单等待时间为 20 秒
sed -i 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=20/' /etc/default/grub
# 更新 grub 配置文件(生成 /boot/grub/grub.cfg)
update-grub
⛔️ 警告:部分 ipxe 可能不支持 https,遇到无法启动的情况建议使用 ip+http 托管
⚠️ 注意:部分旧版 Legacy BIOS 在后续的安装过程中会报内存不足错误,切换到 UEFI 引导即可。
UEFI
从 UEFI 启动时无法外挂脚本,所以采用将脚步编译到 IPXE 中的方式
保存脚本到文件
embed.ipxe
cat > embed.ipxe <<'EOF'
#!ipxe
echo 正在设置静态 IP 地址...
set net0/ip 192.168.22.1
set net0/netmask 255.255.252.0
set net0/gateway 192.168.20.10
set dns 223.5.5.5
echo 激活网卡接口 net0...
ifopen net0 || goto net_failed
echo 加载远程引导菜单...
chain --autofree https://aj5ceuh2p9-80.cnb.run/menus/menu.ipxe || goto chain_failed
exit
:net_failed
echo 无法打开网卡接口!
sleep 3
:chain_failed
echo 加载远程菜单失败,请检查网络或URL
sleep 3
EOF
编译 ipxe UEFI 启动镜像
apt update
apt install git build-essential binutils gcc-multilib liblzma-dev
git clone https://github.com/ipxe/ipxe.git
cd ipxe/src
make bin-x86_64-efi/ipxe.efi EMBED=../../embed.ipxe
部署启动镜像
mkdir -p /boot/efi/EFI/ipxe
cp bin-x86_64-efi/ipxe.efi /boot/efi/EFI/ipxe/bootx64.efi
执行
lsblk -f
查看分区列表:
root@11:~# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
├─sda2 ext4 1.0 edc913e8-760d-4406-b17c-a20f2d5b52a4 809.1M 10% /boot
├─sda3 vfat FAT32 E22E-7291 992.9M 1% /boot/efi
└─sda4 ext4 1.0 219f02c2-a9cd-42d1-a1fc-56117148e90d 3.1T 0%
可知当前 EFI 分区在 /dev/sda3
添加 EFI 启动项( EFI 分区为 /dev/sda3)
efibootmgr -c -d /dev/sda -p 3 -L "iPXE" -l '\EFI\ipxe\bootx64.efi'
# 输出结果:
root@pve:~# efibootmgr -c -d /dev/sda -p 3 -L "iPXE" -l '\EFI\ipxe\bootx64.efi'
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 0001,0002,2003,2001,2002,0003
Boot0000* EFI Network 0 for IPv4 (28-A6-DB-25-8F-45) PciRoot(0x0)/Pci(0x2,0x0)/Pci(0x0,0x0)/MAC(28a6db258f45,1)/IPv4(0.0.0.00.0.0.0,0,0)RC
Boot0001* Ubuntu HD(3,GPT,bfe393e6-c9a5-4549-bbfd-df5db074e6e7,0x201000,0x1f4000)/File(\EFI\ubuntu\grubx64.efi)
Boot0002* UEFI System HD(3,GPT,bfe393e6-c9a5-4549-bbfd-df5db074e6e7,0x201000,0x1f4000)/File(\EFI\BOOT\Bootx64.efi)RC
Boot0003* iPXE HD(3,GPT,bfe393e6-c9a5-4549-bbfd-df5db074e6e7,0x201000,0x1f4000)/File(\EFI\ipxe\bootx64.efi)
Boot2001* EFI USB Device RC
Boot2002* EFI DVD/CDROM RC
Boot2003* EFI Network RC
调整启动顺序
由上述输出可见 0003 为新添加的 iPXE 启动项,使用 -o 选项将其调整到第一个
efibootmgr -o 0003,0001,0002,2003,2001,2002
重启
安装
进入 Linux Network Installs (64-bit)
,翻页找到 Proxmox
,选择 Proxmox VE 8.4-1
进行安装。
然后会进入下载,拉取 vmlinux
、initrd
、proxmox.iso
等文件,耐心等待即可。
拉取完成后会进入 Proxmox VE 的安装页面,正常安装即可。