Loading

Windows 10 上的 Multipass

Windows 10 上的 Multipass

Multipass 是一个轻量级的虚拟机管理器,支持 Linux,、Windows 以及 macOS 三大主流系统。在 Windows 上,可以选择用 Hyper-V 或者 Virtual Box 作为它底层的虚拟机软件。它实际上是在用户(也就是你)和较为笨重的虚拟机软件上加了一层抽象——没有什么是加一层解决不了的,不行再加——有点像 Spring boot 对于 Spring 的改进,Multipass 可以通过极为简单的命令 mulipass launch -n vmname 来用默认配置装载好一个虚拟机,开箱即用。

安装

根据官网文件,直接下载 .exe 文件,运行即可。这里可以修改程序的安装地址,默认选 Hyper-V 或者 Virtual Box,选择为当前用户或者所有用户创建环境变量。

完成以后,如果本机的 Hyper-V 还没开启的话,会提示重启计算机来进行配置。

这个时候,可以直接开启 Multipass 体验啦,不过,也许你还需要一些配置。

配置

数据存储位置

如果直接创建实例,Multipass 默认是存到C盘的, C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd\virtualbox\vault\instances\primary,普通用户没有权限访问它!GitHub 上 issue#1112 反应 C 盘空间不够,以及 Windows 10 更新会删掉这些实例,希望存到别的地方去。

有两种解决方案。

MULTIPASS_STORAGE 环境变量

release 1.5.0 提供了一个环境变量 MULTIPASS_STORAGE,可以修改一些数据的位置:

setting MULTIPASS_STORAGE system variable will change where data is stored (#1789)
see PR comment for instructions on how to set it across platforms

在 Windows 管理员身份打开的终端上做如下设置:

# In Administrator's PowerShell
PS> Stop-Service Multipass
PS> Set-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE -Value "这里填写自己选择的文件夹"
PS> Set-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE -Value "E:\volderoth\Documents\Virtual Machines\multipass"
PS> Start-Service Multipass

# 删除环境变量
PS> Remove-ItemProperty -Path "HKLM:System\CurrentControlSet\Control\Session Manager\Environment" -Name MULTIPASS_STORAGE

改完以后可能出现的问题:

  • 文件夹大小与实际不符
  • 无法创建新的实例
  • ……

是否出现问题以及哪种方式可以解决都很玄学……改环境变量的方式还是有问题的。看到帖子里有说环境变量只是暂时的手段,希望以后的更新版本可以改进吧www

那么,来看下我们第二种解决方案吧!

符号链接

Windows link files

既然程序一定要在这个目录下放实例文件,那么,我等程序进到这个目录以后,从系统层面把请求转到别的目录不就可以了吗?可以类比一下 Nginx 的反向代理,程序发送了对地址 a 的请求,Nginx 截获以后反手转给了地址 b,然后把地址 b 的响应给到程序,程序其实并不知道请求被代理了,它只关注是不是拿到了可以接受的响应。这就是符号链接啦。程序要访问文件夹 a,Windows 发现这个文件夹有符号链接,就会自动重定向到文件夹 b 。它也有点像快捷方式。

命令如下:

mklink "新的目录地址" "C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd"

静态 IP

如果用 Hyper-V 作为底层的虚拟机软件,希望实例可以拥有一个静态 IP 的话,基本配置跟直接使用 Hyper-V 一致。

默认使用的网络适配器就是它自带的 default switch,即使自己手动配置了 IP,重启以后它依旧会自动随机获取可用 IP 地址。所以需要在 Hyper-V 的虚拟交换机管理器里新建一个虚拟网络交换机,网络选内部网络,然后到网络适配器的 IPv4 的属性里,手动设定 IP 和网关。接着将实例的网络改成新的交换机,手动设定一下实例的 IP 就好。

用 multipass 创建新实例的时候,也可以手动指定网络适配器:

 # 创建一个实例,名字是zero,网络适配器用之前设置的staticIP,手动设置
 multipass launch -n zero --network name=staticIP,mode=manual

使用

multipass help 显示所有可用命令。

可以直接运行 multipass launch,它会自动创建一个实例 primary ,系统是 Ubuntu 最新的 LTS 版:

Launched: primary
Skipping 'Home' mount due to disabled mounts feature
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-90-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 System information disabled due to load higher than 1.0


1 update can be applied immediately.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@primary:~$

默认是 ubuntu 用户,没有密码。

也可以用自己的设定来创建实例,比如指定名字 one ,2 核 CPU,4 G 内存,20 G 磁盘:

multipass launch -n one -c 2 -m 4G -d 20G

列出所有已安装实例,显示运行状态、IP、系统版本:

multipass list

SSH 连接到实例,如果不指定实例名称,默认连接到 primary

multipass shell [实例名字]

重启、开启、关闭、挂起实例:

multipass restart one

multipass start one
multipass stop one

multipass suspend one

删除实例:

multipass delete one
# 彻底删除
multipass delete --purge one
#  或者在 delete 之后 purge
multipass purge
posted @ 2021-11-29 21:17  vvwantspeed  阅读(4418)  评论(0编辑  收藏  举报