首页
关于
Search
1
我们的邀请函
5 阅读
2
结婚物品事项清单
3 阅读
3
杭州 露营 🏕
3 阅读
4
PVE 虚拟机转 ESXI
3 阅读
5
轻量级.Net Core服务注册工具CodeDi发布啦
2 阅读
默认分类
小白入门
开源项目
深度技术
技术弄潮
数据库
事故总结
万物互联
旅行
户外
notes
生活瞬间
小工具
IT
PMP
登录
Search
标签搜索
欧洲
生活瞬间
航拍
摄影
旅游
自驾
telegram
tdl
申根
防盗
装修
pve
esxi
PMP
Jason Liu
累计撰写
26
篇文章
累计收到
1
条评论
首页
栏目
默认分类
小白入门
开源项目
深度技术
技术弄潮
数据库
事故总结
万物互联
旅行
户外
notes
生活瞬间
小工具
IT
PMP
页面
关于
搜索到
2
篇与
的结果
2025-04-27
SR-IOV VF 信息查看工具
SR-IOV VF 信息查看工具背景介绍在虚拟化环境中,SR-IOV (Single Root I/O Virtualization) 技术允许将单个物理网卡(PF,Physical Function)虚拟化为多个虚拟网卡(VF,Virtual Function)。这种技术可以显著提高虚拟机的网络性能,减少 CPU 开销,是高性能虚拟化网络的重要技术。问题描述在管理 SR-IOV 环境时,管理员经常需要了解: 哪些物理网卡支持 SR-IOV 每个物理网卡创建了多少个虚拟网卡 虚拟网卡和物理网卡的对应关系 每个虚拟网卡的 PCI 地址 虽然可以通过手动查看 /sys/class/net/ 和 /sys/bus/pci/devices/ 目录来获取这些信息,但这种方式: 操作繁琐 信息分散 需要手动关联 VF 和 PF 的关系 输出格式不直观 解决方案show_vf.sh 脚本通过自动化方式解决了上述问题: 自动化信息收集: 自动扫描系统中的所有网卡 识别支持 SR-IOV 的物理网卡 收集所有 VF 的信息 建立 VF 和 PF 的对应关系 格式化输出: 使用表格形式展示信息 对齐的列宽确保输出整洁 清晰的表头便于理解 包含所有关键信息(VF 名称、PCI 地址、PF 名称、PF PCI 地址) 使用场景: 快速查看 SR-IOV 配置 验证 VF 分配情况 排查 VF 相关问题 系统维护和监控 脚本内容#!/bin/bash # 定义列宽 VF_NAME_WIDTH=15 VF_PCI_WIDTH=15 PF_NAME_WIDTH=15 PF_PCI_WIDTH=15 # 打印表头 printf "%-${VF_NAME_WIDTH}s %-${VF_PCI_WIDTH}s %-${PF_NAME_WIDTH}s %-${PF_PCI_WIDTH}s\n" \ "VF_NAME" "VF_PCI_ADDRESS" "PF_NAME" "PF_PCI_ADDRESS" printf "%-${VF_NAME_WIDTH}s %-${VF_PCI_WIDTH}s %-${PF_NAME_WIDTH}s %-${PF_PCI_WIDTH}s\n" \ "--------" "--------------" "--------" "--------------" # 遍历所有网卡 for netdev in /sys/class/net/*; do netdev_name=$(basename "$netdev") device_path="$netdev/device" # 检查是否是 PF(有 virtfn 目录) if [ -d "$device_path/virtfn0" ]; then # 这是 PF,获取其 PCI 地址 pf_pci=$(basename $(readlink -f "$device_path")) # 遍历所有 VF for virtfn in $device_path/virtfn*; do if [ -L "$virtfn" ]; then # 获取 VF 的 PCI 地址 vf_pci=$(basename $(readlink -f "$virtfn")) # 查找对应的 VF 网卡名 vf_netdev="N/A" for vf_net in /sys/class/net/*; do vf_net_name=$(basename "$vf_net") if [ -L "$vf_net/device" ] && [ "$(basename $(readlink -f "$vf_net/device"))" = "$vf_pci" ]; then vf_netdev=$vf_net_name break fi done # 输出对齐的 VF 和 PF 的信息 printf "%-${VF_NAME_WIDTH}s %-${VF_PCI_WIDTH}s %-${PF_NAME_WIDTH}s %-${PF_PCI_WIDTH}s\n" \ "$vf_netdev" "$vf_pci" "$netdev_name" "$pf_pci" fi done fi done 使用方法 创建脚本文件: vim show_vf.sh 将上述脚本内容复制到文件中 赋予执行权限: chmod +x show_vf.sh 运行脚本: ./show_vf.sh
2025年04月27日
2 阅读
0 评论
0 点赞
2025-02-16
PVE 虚拟机转 ESXI
以下是将 Proxmox VE (PVE) 的 .vma.zst 备份文件导入到 ESXi 的详细步骤:步骤 1:准备工具和环境 安装必要工具(在 Linux 环境中操作,如 PVE 宿主机或 Ubuntu 临时系统):sudo apt update sudo apt install zstd qemu-utils -y # 安装 zstd 解压工具和 qemu-img 转换工具 获取备份文件:确保你的 .vma.zst 备份文件位于可操作的目录中(如 /backup/vm-backup.vma.zst)。 步骤 2:解压并提取磁盘映像 解压 .vma.zst 文件:zstd -d /backup/vm-backup.vma.zst -o /backup/vm-backup.vma 提取 RAW 磁盘映像:使用 vma 工具提取备份内容(PVE 默认安装此工具):vma extract /backup/vm-backup.vma /backup/extracted 提取后的文件通常是 drive-*.raw(如 drive-scsi0.raw)。 步骤 3:转换 RAW 格式为 VMDK 格式 使用 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 存储 启用 ESXi 的 SSH 服务: 登录 ESXi 网页端 → 主机 → 操作 → 服务 → 启用 SSH。 上传 VMDK 文件到 ESXi 数据存储:scp /backup/vm-disk.vmdk root@esxi-host:/vmfs/volumes/datastore1/vm-folder/ 替换 esxi-host 为 ESXi 的 IP 或域名。 替换 datastore1 和 vm-folder 为目标存储路径。 步骤 5:在 ESXi 中创建虚拟机 新建虚拟机: 登录 ESXi 或 vSphere Client → 创建新虚拟机 → 自定义配置: 选择与原始虚拟机相同的操作系统类型和版本。 分配 CPU、内存等资源(与原机一致)。 删除默认创建的虚拟磁盘(后续挂载现有 VMDK)。 挂载转换后的 VMDK: 编辑虚拟机设置 → 添加硬盘 → 选择现有磁盘 → 浏览上传的 vm-disk.vmdk。 调整虚拟硬件兼容性(如有必要): 检查 SCSI 控制器类型(如 LSI Logic 或 VMware Paravirtual)。 确保网卡类型和启动模式(BIOS/UEFI)与原机一致。 步骤 6:启动并验证 启动虚拟机: 打开电源 → 观察控制台是否正常进入系统。 故障排查: 文件系统错误:若系统无法启动,可能需要挂载磁盘到临时 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 "所有文件转换完成!" 脚本说明 源目录和目标目录: 源目录:/mnt/pve/dsm_nfs/dump/,存放 .vma.zst 文件。 目标目录:/mnt/pve/dsm_nfs/to_esxi/,每个 .vma.zst 文件会生成一个同名子目录,存放转换后的 .vmdk 文件。 步骤: 遍历所有 .vma.zst 文件。 解压 .vma.zst 文件为 .vma 文件。 使用 vma extract 提取 .vma 文件中的 RAW 磁盘映像。 使用 qemu-img 将 RAW 文件转换为 VMDK 文件。 清理中间文件(解压的 .vma 和提取的 .raw 文件)。 清理中间文件: 脚本默认会清理中间文件以节省空间。如果希望保留这些文件,可以注释掉 rm -f 行。 使用方法 将脚本保存为 convert_vma_to_vmdk.sh。 赋予脚本执行权限:chmod +x convert_vma_to_vmdk.sh 运行脚本:./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 注意事项 依赖工具: 确保系统已安装 zstd、vma 和 qemu-img 工具。 如果 vma 工具未安装,可以从 PVE 宿主机复制或安装 Proxmox 相关工具包。 磁盘兼容性: 转换后的 VMDK 文件可能需要调整虚拟硬件配置(如 SCSI 控制器类型)以适配 ESXi。 性能优化: 如果转换大量文件,建议在性能较好的机器上运行脚本。 希望这个脚本能满足你的需求!如果有其他问题,请随时告诉我。
2025年02月16日
3 阅读
0 评论
0 点赞