跳转到内容

时区、NTP、主机名与 /etc/hosts ​

时间和主机名看着是装系统时随手填的小事,但 PVE 的集群文件系统(pmxcfs)、证书、日志排查全都依赖它们从一开始就是对的。这篇讲清楚怎么检查时间同步是否正常,以及主机名和 /etc/hosts 的要求,还有——更重要的是——为什么装完之后应该尽量不去动它们。

装完之后改主机名或 IP,风险比想象中大

影响范围:PVE 用一个叫 pmxcfs 的集群文件系统挂载在 /etc/pve,每个节点在里面都有一个以主机名命名的目录。改主机名如果不同步处理这个目录,Web UI 会找不到虚拟机配置;如果这台机器已经加入了集群,官方文档明确说集群建好之后不支持再改主机名或 IP。

前置条件:任何时候要动 /etc/hosts、/etc/hostname 或管理 IP 之前,先确认这台机器是否已经加入集群(pvecm status,如果提示找不到 corosync.conf 就是独立节点,相对安全)。动手前备份 /etc/pve 和 /etc/hosts。

怎么回退:改坏了先把 /etc/hosts、/etc/hostname 恢复成备份内容,重启 pve-cluster 服务(systemctl restart pve-cluster)。已加入集群的节点如果改名后集群通信异常,最稳妥的做法是把它从集群里移除、改完名字、再重新加入——而不是在线修 corosync.conf。见组建集群(规划中)里关于节点身份的说明。最好的做法是从一开始就用最终的主机名和 IP 装机,参照安装过程逐屏讲解里的第五屏。

开始之前 ​

操作步骤 ​

检查并校准时间同步 ​

宿主机 shell:

sh
timedatectl status

确认三件事:Time zone 是你所在的时区、System clock synchronized: yes、NTP service: active。

时区不对就改:

sh
timedatectl set-timezone Asia/Shanghai

PVE 从版本 7 起默认用 chrony 做时间同步(早期版本是 systemd-timesyncd)。确认服务状态:

sh
systemctl status chrony
chronyc sources
chronyc tracking

chronyc sources 能看到当前用的时间服务器列表和状态;输出里 ^* 开头的那一行是当前选中的参考源。

Web UI 只能改时区,改不了时间服务器

节点 → System → Time 能看当前时间和改时区,但改 NTP 服务器要去命令行。PVE 官方文档说这部分用的是标准的 Debian 时间同步机制,PVE 本身不额外接管。

如果内网访问不了公共时间服务器(比如隔离网络),需要指定内网的时间服务器。推荐新建一个文件而不是直接改 chrony.conf,方便以后追踪改动:

sh
cat > /etc/chrony/sources.d/internal.sources << 'EOF'
server <你的内网 NTP 服务器> iburst
EOF
systemctl restart chrony

虚拟机和容器的时间怎么来

LXC 容器共享宿主机的系统时间,不需要单独配置。KVM 虚拟机在启动时会从宿主机同步一次时钟,之后就要靠客户机自己的 NTP 客户端维持同步——装了 QEMU Guest Agent 不代表时间会自动一直同步,这是两回事。

检查并理解主机名与 /etc/hosts ​

PVE 要求主机名(尤其是 FQDN)能解析到一个真实、可达的 IP 地址,而不是 127.0.0.1 或 127.0.1.1 这类回环地址。用安装过程逐屏讲解里 ISO 安装器装的机器,这一步已经自动配好;用在 Debian 13 上安装 Proxmox VE的路径需要手动确认。

验证方法(宿主机 shell):

sh
hostname --ip-address
hostname -f

前者应该输出至少一个非回环地址,后者应该输出完整的 FQDN(例如 pve1.home.lan)。

一个正确的 /etc/hosts 示例(假设主机名 pve1,IP 192.168.1.10):

text
127.0.0.1       localhost
192.168.1.10    pve1.home.lan pve1

官方现在建议把主机名直接映射到真实 IP

早期一些教程会建议保留 127.0.1.1 <主机名> 这种写法(沿用 Debian 桌面版的习惯)。但对 PVE 来说,官方 Wiki 现在的建议是让主机名直接解析到节点的管理 IP,这样从其他节点或客户端通过主机名访问也是通的,行为更符合预期,也不容易引发歧义。

检查结果 ​

sh
# 1. 时间同步状态正常
timedatectl status

# 2. chrony 有可用的时间源
chronyc tracking

# 3. 主机名解析到真实 IP,而不是 127.0.0.1
hostname --ip-address

# 4. FQDN 正确
hostname -f

# 5. pmxcfs 正常挂载,说明主机名/网络配置目前是一致的
systemctl status pve-cluster

五项都正常,说明这台机器的时间和主机名基础是稳的,可以放心往下配置存储、网络和虚拟机。

常见问题 ​

Web UI 或 pvesh 报 ipcc_send_rec[1] failed: Connection refused。 几乎总是主机名解析出了问题,回头检查 /etc/hosts 和 /etc/hostname 是否一致。

日志时间戳和实际时间对不上。 先查时区是不是设错了(timedatectl status),再查 chronyc tracking 里的 System time 偏移量是否在合理范围内(正常应该是毫秒级)。

已经加入集群,但发现装的时候主机名填错了,能改吗? 官方不建议这么做。稳妥的路径是从集群里移除这个节点、改好主机名、再重新加入,而不是直接改 corosync.conf。

参考资料 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。