执行Bash脚本通过QEMU安装Windows虚拟机提示文件不存在
问题根因
报错由三个问题共同导致:
- 路径配置错误:实际镜像、虚拟磁盘文件都存放在
~/Desktop/lunaLand/vm目录下,但脚本里写的路径是~/vm,指向家目录下独立的vm文件夹,和实际存储位置不匹配。 - 波浪号
~未被正确展开:Shell只会对出现在参数开头的独立~做家目录路径替换,写在file=~/xxx这类赋值后缀位置的~不会被Shell解析,会作为普通字符串直接传给qemu;qemu本身不识别~的家目录指代含义,会直接把~当作目录名查找文件,无法匹配到真实路径。 - 配置冗余冲突:原脚本写了两次
-net user参数,后一个配置会覆盖前一个,导致前面的网络配置不生效。
修复方案
- 统一把脚本里的文件路径改成和实际存储位置一致,所有路径用
$HOME代替~指代家目录,避免展开失败;路径变量统一加双引号,兼容路径含空格的场景。 - 合并重复的网络配置参数,避免配置被覆盖。
修正后的完整脚本如下:
#!/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
相关产品推荐
相关产品推荐

