在 win10 中使用 multipass 创建 ubuntu

multipass 是一款轻量级的虚拟化软件,是创建 ubuntu 虚拟机的靠谱选择。


描述

Multipass是一个开源命令行实用程序,允许用户协调Ubuntu Linux虚拟机的创建,管理和维护,以简化应用程序的开发。

目前看来功能和vagrant类似。

1: 去multipass下载地址下载不同平台下的安装包并安装。

2: multipass默认使用的是hyper-V,为了减轻C盘存储压力我将修改默认的hyper-v存储路径(Hyper-V管理器),.

  • 打开开始菜单---windows管理工具----Hyper-V管理器

  • 选择操作---Hyper-V设置,修改虚拟硬盘虚拟机的存储路径。

3: 修改multipass默认镜像和实例存放路径。

  • 默认实例存放路径: C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd

  • 默认虚拟镜像存放路径: C:\Windows\System32\config\systemprofile\AppData\Local\multipassd\cache

使用管理员打开powershell,然后执行如下命令:

PS C:\Windows\system32> Stop-Service Multipass
PS C:\Windows\system32> setx /M MULTIPASS_STORAGE "D:\work_Files\Hyper-V\multipassd"

成功: 指定的值已得到保存。
PS C:\Windows\system32> Start-Service Multipass
  • 修改后实例存放路径: D:\work_Files\Hyper-V\multipassd\data\vault

  • 修改后虚拟镜像存放路径: D:\work_Files\Hyper-V\multipassd\cache\vault

4: 使用multipass launch -n fastdfs 创建名为fastdfs的ubuntu实例

  • 此命令会在线下载当前release的ubuntu版本,有时会很慢。

  • 也可先去cloud-images.ubuntu.com下载img镜像,然后通过命令multipass launch -n fastdfs file://ubuntu-20.04-server-cloudimg-amd64.img 创建实例。

5: 常用命令:

multipass launch  -c 2 -d 2G -m 512M  -n fastdfs       # 创建一个2核512M内存2G硬盘名为fastdfs的实例

multipass list     # 查看已创建的ubuntu实例

multipass start fastdfs      # 开启fastdfs实例

multipass stop fastdfs      # 关闭fastdfs实例

multipass stop fastdfs      # 关闭fastdfs实例

multipass delete --purge  fastdfs      # 删除fastdfs实例

multipass find      # 在线查找可使用的ubuntu实例

multipass shell fastdfs    # 进入到fastdfs实例的shell终端

multipass exec fastdfs -- uname -r     # 不进入终端执行命令

multipass set client.primary-name=mysql    # 修改通过multipass launch创建的实例的实例名称

挂载本地目录到multipass虚拟机中

multipass提供挂载本地目录功能,方便本机与虚拟机之间进行文件传输。

方法如下:

1: 首先在ubuntu虚拟机中创建用户存放传输文件的目录: mkdir datafiles

2: 在本机终端输入: multipass mount D:\work_Files\multipassFiles minio:/home/ubuntu/datafiles, multipassFiles目录是你本机的目录,而minio:/home/ubuntu/datafiles指的是将文件挂载到minio这个虚拟机实例下的/home/ubuntu/datafiles目录下。

查看挂载是否成功:

PS D:\Apps> multipass info minio   # 查看实例信息
Name:           minio
State:          Running
IPv4:           192.168.1.96
Release:        Ubuntu 20.04.2 LTS
Image hash:     c5f2f08c6a1a (Ubuntu 20.04 LTS)
Load:           0.00 0.00 0.00
Disk usage:     4.2G out of 9.5G
Memory usage:   2.2G out of 2.8G
Mounts:         D:/work_Files/multipassFiles => /home/ubuntu/datafiles    # 发现已成功挂载
                    UID map: -2:default
                    GID map: -2:default

取消挂载: multipass umount minio, 取消挂载时只需提供虚拟机实例名即可。

在hyper-v给虚拟机设置静态ip

multipass默认使用hyper-v作为虚拟化方案,要想给multipass创建的虚拟机绑定静态ip,分别要在hyper-v以及ubuntu虚拟机中做些设置。

hyper-v网络相关设置

通过hyper-v管理器进行网络相关配置,操作如下图:

wwwechoxu

wwwechoxu

wwwechoxu

配置完成后重启ubuntu虚拟机使之配置生效。

ubuntu网络配置相关设置

为了防止网络设置错误导致登录不了ubuntu虚拟机,默认是使用密钥登录,应先修改ssh配置:

  • 修改ssh登录用户名ubuntu的密码,sudo passwd ubuntu

  • 启用ssh使用账号密码登录设置,其值为PasswordAuthentication yes

  • 重启sshd服务, sudo service sshd restart

注意: 当配置完静态ip后需要将ssh配置文件中的PasswordAuthentication yes改为PasswordAuthentication no

接下来就要在ubuntu中配置静态ip了:

使用sudo vim /etc/netplan/50-cloud-init.yaml编辑网络配置文件:

添加如下内容:

network:
    ethernets:
        eth0:
            dhcp4: true
            addresses: [192.168.1.96/24]
            optional: true
            gateway4: 192.168.1.88
            match:
                macaddress: 52:54:00:c4:a7:55
            set-name: eth0
    version: 2

sudo netplan apply使之网络配置生效。

当然此操作也可在win10本机中进行,找到 控制面板---网络和Internet---网络连接 然后根据如下图填写 静态ip 即可:

wwwechoxu

win10本机解决ssh timeout问题

当上面的操作完成后会发现通过multipass list等命令时会出现list failed: ssh connection failed: 'Timeout connecting to minio.mshome.net'错误。

这是因为当使用hyper-v虚拟化方案时,通过ssh连接multipass创建的虚拟机时,默认会使用ssh ubuntu@ubuntu设置的hostname.mshome.net进行连接。

我这里设置的hostname是minio,所以ssh 名称就是minio.mshome.net, 而这个名称对应的ip是控制面板---网络和Internet---网络连接中的vEthernet (Default Switch)生成的172.17.8.157 这样的ip地址,但我们现在没用启用vEthernet (Default Switch)的配置,自然就不能进行连接了。

解决办法:

用管理员身份打开cmd,然后输入: notepad C:\WINDOWS\System32\drivers\etc\hosts.ics打开hosts.ics文件,找到与你本机相关的

192.168.1.91 echoxu-win.mshome.net # 2026 4 5 24 5 36 29 846 # 有一个以你本机名的dns解析,将其值改为你本机的ip地址
192.168.1.96 minio.mshome.net # 2026 4 5 24 5 36 29 846 # 此处是你创建的虚拟机,将其ip修改为你已经绑定的静态ip地址

上面的操作完成后应该就可通过multipass list获取到虚拟机的ip信息了。

另一种解决ip与虚拟机主机名对应关系的方法是(非必须):

C:\Windows\System32\drivers\etc\hosts中添加192.168.1.96 minio.mshome.net,然后使用管理员身份打开cmd并在其中输入ipconfig /flushdns刷新缓存即可。

现在就可以通过multipass list等命令查看虚拟机信息了。

multipass network问题

Multipass IPV4 unknown instance is in running state

结果如下:

PS D:\Apps> ping minio.mshome.net

正在 Ping minio.mshome.net [192.168.1.96] 具有 32 字节的数据:
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64

192.168.1.96 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 0ms,最长 = 0ms,平均 = 0ms

PS D:\Apps> multipass info minio
Name:           minio
State:          Running
IPv4:           172.17.8.157
                192.168.1.96
Release:        Ubuntu 20.04.2 LTS
Image hash:     c5f2f08c6a1a (Ubuntu 20.04 LTS)
Load:           0.06 0.01 0.00
Disk usage:     4.2G out of 9.5G
Memory usage:   2.2G out of 2.8G
Mounts:         D:/work_Files/xftpFiles => D:/work_Files/xftpFiles
                    UID map: -2:default
                    GID map: -2:default

ssh连接ubuntu虚拟机

通过multipass创建的虚拟机默认是使用密钥进行登录的,当然也可按照上面的方法启用用户名和密码进行登录。

而这个密钥默认是在C:\Windows\System32\config\systemprofile\AppData\Roaming\multipassd\data\ssh-keys,然后将其复制到C:\Users\你的用户名\.ssh目录下。

如果你修改了multipass实例存储路径,将其替换为修改后的multipass实例存储路径\multipassd\data\ssh-keys

找到密钥后进行如下操作:

1: 将私钥复制到C:\Users\你的用户名\.ssh目录下

2: 编辑当前用户的C:\Users\你的用户名\.ssh目录下名称为config的文件(没有就创建,没有后缀名,就叫config),添加如下内容:

# minio ssh config
Host minio.mshome.net     # 上面ssh时报错提示的域名
    HostName minio.mshome.net   # 同上
    Port 22     # ssh端口
    PreferredAuthentications publickey
    User ubuntu    # multipass创建的ubuntu虚拟机的默认用户名
    IdentityFile ~/.ssh/id_rsa_minio    # 私钥存放位置

做完上面的操作后就可进行ssh连接了。

连接信息如下:

PS D:\Apps> multipass shell minio   # 或者使用ssh ubuntu@minio.mshome.net
The authenticity of host 'minio.mshome.net (192.168.1.96)' can't be established.
ECDSA key fingerprint is SHA256:aPiO0SWF7OB4kilPP1IM0aZlKd+K/OoSF+qoN4UQnFU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'minio.mshome.net,192.168.1.96' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-67-generic x86_64)

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

  System information as of Thu Apr 22 17:27:11 CST 2021

  System load:           0.0
  Usage of /:            44.0% of 9.52GB
  Memory usage:          79%
  Swap usage:            0%
  Processes:             138
  Users logged in:       0
  IPv4 address for eth0: 192.168.1.96
  IPv6 address for eth0: 2409:8a1e:9310:4252::e87
  IPv6 address for eth0: fd75:4eb4:bf39::e87
  IPv6 address for eth0: fd75:4eb4:bf39:0:5054:ff:fec4:a739
  IPv6 address for eth0: 2409:8a1e:9310:4252:5054:ff:fec4:a739

 * Pure upstream Kubernetes 1.21, smallest, simplest cluster ops!

     https://microk8s.io/

8 updates can be installed immediately.
8 of these updates are security updates.
To see these additional updates run: apt list --upgradable


Last login: Thu Apr 22 16:43:26 2021 from 192.168.1.91

参考:

multipass installing-on-windows

add MULTIPASS_STORAGE support

Windows default multipass folder

multipass ssh login error

Add integration with SSH

关闭Hyper-v

正因为使用multipass只能安装ubuntu虚拟机,所以切换回了vagrant + virtualbox。

但Hyper-v 和 virtualbox不兼容,决定删除Hyper-V,删除它还有一个原因是,当使用Hyper-v后,windows主机也将变成一个特殊的虚拟机,这个在hyper-v中可找到描述,这可能会影响某些程序的性能,另外其创建的虚拟交换机对网络有影响。

卸载方法:

1: 控制面板---程序---程序和功能---启用或关闭windows功能取消 Hyper-v前面的勾选。

或者以管理员身份运行命令提示符,执行命令 bcdedit /set hypervisorlaunchtype off

2: 打开windows defender安全中心,左边选项"设备安全性",关闭内核隔离。

然后重启。

检查是否关闭:

1: 去电脑->管理->服务中检测所有与Hyper-v相关的服务是否设置为手动启动。

2: 以管理员身份运行命令提示符,执行命令 bcdedit 查看hypervisorlaunchtype Off表示hyper-v已关闭。

win 10 关闭Hyper-v

上次更新:
贡献者: iEchoxu