很多运维场景下需要直接读写虚拟机磁盘文件,比如批量修改虚拟机配置、提取日志文件、或者做无代理备份。传统方式需要开vSphere Client连进去操作,效率很低。用vix-disklib写几行Python代码,就能实现自动化批量操作,省时省力。

1. 安装vix-disklib 8.0.3开发库,下载官方安装包选择对应操作系统版本。
2. pyvmomi(Python VMware SDK)需7.0以上版本,与vix-disklib配合使用。
3. ESXi主机需开启SSH和API访问权限,防火墙规则放行443端口。
4. 测试用虚拟机建议先在测试环境跑通,生产环境操作前务必做快照备份。
5. Linux系统需安装gcc、python3-dev等编译依赖包。
1. 连接ESXi:使用pyvmomi的SmartConnect方法,输入主机IP、用户名密码建立连接。
2. 获取虚拟机:通过搜索VM名称或路径找到目标虚拟机对象。
3. 获取磁盘信息:VMDK磁盘对应的是vm.config.hardware.device中的VirtualDisk类型设备。
4. 调用vix-disklib挂载:diskLib.Mount挂载磁盘,diskLib.Open打开VMDK文件句柄。
5. 读取数据:使用diskLib.Read读取磁盘扇区数据,解析NTFS或ext4文件系统结构。
1. 操作完成后必须调用diskLib.Unmount卸载,否则磁盘状态会处于锁定状态无法启动虚拟机。
2. 加try-finally保护,确保无论成功还是异常都能正确卸载磁盘。
3. 如果遇到磁盘被锁定报错,检查是否有其他进程持有句柄,Windows下用handle工具排查。
4. Linux下磁盘未卸载就重启主机会导致文件系统损坏,务必先执行umount。
5. 异常日志建议写入单独文件,方便排查是哪台虚拟机哪个磁盘出了问题。
1. 用config文件定义虚拟机列表:名称、磁盘路径、挂载点、操作类型。
2. 主脚本循环读取配置,对每台虚拟机执行挂载→操作→卸载的标准流程。
3. 并发控制:同时挂载太多磁盘会耗尽ESXi主机资源,建议设置最大并发数为3。
4. 日志输出到文件并打印到控制台,记录每一步的时间戳便于性能分析。
5. 脚本加入健康检查:挂载前检测目标虚拟机状态,确保是已关机或可安全操作的快照状态。
1. 错误代码12表示不支持的磁盘类型,尝试转换磁盘格式后再操作。
2. 错误代码23是权限不足,确认账户有虚拟机磁盘操作的相应权限。
3. 错误代码15是磁盘已锁定,检查是否已在其他进程中被挂载。
4. 连接超时请检查ESXi主机的443端口是否可达,防火墙是否拦截。
5. 磁盘只读报错说明VMDK的.edkSparse类型不支持写入,改用预分配的 monolithicFlat格式。
精彩推荐
用户评论