侧边栏壁纸
博主头像
JasonLiu博主等级

Hi~ I'm Jason, Welcome

  • 累计撰写 25 篇文章
  • 累计创建 20 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录
IT

PVE 虚拟机转 ESXI

JasonLiu
2025-02-16 / 0 评论 / 0 点赞 / 47 阅读 / 1,687 字

以下是将 Proxmox VE (PVE) 的 .vma.zst 备份文件导入到 ESXi 的详细步骤:


步骤 1:准备工具和环境

  1. 安装必要工具(在 Linux 环境中操作,如 PVE 宿主机或 Ubuntu 临时系统):

    sudo apt update
    sudo apt install zstd qemu-utils -y  # 安装 zstd 解压工具和 qemu-img 转换工具
    
  2. 获取备份文件
    确保你的 .vma.zst 备份文件位于可操作的目录中(如 /backup/vm-backup.vma.zst)。


步骤 2:解压并提取磁盘映像

  1. 解压 .vma.zst 文件

    zstd -d /backup/vm-backup.vma.zst -o /backup/vm-backup.vma
    
  2. 提取 RAW 磁盘映像
    使用 vma 工具提取备份内容(PVE 默认安装此工具):

    vma extract /backup/vm-backup.vma /backup/extracted
    
    • 提取后的文件通常是 drive-*.raw(如 drive-scsi0.raw)。

步骤 3:转换 RAW 格式为 VMDK 格式

  1. 使用 qemu-img 转换磁盘格式
    qemu-img convert -f raw -O vmdk /backup/extracted/drive-scsi0.raw /backup/vm-disk.vmdk
    
    • 添加 -o subformat=thick 生成厚置备磁盘(可选,但建议兼容性):
      qemu-img convert -f raw -O vmdk -o subformat=thick /backup/extracted/drive-scsi0.raw /backup/vm-disk.vmdk
      

步骤 4:上传 VMDK 到 ESXi 存储

  1. 启用 ESXi 的 SSH 服务

    • 登录 ESXi 网页端 → 主机 → 操作 → 服务 → 启用 SSH。
  2. 上传 VMDK 文件到 ESXi 数据存储

    scp /backup/vm-disk.vmdk root@esxi-host:/vmfs/volumes/datastore1/vm-folder/
    
    • 替换 esxi-host 为 ESXi 的 IP 或域名。
    • 替换 datastore1vm-folder 为目标存储路径。

步骤 5:在 ESXi 中创建虚拟机

  1. 新建虚拟机

    • 登录 ESXi 或 vSphere Client → 创建新虚拟机 → 自定义配置:
      • 选择与原始虚拟机相同的操作系统类型和版本。
      • 分配 CPU、内存等资源(与原机一致)。
      • 删除默认创建的虚拟磁盘(后续挂载现有 VMDK)。
  2. 挂载转换后的 VMDK

    • 编辑虚拟机设置 → 添加硬盘 → 选择现有磁盘 → 浏览上传的 vm-disk.vmdk
  3. 调整虚拟硬件兼容性(如有必要):

    • 检查 SCSI 控制器类型(如 LSI Logic 或 VMware Paravirtual)。
    • 确保网卡类型和启动模式(BIOS/UEFI)与原机一致。

步骤 6:启动并验证

  1. 启动虚拟机

    • 打开电源 → 观察控制台是否正常进入系统。
  2. 故障排查

    • 文件系统错误
      若系统无法启动,可能需要挂载磁盘到临时 Linux 系统修复:
      fsck /dev/sdX  # 替换为实际磁盘标识
      
    • 驱动兼容性
      如原机使用 VirtIO 驱动,需在 ESXi 中改用 VMware 兼容控制器(如 LSI Logic SAS)。

注意事项

  • 网络配置:ESXi 的虚拟网络名称可能与 PVE 不同,需在虚拟机设置中重新指定。
  • 性能优化:转换后建议安装 VMware Tools 提升性能。
  • 备份验证:建议在导入前测试转换后的 VMDK 能否正常挂载。

通过以上步骤,你可以将 PVE 的备份成功迁移到 ESXi 环境。如果遇到具体报错,可根据日志进一步调整硬件兼容性或文件系统。

以下是一个 Bash 脚本,用于将 /mnt/pve/dsm_nfs/dump/ 目录下的所有 .vma.zst 文件转换为 .vmdk 文件,并将转换后的文件保存到 /mnt/pve/dsm_nfs/to_esxi/ 目录下的对应文件夹中。


脚本内容

#!/bin/bash

# 定义源目录和目标目录
SOURCE_DIR="/mnt/pve/dsm_nfs/dump"
TARGET_DIR="/mnt/pve/dsm_nfs/to_esxi"

# 检查目标目录是否存在,不存在则创建
mkdir -p "$TARGET_DIR"

# 遍历源目录中的所有 .vma.zst 文件
for vma_file in "$SOURCE_DIR"/*.vma.zst; do
    # 获取文件名(不含路径和扩展名)
    base_name=$(basename "$vma_file" .vma.zst)

    # 创建目标子目录
    output_dir="$TARGET_DIR/$base_name"
    mkdir -p "$output_dir"

    # 解压 .vma.zst 文件
    echo "解压文件: $vma_file"
    zstd -d "$vma_file" -o "$output_dir/$base_name.vma"

    # 提取 RAW 磁盘映像
    echo "提取 RAW 磁盘映像: $output_dir/$base_name.vma"
    vma extract "$output_dir/$base_name.vma" "$output_dir"

    # 查找提取的 RAW 文件
    raw_file=$(find "$output_dir" -name "drive-*.raw" | head -n 1)
    if [[ -z "$raw_file" ]]; then
        echo "未找到 RAW 文件,跳过: $base_name"
        continue
    fi

    # 转换 RAW 为 VMDK
    vmdk_file="$output_dir/$base_name.vmdk"
    echo "转换 RAW 为 VMDK: $raw_file -> $vmdk_file"
    qemu-img convert -f raw -O vmdk -o subformat=thick "$raw_file" "$vmdk_file"

    # 清理中间文件(可选)
    echo "清理中间文件: $output_dir/$base_name.vma 和 $raw_file"
    rm -f "$output_dir/$base_name.vma" "$raw_file"

    echo "转换完成: $vma_file -> $vmdk_file"
    echo "----------------------------------------"
done

echo "所有文件转换完成!"

脚本说明

  1. 源目录和目标目录

    • 源目录:/mnt/pve/dsm_nfs/dump/,存放 .vma.zst 文件。
    • 目标目录:/mnt/pve/dsm_nfs/to_esxi/,每个 .vma.zst 文件会生成一个同名子目录,存放转换后的 .vmdk 文件。
  2. 步骤

    • 遍历所有 .vma.zst 文件。
    • 解压 .vma.zst 文件为 .vma 文件。
    • 使用 vma extract 提取 .vma 文件中的 RAW 磁盘映像。
    • 使用 qemu-img 将 RAW 文件转换为 VMDK 文件。
    • 清理中间文件(解压的 .vma 和提取的 .raw 文件)。
  3. 清理中间文件

    • 脚本默认会清理中间文件以节省空间。如果希望保留这些文件,可以注释掉 rm -f 行。

使用方法

  1. 将脚本保存为 convert_vma_to_vmdk.sh
  2. 赋予脚本执行权限:
    chmod +x convert_vma_to_vmdk.sh
    
  3. 运行脚本:
    ./convert_vma_to_vmdk.sh
    

示例

假设源目录 /mnt/pve/dsm_nfs/dump/ 下有以下文件:

vm1.vma.zst
vm2.vma.zst

运行脚本后,目标目录 /mnt/pve/dsm_nfs/to_esxi/ 会生成以下结构:

to_esxi/
├── vm1/
│   └── vm1.vmdk
├── vm2/
│   └── vm2.vmdk

注意事项

  1. 依赖工具

    • 确保系统已安装 zstdvmaqemu-img 工具。
    • 如果 vma 工具未安装,可以从 PVE 宿主机复制或安装 Proxmox 相关工具包。
  2. 磁盘兼容性

    • 转换后的 VMDK 文件可能需要调整虚拟硬件配置(如 SCSI 控制器类型)以适配 ESXi。
  3. 性能优化

    • 如果转换大量文件,建议在性能较好的机器上运行脚本。

希望这个脚本能满足你的需求!如果有其他问题,请随时告诉我。

0

评论区