win11下Multipass修改默认MULTIPASS_STORAGE位置后,持续报错waiting for daemon的问题

win11下Multipass修改默认MULTIPASS_STORAGE位置后,持续报错waiting for daemon的问题
在学习juju时Canonical 的教程推荐了自家的开源虚拟机软件 Multipass。据说基于 Windows 原生的 Hyper-V优化很丝滑且内置大部分 Ubuntu 版本。如此好用的东西肯定要尝尝咸淡。当笔者兴致冲冲地下载好后立刻发现问题Windows 家庭版无法使用 Hyper-V遂研究专业版升级。系统升级了Hyper-V 也开启随便启动了一个测试虚拟机又报错了。退出一看发现 C 盘已经爆红原来坑爹的安装程序只能指定本体文件地址镜像存放地址仍然默认在 C 盘的 ProgramData 中。又研究修改默认存放地址没想到又踩了很多坑。先说最简洁的方案1. 下载 .msi 安装程序先不要执行程序2. 修改环境变量以管理员身份运行 PowerShell执行以下命令[System.Environment]::SetEnvironmentVariable(MULTIPASS_STORAGE, D:\MultipassData, Machine)其中 D:\MultipassData 修改为你实际想存放的地址。3. 运行 .msi 安装程序。系统安装程序会自动识别MULTIPASS_STORAGE变量将所有镜像数据写入你指定的地址完全不会碰 C 盘。正常到这一步就 OK 了。4. 如果你已经运行过安装程序且触发了 waiting for daemon 的问题那么最简单的方式是彻底删除 Multipass 文件和系统变量MULTIPASS_STORAGE然后按上述步骤来。原理以及复杂的方案为什么在安装好 Multipass 后再修改MULTIPASS_STORAGE变量位置即使文件内容复制、文件位置都正确依然会触发 waiting for daemon答案是 Windows 的 NTFS 权限继承逻辑当你首先设置好MULTIPASS_STORAGE的路径后MSI 安装器以SYSTEM身份在指定位置创建文件夹创建者和所有者都是 SYSTEM。但若安装完后自行创建 D 盘目录并复制文件则该目录的创建者和所有者是当前用户。但 multipassd 服务以 SYSTEM 身份运行没法访问没权限的目录只会得到 access denied我们看到的就是不停的 waiting for daemon。因此如果确实需要在已安装完后修改存放镜像位置参考以下步骤1. 停止 Multipass 服务用管理员启动 PowerShell执行以下命令Stop-Service Multipass2. 创建指定位置的目录并复制数据# 创建目标目录 New-Item -ItemType Directory -Path D:\MultipassData -Force # 复制数据保留权限 robocopy C:\ProgramData\Multipass D:\MultipassData /E /COPYALL /DCOPY:T3. 设置系统环境变量见简洁方案4.配置目录权限# 给予 SYSTEM 账户完全控制权限 $acl Get-Acl D:\MultipassData $rule New-Object System.Security.AccessControl.FileSystemAccessRule( NT AUTHORITY\SYSTEM, FullControl, ContainerInherit,ObjectInherit, None, Allow ) $acl.SetAccessRule($rule) Set-Acl D:\MultipassData $acl5. 重启 Multipass 服务Start-Service Multipass6. 验证multipass list multipass info完