当前位置: 首页 > news >正文

在线重装 Proxmox VE

前言

重装了一下服务器的系统,博客炸了三天,还被人发现了😓,真成事故了。还是提前实验实操过的,刷机需谨慎啊!😧

本文将详细讲述如何在无法连接服务器 IPMI 的情况下,仅通过 VNC 和 SSH 完成在线重装 Proxmox VE。

⚠️ 操作警告

重装过程中务必确保网络连接稳定,避免因断网导致系统损坏。

建议提前备份重要数据,以防意外丢失。

操作前请确认已掌握基本的 Linux 命令行操作技能。

正文开始

自托管 Netboot.xyz(境外服务器可跳过此步骤)

简介

https://github.com/netbootxyz/netboot.xyz

Netboot.xyz 是一个开源的网络引导工具,允许用户通过网络启动各种操作系统安装程序或实用工具。它整合了多个发行版的网络安装镜像,无需下载完整的ISO文件即可进行系统安装。主要特点包括:

  • 支持主流Linux发行版(如Ubuntu、Debian、CentOS等)

  • 可通过PXE或iPXE启动

  • 支持自定义启动菜单

但是由于 Netboot.xyz 官方是托管在 GitHub 上的,国内访问可能较慢或不稳定,所以本次重装选择了自托管 Netboot.xyz 用于加载镜像。

自托管

可以选择在自己别的服务器上部署,我这里选择使用 https://cnb.cool 的云开发环境。

直接在终端里运行 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

启动后添加端口转发 803000

托管静态文件

进入管理面板(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
#!ipxeecho 正在设置静态 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.5echo 激活网卡接口 net0...
ifopen net0 || goto net_failedecho 加载远程引导菜单...
chain --autofree https://aj5ceuh2p9-80.cnb.run/menus/menu.ipxe || goto chain_failedexit: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 进行安装。

然后会进入下载,拉取 vmlinuxinitrdproxmox.iso 等文件,耐心等待即可。

拉取完成后会进入 Proxmox VE 的安装页面,正常安装即可。

http://www.dtcms.com/a/274139.html

相关文章:

  • Swift中SwiftyJSON使用详情
  • 墙裂推荐!McpStore库三行代码为Agent添加MCP能力
  • 业务建模如何让金融数字化转型 “轻” 装上
  • CentOS7环境安装包部署并配置MySQL5.7
  • 什么是proxy
  • 使用浏览器inspect调试wx小程序
  • 构建基于表单配置的 Jenkins 测试项目(接口、UI、APP、Jmeter)
  • 加速市场反馈,助力产品迭代升级​
  • 如何使用 Python 删除 Excel 中的行、列和单元格 – 详解
  • IAR携手矽力杰与普华基础软件,共推RISC-V车规芯片高安全应用落地
  • docker 启动中间件
  • Python 数据建模与分析项目实战预备 Day 2 - 数据构建与字段解析(模拟简历结构化数据)
  • 【Python练习】038. 编写一个函数,检查一个链表是否有环
  • PHY模式,slave master怎么区分
  • 力扣网编程134题:加油站(双指针)
  • Android15 无法接收到应用自身发出的广播分析解决
  • 【牛客刷题】dd爱科学1.0
  • Java 大视界 -- Java 大数据在智能医疗远程手术机器人操作数据记录与分析中的应用(342)
  • 从静到动的创作革命:Midjourney Video V1重塑AI影像叙事
  • 滑动窗口-3.无重复字符的最长子串-力扣(LeetCode)
  • 【Linux】虚拟内存的概念和布局
  • UI自动化神器:Playwright元素定位方法!
  • 新型变种木马正在伪装成Termius入侵系统
  • Kotlin 常用语法糖完整整理
  • 【springboot】IDEA手动创建SpringBoot简单工程(无插件)
  • 【零基础学AI】第37讲:提示词工程(Prompt Engineering)
  • NLP_知识图谱_大模型——个人学习记录
  • 解决MySQL虚拟删除影响唯一索引的问题
  • 《PyWin32:Python与Windows的桥梁,解锁系统自动化新姿势》
  • 从0开始学习R语言--Day44--LR检验