CentOS VNC 备份与恢复
一、备份清单与命令
#!/usr/bin/env bash
set -e
USER=root
DISPLAY=:1
BAK_DIR="/root/vnc_backup_$(date +%F_%H-%M-%S)"
mkdir -p "$BAK_DIR"
# 1) systemd 服务单元
cp -a /lib/systemd/system/vncserver@.service "/etc/systemd/system/vncserver@${DISPLAY}.service" 2>/dev/null || true
cp -a "/etc/systemd/system/vncserver@${DISPLAY}.service" "$BAK_DIR/"
# 2) VNC 密码文件(存在才备份)
[ -f "$HOME/.vnc/passwd" ] && cp -a "$HOME/.vnc/passwd" "$BAK_DIR/"
# 3) 会话目录(含日志、pid 等)
[ -d "$HOME/.vnc" ] && cp -a "$HOME/.vnc" "$BAK_DIR/"
# 4) 桌面启动脚本
[ -f "$HOME/.vnc/xstartup" ] && cp -a "$HOME/.vnc/xstartup" "$BAK_DIR/"
# 5) 防火墙规则导出(firewalld)
if command -v firewall-cmd >/dev/null 2>&1; then
firewall-cmd --list-all > "$BAK_DIR/firewalld-rules.txt"
fi
# 6) SELinux 布尔值快照(若使用 SELinux)
if command -v getsebool >/dev/null 2>&1; then
getsebool -a > "$BAK_DIR/selinux-booleans.txt"
fi
# 7) 当前监听端口快照
ss -lntp | grep -E '590[0-9]' > "$BAK_DIR/vnc_ports.txt" || true
echo "VNC 备份完成:$BAK_DIR"
二、恢复步骤与命令
#!/usr/bin/env bash
set -e
USER=root
DISPLAY=:1
BAK_DIR="/root/vnc_backup_2025-12-25_10-00-00" # 替换为你的备份目录
# 0) 如已有会话,先停止
su - "$USER" -c "vncserver -kill $DISPLAY" >/dev/null 2>&1 || true
# 1) 恢复 systemd 服务单元
cp -a "$BAK_DIR/vncserver@${DISPLAY}.service" "/etc/systemd/system/"
# 2) 恢复 VNC 密码与会话目录
[ -f "$BAK_DIR/passwd" ] && cp -a "$BAK_DIR/passwd" "$HOME/.vnc/passwd"
[ -d "$BAK_DIR/.vnc" ] && rsync -a "$BAK_DIR/.vnc/" "$HOME/.vnc/"
# 3) 恢复 xstartup(若存在)
[ -f "$BAK_DIR/xstartup" ] && cp -a "$BAK_DIR/xstartup" "$HOME/.vnc/xstartup"
# 4) 若备份了 firewalld 规则,按需恢复(示例为开放 5901/tcp)
# firewall-cmd --permanent --add-port=5901/tcp
# firewall-cmd --reload
# 5) 重载 systemd 并启动
systemctl daemon-reload
systemctl enable "vncserver@${DISPLAY}.service"
systemctl start "vncserver@${DISPLAY}.service"
echo "VNC 恢复完成,实例:$DISPLAY"
三、端口与防火墙要点
firewall-cmd --permanent --add-port=5901/tcp
firewall-cmd --reload
四、常见问题与验证
systemctl status "vncserver@:1.service"
ss -lntp | grep -E '590[0-9]'
vncserver -kill :1
rm -f /tmp/.X11-unix/X1
journalctl -u "vncserver@:1.service" -xe