别慌,这是因为 pmxcfs(Proxmox 集群文件系统)的锁文件或残留进程还在占用资源,导致新进程无法获取控制权。既然 Web 界面和配置都卡死了,我们需要用“暴力”手段彻底清场。

请按顺序执行以下命令,这会强行解锁并恢复本地访问:

1. 彻底清除残留进程

首先,我们要确保没有任何 PVE 相关的进程在后台捣乱。

Bash

# 强杀所有 PVE 核心进程
killall -9 pmxcfs pveproxy pvedaemon pvestatd pve-cluster corosync

2. 强行卸载挂载点

pmxcfs 将 /etc/pve 作为一个虚拟文件系统挂载。如果之前的进程崩了,挂载点可能处于“僵尸状态”。

Bash

# 强制且延迟卸载
umount -l /etc/pve

如果提示 not mounted,说明已经卸载,可以继续。

3. 清理数据库锁文件

PVE 使用 SQLite 存储配置,有时候 WAL 日志或共享内存文件会导致锁定错误。

Bash

# 清理可能导致锁定的临时数据库文件
rm -f /var/lib/pve-cluster/config.db-shm /var/lib/pve-cluster/config.db-wal

4. 再次尝试本地模式启动

现在系统应该是完全干净的了,再次运行:

Bash

pmxcfs -l

观察结果:

  • 如果成功: 它会停在这个界面,不再报错。请保持这个窗口不要关闭。
  • 如果依然报错: 请查看是否有其他错误提示(如 database disk image is malformed),如果有,请告诉我。

5. 恢复你的配置文件(在新窗口操作)

如果上面的 pmxcfs -l 跑起来了,请另外开一个 SSH 窗口登录 lax3,然后执行你之前的操作:

Bash

# 创建目录(如果提示已存在也没关系)
mkdir -p /etc/pve/lxc

# 恢复你的备份
cp /root/lxc-admin/100.conf /etc/pve/lxc/

# 检查一下是否成功出现在列表里
ls -l /etc/pve/lxc/

为什么会出现“彻底停止响应”?

因为 PVE 的几乎所有操作(包括登录、查看状态、启动虚拟机)都依赖于读写 /etc/pve。一旦这个目录因为集群同步失败而进入“锁定”或“退出”状态,整个系统就会像失去了硬盘一样,完全无法响应任何指令。

现在重新执行 pmxcfs -l 还会报 unable to acquire lock 吗? 如果成功了,你的 Web 界面应该很快就能恢复登录(可能需要运行 systemctl start pveproxy)。


另一个清理过程

# 1. 停止所有相关服务
systemctl stop pve-cluster corosync pvedaemon pveproxy pvestatd

# 2. 确保没有任何 pmxcfs 进程潜伏
killall -9 pmxcfs

# 3. 强制卸载挂载点(防止残留挂载导致无法写入新数据)
umount -l /etc/pve

# 4. 【关键:从零开始】移动(备份)现有的本地数据库
# PVE 的所有配置(节点名、集群信息、存储定义)都在这个 config.db 里
mv /var/lib/pve-cluster/config.db /var/lib/pve-cluster/config.db.old

# 5. 清理 Corosync 遗留
rm -rf /etc/corosync/*
rm -rf /var/lib/corosync/*

# 6. 重新启动服务
# 系统发现没有 config.db,会根据当前的 hostname 自动创建一个全新的、空白的本地配置
systemctl start pve-cluster
systemctl start pvedaemon pveproxy

查看状态

systemctl status pve-cluster pvedaemon pveproxy