You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Bash脚本通过QEMU安装Windows虚拟机提示文件不存在

问题根因

报错由三个问题共同导致:

  • 路径配置错误:实际镜像、虚拟磁盘文件都存放在~/Desktop/lunaLand/vm目录下,但脚本里写的路径是~/vm,指向家目录下独立的vm文件夹,和实际存储位置不匹配。
  • 波浪号~未被正确展开:Shell只会对出现在参数开头的独立~做家目录路径替换,写在file=~/xxx这类赋值后缀位置的~不会被Shell解析,会作为普通字符串直接传给qemu;qemu本身不识别~的家目录指代含义,会直接把~当作目录名查找文件,无法匹配到真实路径。
  • 配置冗余冲突:原脚本写了两次-net user参数,后一个配置会覆盖前一个,导致前面的网络配置不生效。
修复方案
  1. 统一把脚本里的文件路径改成和实际存储位置一致,所有路径用$HOME代替~指代家目录,避免展开失败;路径变量统一加双引号,兼容路径含空格的场景。
  2. 合并重复的网络配置参数,避免配置被覆盖。

修正后的完整脚本如下:

#!/bin/sh
# 统一配置虚拟机文件存放目录,和实际文件位置匹配
VM_DIR="$HOME/Desktop/lunaLand/vm"
WINIMG="$VM_DIR/Win10_21H2_English_x64.iso"
VIRTIMG="$VM_DIR/virtio-win-0.1.217.iso"
HD_IMG="$VM_DIR/win10.img"

qemu-system-x86_64 --enable-kvm \
-drive driver=raw,file="$HD_IMG",if=virtio \
-m 6144 \
-net nic,model=virtio \
-net user,smb="$HOME" \
-cdrom "$WINIMG" \
-drive file="$VIRTIMG",index=3,media=cdrom \
-rtc base=localtime,clock=host \
-smp cores=4,threads=8 \
-usb -device usb-tablet
验证步骤
  • 给脚本添加执行权限:chmod +x vm.sh
  • 运行脚本前可以先执行ls "$VM_DIR"确认目录下win10.img、系统镜像、virtio驱动镜像三个文件都存在,再执行脚本即可正常启动。

内容的提问来源于stack exchange,提问作者Kyle Noome

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:27:32