虚拟机恢复

在某些场景下,例如错误修改 fstab 或文件系统错误需要 fsck,虚拟机可能无法正常启动。此时,可以利用救援模式修复根文件系统(rootfs)或从系统中取回数据。

操作步骤

获取镜像地址

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

  2. 选择平台提供的 来源镜像仓库,操作系统选择 CentOS 或 Ubuntu。右侧点击 ⋮ > 更新

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

  4. 点击 取消

修改虚拟机 YAML 文件

  1. 进入 容器平台

  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 文件系统已被替换。此时可以使用挂载相关命令挂载,或使用 fsck 相关命令检查并修复原文件系统。

  2. 修复完成后,关闭虚拟机。

恢复虚拟机 YAML 文件

按照修改虚拟机 YAML 文件中的步骤,将虚拟机 YAML 文件恢复至原始状态。此时虚拟机即可正常启动。