首页 / 平台管理 / 虚拟化管理 / 虚拟机故障救援

虚拟机故障救援

虚拟机在某些场景中(错误修改 fstab、文件系统错误需要执行 fsck 等场景)无法正常启动,遇到此类问题可以通过救援模式修复 rootfs 或读取系统中数据。

操作步骤

获取镜像地址

  1. 在左侧导航栏中,单击 虚拟化管理 > 虚拟机镜像

  2. 选择平台自带的 来源镜像仓库,且 操作系统CentOS 或 Ubuntu 的虚拟机镜像,单击右侧的 > 更新

  3. 复制并保存 镜像地址,本文档以 192.168.1.1:11443/3rdparty/vmdisks/centos:7.9 为例进行介绍。

  4. 单击 取消

修改虚拟机 YAML 文件

  1. 进入 Container Platform

  2. 在左侧导航栏中,单击 虚拟化 > 虚拟机

  3. 单击需要修复的虚拟机右侧的 > 停止,将虚拟机 停止强制停止

  4. 单击虚拟机右侧的 > 更新

  5. 切换至 YAML,修改如下字段。

    • spec.template.spec.domain.devices.disks 字段中增加如下内容。其中,增加 bootOrder 可以控制虚拟机启动时的主引导磁盘,bootOrder 数值越小越优先启动。

      注意:若原 spec.template.spec.domain.devices.disks 字段下有 bootOrder: 1,需增大原来的数值,确保新增的 bootOrder 数值比原数值小。

      disks:
        - bootOrder: 1
          disk:
            bus: virtio
          name: containerdisk

      修改后的 YAML 示例:

      domain:
        devices:
          disks:
            - bootOrder: 1  #增加的字段
              disk:
                bus: virtio
              name: containerdisk
            - disk:
                bus: virtio
              name: cloudinitdisk
            - disk:      #增大原 bootOrder: 1 的数值
                bus: virtio
              name: rootfs
              bootOrder: 10
            - disk:
                bus: virtio
              name: "1"
    • spec.template.spec.volumes 字段中增加如下内容。

      注意:请使用 获取镜像地址 中获取的镜像地址替换下述 image 中的镜像地址。

      - containerDisk:
          image: 192.168.1.1:11443/3rdparty/vmdisks/centos:7.9
        name: containerdisk

      修改后的 YAML 示例:

      volumes:
        - containerDisk:  #增加的字段
            image: 192.168.1.1:11443/3rdparty/vmdisks/centos:7.9
          name: containerdisk
        - dataVolume:
            name: k2-rootfs
          name: rootfs
        - dataVolume:
            name: k2-1
          name: "1"
  6. 单击 更新

    注意:YAML 文件修改完成后,请勿切换至 表单,直接单击 更新 即可。

  7. 单击虚拟机右侧的 > 启动

挂载原有 rootfs 并进行修复

  1. 使用原密码或密钥登录虚拟机,输入 df -h / 命令,发现 rootfs 的文件系统已经替换。可以使用 mount 相关命令挂载或使用 fsck 相关命令检查和修复原文件系统。

  2. 操作完成后关闭虚拟机。

还原虚拟机 YAML 文件

按照 修改虚拟机 YAML 文件 中的步骤,将虚拟机 YAML 文件还原至未修改前的状态,至此虚拟机已可以正常启动。