由于前期安装的时随便起的 Proxmox VE 节点主机名,现在想要修改为更有意义的名字便于多集群管理。
没有虚拟机的情况下修改主机名不影响虚拟机数据
PVE 节点主机名修改记录
**最终结果:✅ 节点名由 pve 变更为 106-56-70-89-pve-master1,所有服务正常。 **过程分两次改名:先 pve → pve-master1(含拆集群),再 pve-master1 → 106-56-70-89-pve-master1。
1. 环境信息
| 项目 |
值 |
| IP |
106.56.70.89 |
| 登录 |
root(SSH 端口 22) |
| 原主机名 |
pve |
| 最终主机名 |
106-56-70-89-pve-master1(FQDN…-master1.local) |
| PVE 版本 |
pve-manager/9.2.2(kernel 7.0.2-6-pve) |
| 虚拟机/容器 |
无 |
| 原集群状态 |
单节点集群jiqun(corosync knet)→ 已拆为独立节点 |
| 存储 |
local、local-lvm、data1(全局配置,不受节点名影响) |
2. 关键背景(为什么不能只改那 3 个文件)
网上常见的”改 /etc/hosts、/etc/hostname、/etc/postfix/main.cf“只适用于普通 Linux 主机,对 PVE 不完整:
- PVE 的节点名固化在集群配置里。本机已配置为单节点集群,集群节点名不允许直接修改,必须先拆集群转独立。
- 主机名合法性:只能含字母、数字、连字符
-,不能含 .(会被当域名分隔符)和 _(非法字符)。因此最初设想的 106.56.70.89-pve_master1 不合法,最终采用连字符写法 106-56-70-89-pve-master1。
正确流程:拆集群转独立 → 改主机名 → 重启 pve-cluster → 重新生成节点证书/目录 → 迁移配置 → 清理旧目录 → 重启服务。
3. 第一次改名:pve → pve-master1
3.1 备份(可回滚)
1 2 3 4 5 6
| mkdir -p /root/pve-rename-backup cp -a /etc/hostname /etc/hosts /etc/postfix/main.cf /root/pve-rename-backup/ cp -a /etc/pve/corosync.conf /root/pve-rename-backup/ 2>/dev/null cp -a /etc/corosync/corosync.conf /root/pve-rename-backup/ cp -a /etc/pve/.members /etc/pve/storage.cfg /root/pve-rename-backup/ 2>/dev/null cp -a /etc/pve/nodes/pve /root/pve-rename-backup/nodes-pve
|
3.2 拆集群,转独立(standalone)节点
1 2 3 4 5 6 7 8 9
| systemctl stop pve-cluster systemctl stop corosync nohup pmxcfs -l >/var/log/pmxcfs-local.log 2>&1 & # 本地模式挂载 /etc/pve sleep 3 rm -f /etc/pve/corosync.conf # 删除 pmxcfs 里的集群配置 rm -f /etc/corosync/corosync.conf /etc/corosync/authkey killall pmxcfs # 停掉手动启动的 pmxcfs sleep 2 systemctl start pve-cluster # 无 corosync.conf 时以独立模式启动
|
验证:pvecm status 应报错 Corosync config does not exist(即非集群状态)。
3.3 修改主机名
1 2 3
| hostnamectl set-hostname pve-master1 sed -i "s/^106\.56\.70\.89 .*/106.56.70.89 pve-master1.local pve-master1/" /etc/hosts sed -i "s/^myhostname=.*/myhostname = pve-master1.local/" /etc/postfix/main.cf
|
3.4 重启 pve-cluster,生成新节点目录
1 2 3
| systemctl restart pve-cluster # 等待 10~15 秒(pmxcfs daemonize + 重放 WAL 较慢,勿过早查询) pvecm updatecerts --force # 重新生成节点证书 + 创建 /etc/pve/nodes/pve-master1/
|
3.5 迁移节点描述并清理旧节点
1 2
| echo "#236-test-pve" > /etc/pve/nodes/pve-master1/config # 迁移节点描述 rm -rf /etc/pve/nodes/pve # 删除旧节点目录
|
3.6 重启 PVE 服务栈
1
| systemctl restart pvedaemon pveproxy pvestatd postfix
|
4. 第二次改名:pve-master1 → 106-56-70-89-pve-master1
此时集群已拆、节点为独立模式,改名流程大幅简化(无需再拆集群)。
4.1 备份当前状态
1 2 3
| mkdir -p /root/pve-rename-backup-stage2 cp -a /etc/hostname /etc/hosts /etc/postfix/main.cf /root/pve-rename-backup-stage2/ cp -a /etc/pve/nodes/pve-master1 /root/pve-rename-backup-stage2/nodes-pve-master1
|
4.2 修改主机名
1 2 3
| hostnamectl set-hostname 106-56-70-89-pve-master1 sed -i "s/^106\.56\.70\.89 .*/106.56.70.89 106-56-70-89-pve-master1.local 106-56-70-89-pve-master1/" /etc/hosts sed -i "s/^myhostname.*/myhostname = 106-56-70-89-pve-master1.local/" /etc/postfix/main.cf
|
**⚠️ **sed 匹配 myhostname 时用 ^myhostname.*(不限定等号前后空格),否则遇到 myhostname = xxx(等号带空格,第一次 sed 造成的)会匹配不到。
4.3 重启 pve-cluster,生成新节点目录
1 2 3
| systemctl restart pve-cluster sleep 15 # 等待 pmxcfs 完全启动 pvecm updatecerts --force # 生成 /etc/pve/nodes/106-56-70-89-pve-master1/
|
4.4 迁移节点描述并清理旧节点
1 2
| echo "#236-test-pve" > /etc/pve/nodes/106-56-70-89-pve-master1/config rm -rf /etc/pve/nodes/pve-master1
|
4.5 重启 PVE 服务栈
1
| systemctl restart pvedaemon pveproxy pvestatd postfix
|
5. 验证结果
1 2 3 4 5 6
| hostname # -> 106-56-70-89-pve-master1 hostname -f # -> 106-56-70-89-pve-master1.local ls /etc/pve/nodes/ # -> 只剩 106-56-70-89-pve-master1 systemctl is-active pve-cluster pvedaemon pveproxy pvestatd postfix # 全部 active cat /etc/pve/storage.cfg # local / local-lvm / data1 完好 curl -sk https://localhost:8006/ # Web 登录页正常返回 HTML
|
6. 遇到的问题与排查
| 问题 |
原因 |
解决 |
pmxcfs反复显示 inactive、/etc/pve未挂载 |
pmxcfs 启动(daemonize + 重放 WAL)需数秒,查询时机过早 |
等 10~15 秒后再查,用systemctl status确认 |
unable to acquire pmxcfs lock - trying again |
多次手动前台运行pmxcfs产生孤儿 daemon 进程持有锁,干扰 systemd |
pkill -9 pmxcfs清干净孤儿进程,改用systemctl start pve-cluster |
$(systemctl is-active ...)返回inactive假象 |
SSH 远程命令中的$(...)命令替换被本地 shell 提前展开 |
远程命令中避免使用$(...)/ shell 变量,用纯命令 |
sed改 postfix 不生效 |
第一次 sed 后myhostname = xxx带空格,第二次^myhostname=(无空格)匹配不到 |
用^myhostname.*匹配整行 |
7. 回滚方法(如需要)
1 2 3 4 5 6 7 8 9
| # 恢复主机名与 hosts hostnamectl set-hostname pve cp -a /root/pve-rename-backup/hosts /etc/hosts cp -a /root/pve-rename-backup/hostname /etc/hostname cp -a /root/pve-rename-backup/main.cf /etc/postfix/main.cf
# 恢复集群配置(如需回到单节点集群) cp -a /root/pve-rename-backup/corosync.conf /etc/corosync/corosync.conf systemctl restart pve-cluster
|
8. 注意事项
- 主机名规范:PVE 节点名只能含字母、数字、连字符
-,不能用 .(分隔 FQDN)和 _;以数字开头合法,但建议避免与 IP 混淆。
- 集群节点改名:PVE 规定节点加入集群后不能直接改节点名。单节点集群需先拆为独立节点再改;多节点集群改名需先从集群删除节点。
- 本机现为独立节点(非集群)。若将来要加节点做 HA 高可用集群,需要重新
pvecm create 创建集群。
- 敏感信息:本文档不含 SSH 密码,操作时请使用实际凭据。