KVM主机系统盘故障处理流程

1. 适用场景

本文档适用于处理KVM、GPU主机故障恢复场景,用于统一、规范该类故障的标准化运维处理流程,保障主机恢复后业务正常运行。

2. 故障基础处理

2.1 故障判定与基础操作

  • 主机系统损坏:直接重装操作系统
  • 主机系统盘硬件损坏:更换系统盘

2.2 备用系统盘选用规则

  • 更换系统盘时,优先选用库存free主机已经设置好的系统盘;
  • 如果线上没有空闲主机,则优先在库存选择free机器对240GB SSD系统重装,并进行主机设置,完成设置后联系DC挪用设置好的系统盘用于更换。

3 处理流程

3.1 设置流程

3.1.1 对于使用的已经设置好的free主机的系统盘的处理流程

更换设置好的系统盘后,需要做以下配置:
1. 修改主机名字
2. 配置新的IP
3. 修改fstab文件挂载磁盘
(1)确保这3个挂载点下面没有任何数据:/Data1、/Data2、/BackUp,然后删除这3个目录并重新创建:rm -rf /Data1、/Data2、/BackUp和 mkdir /Data1、/Data2、/BackUp
(2)然后执行命令systemctl daemon-reload或者重启服务器
(3)修改fstab文件,使用UUID挂载
(4)使用命令测试挂载:mount -a
4. 导入VM(如果是shared VPS还需做NAT,参考下面步骤)
5. 修改后端设置
(1)修改里面tag
vi /etc/supervisor/conf.d/vps.conf
(2)移除重新拷贝
rm -f /etc/nginx/sites-enabled/vps_agent_api.conf
cp /root/vps_agent/config/vps_agent_api /etc/nginx/sites-enabled/vps_agent_api.conf
 (3)重启Nginx
(4)然后重新生成证书(ufw disable下运行)
certbot --nginx -d xxx.cloudclusters.io
 (5) 重启Nginx和supervisor
5.新建VPS备份配置文件
cd /root/vps_agent/api_server && /root/env/bin/python -c "from handlers.task_handler import KVMHandler;KVMHandler.init_backup_conf_file()" && cd -

3.1.2 对于系统重装和全新系统盘的处理流程

由于重装OS或换系统盘都是全新的系统,需要重新进行主机设置
设置步骤如下:
a. 设置主机
按照主机设置KB(How to set up a Linux VPS Hosting for DBM/CCS/HWY Panel)步骤Step: 2 3 4重新跑脚本;
如果是shared主机还需要操作Step5;
 
如果是GPU主机,用GPU设置的KB(How to set up a GPU VPS Hosting for DBM/CCS/HWY Panel);
 
备注:使用hosting_install.sh脚本进行设置时
  • 使用此脚本会格式化磁盘,请先注释格式化磁盘命令后再运行
  • 运行该脚本会下载模板,而主机模板会下载到/Data1/目录,系统盘故障不会影响到模板文件,模板也无需下载,直接注释掉模板下载命令
  (在跑后端设置脚本时可能会因为备份盘没有mount报错,在脚本最后一行代码,可以先注释掉,在mount /BackUp之后手动跑
b. 磁盘挂载
设置完后挂载磁盘,需要修改/etc/fstab文件。

3.2 后续操作

3.2.1. VPS导入

设置完成后需要把Data1和Data2的vms导入virsh,步骤如下所示:
 
步骤1:处理VPS数据,生成txt文件
 
单台VPS的导入步骤如下所示:例:需要导入VPS Name是 vps_2222
1)进入vps_2222所在的目录
2) virsh define vps_2222.xml
3) virsh start vps_2222
4) virsh list 查看导入的vms
 
由于vms数量众多建议让chat写个脚本导入,思路大概是:
复制active的vms名字保存到一个txt文档,然后用循环进Data1/2批量导入txt记录的vms然后开机
 
步骤2:批量导入脚本如下,脚本名 import_and_start_vms.sh。
#!/bin/bash

# 定义虚拟机名称列表文件
VM_LIST_FILE="vms.txt"

# 定义虚拟机的基础路径
BASE_DIRS=("/Data1/vms" "/Data2/vms")

# 检查虚拟机名称列表文件是否存在
if [[ ! -f "$VM_LIST_FILE" ]]; then
    echo "找不到虚拟机名称列表文件: $VM_LIST_FILE"
    exit 1
fi

# 循环读取虚拟机名称
while IFS= read -r VM_NAME; do
    # 构建虚拟机目录路径
    VM_DIR=""
    for BASE_DIR in "${BASE_DIRS[@]}"; do
        # 检查指定目录是否存在
        if [[ -d "$BASE_DIR/$VM_NAME" ]]; then
            VM_DIR="$BASE_DIR/$VM_NAME"
            break
        fi
    done

    # 如果没有找到虚拟机目录,输出提示信息
    if [[ -z "$VM_DIR" ]]; then
        echo "找不到虚拟机目录: $VM_NAME"
        continue
    fi

    # 构建虚拟机配置文件路径
    VM_XML="$VM_DIR/${VM_NAME}.xml"

    # 检查XML文件是否存在
    if [[ -f "$VM_XML" ]]; then
        echo "导入并启动虚拟机: $VM_NAME"
        # 进入虚拟机目录
        pushd "$VM_DIR" > /dev/null
        # 导入虚拟机
        virsh define "$VM_XML"
        # 启动虚拟机
        virsh start "$VM_NAME"
        # 返回上一级目录
        popd > /dev/null
    else
        echo "找不到虚拟机配置文件: $VM_XML"
    fi
done < "$VM_LIST_FILE"
 
步骤3: 赋予执行权限:
 
chmod +x import_and_start_vms.sh
 
步骤4:将VPS_name拷贝到vms.txt 文件中,列出了待导入的虚拟机名称。将txt文件放在与脚本同一目录
 
 
步骤5 执行脚本:
./import_and_start_vms.sh

3.2.2 备份配置文件生成

新建VPS备份的配置文件
cd /root/vps_agent/api_server && /root/env/bin/python -c "from handlers.task_handler import KVMHandler;KVMHandler.init_backup_conf_file()" && cd -

 3.2.3 Shared IP NAT映射添加

如果KVM主机配置了Shared IP,需要为使用了Shared IP的VPS添加NAT映射
 
更新/etc/ufw/before.rules文件里Shared VPS的映射关系,正常Shared IP VPS在主机里会有两条映射关系,如下图所示
替换系统盘之后不会有映射关系,会导致VPS里面有网但是不能RDP.需要做以下操作
 
a. 找Ai分析数据,可以这么告诉AI
一条这样的数据93.127.139.147:10001
192.168.122.3:1097,可以分析出以下两条信息.

-A PREROUTING -p tcp -i br0 -d 93.127.139.147 --dport 10001 -j DNAT --to-destination 192.168.122.3:1097
-A POSTROUTING -s 192.168.122.3/32 -o br0 -j 93.127.139.147

我将给你一组数据,请帮我按以上格式分析出数据.不要注释掉的内容,只要结果,所有数据一次性输出.把POSTROUTING的结果放一起,PREROUTING的结果放一起
b. 在OSS->VPS Hosting Servers->VPS List里把所有数据拷贝到Excle表里,删除所有其他数据,把Shared IP那一列的数据拷贝给AI(其他数据处理方法也可以,看自己习惯来)
AI会输出结果,如下图所示(尝试用过KIMI和Gemini分析数据,都是可以的)
c. 将AI输出的结果大概核对一下,粘贴到主机的/etc/ufw/before.rules文件, 用以下命令更新防火墙就可以了:
ufw reload
可以用以下命令检查映射关系是否存在
iptables-save | grep 93.127.132.191
如果不存在,但是我们确实已经将映射关系写在/etc/ufw/before.rules文件里了,可以用以下命令后再次检查
ufw diable
ufw enable

Add Feedback