总目录
1. 概览
2. 教程
3. 使用指引
3.1 安装Multipass - 基于Linux / 基于macOS / 基于Windows
3.2 管理实例 - 创建实例 / 修改实例 / 使用实例 / 使用实例命令别名 / 与实例共享数据 / 移除实例
3.3 管理Multipass - 设置驱动 / 使用Multipass服务授权代理 / 远程使用Multipass / 提高挂载性能 👈 / 使用Packer打包Multipass镜像 / 设置图像界面 / 使用不同的macOS终端 / 配置Multipass外部储存位置
3.4 问题排查 - 连接日志 / 网络问题处理
如何提高Multipass挂载性能
Multipass默认使用SSHFS在实例上挂载主机文件夹. 这提供了一个在性能, 安全和功能之间比较好的中和方案, 其他方法也可以手动完成这个任务.
我们在很多挂载方法上进行了彻头彻尾的测试. 在这里, 我们将简述如何使用我们找到的高效方法在每个系统上如何创建共享, 如何在Multipass实例中挂载他们
内容:
SMB/CIFS挂载
在我们的测试中, SMB在Multipass所有搭建中都是性能优良的. Windows和MacOS提供了一个系统SMB服务器, Linux上也是很容易安装的(较新核心版本提供了一个系统服务器, 而我们在这描述的也可以针对于老旧Linux版本).
使用SMB共享文件夹
Windows
首先, 这一部分是可选操作, 我们可以启动在Windows中内置的SMB服务器上的RDMA. 在控制面板中, 我们可以找到Windows功能开关. 在这个窗口, 我们需要启用SMB驱动. Windows可能需要启动.
然后, 我们可以用PowerShell共享文件夹. 看下面的命令:
New-SmbShare -Name "share_name" -Path "C:\my_path"
我们会在主机上创建一个名为\\hostname\share_name
的共享. 命令New-SmbShare
有很多选项可以控制连接和编码, 但是这不是这篇文章的话题.
MacOS
这些完全可以使用界面操作(GUI)完成, 只是有些步骤从命令行操作比较简单. 如果可以, 我们后面会展示后者.
我们需要按照下面的命令启动共享系统:
$ sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server.plist EnabledServices -aaray disk
$ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smbd.plist
然后, 去共享指定文件夹:
$ sudo sharing -a /my_path/
最后, 我们需要允许用户通过SMB连接到共享文件夹. 因此, 我们需要导航到系统偏好(System Preferences), 找到共享图标. 在共享菜单有一个选项按钮. 这个按钮会打开一个窗口, 我们可以在其中选择哪些用户能够挂载. 接下来选择想要授权的用户并输入密码.
所有这些步骤会在主机上创建一个名为//hostname/my_path/
的挂载点.
Linux
在Ubuntu(或其他任何基于Debian的发行版)中, samba-common包包含了SMB服务器. 我们可以使用命令安装它
$ sudo apt update && sudp apt install -y samba-common
然后, 编辑文件/etc/samba/smb.conf
, 使我们可以添加共享, 新增词条, 如下:
[test_smb_mount]
comment = smb mount test
path = /my_path/
read only = no
browsable = yes
kernel oplocks = yes
在实例中使用SMB共享挂载文件夹
一旦主机操作系统可以共享文件夹, 我们就可以在实例中挂载它. 为此, 需要cifs-tools
包, 可以用下面命令安装
$ sudo apt upadte && sudo apt install -y cifs-utils
挂载需要下面命令行最终完成
$ sudo mount -t cifs //hostname/my_path_or_share_name mount_folder/ -o user=my_name,uid=1000
my_name
是主机上共享文件夹的用户. 在终端中会被要求输入密码, 输入就完成了.
这一步可选. 我们可以在/etc/fstab
新增一行, 让操作系统启动时自动挂载文件夹, 或至少不需要指定挂载名称或选项. 命令行应如下:
//hostname/my_path_or_share_name mount_folder/ cifs user=my_name,uid=1000 0 0
这个文件中的词条使用空格或者制表符分隔. 第一个是共享名称或路径, 第二个是要挂载文件夹的目录, 第三个是挂载类型, 第四个是一个逗号分隔的选项列表(添加noatuo避免启动时挂载), 最后两个选项最好保持为0.
假设noauto
在选项中被指定了, 文件夹就需要用下面方式挂载
$ sudo mount mount_folder/
virtio-fs挂载
如果在Linux上使用LXD后端, 我们可受益于有一个优良的文件系统挂载, 鉴于系统运行时无法挂载的花销. 使用下面命令在实例上挂载文件夹
$ lxc --project multipass config device add lxdinstance mount_lxd disk source=/my_path path=//mount_folder
鉴于lxdinstance
是实例名称, mount_lxd
是一个挂载过于随意的设备名称, source
指定了共享路径, path
指定了源文件(source)需要挂载的目录. 只需要这个命令, LXD搞定了所有事情: 无需在实例运行命令.
virtio-fs也在qemu和libvirt后端可用, 尽管需要额外安装.
NFS挂载
Linux和MacOS在系统上提供了NFS服务器.
使用NFS共享文件夹
MacOS
MacOS上的NFS服务器是使用nfsd
命令和文件/etc/exports
控制. 我们通过新增文件夹到文件中去共享, 使用类似于下面的一行文本:
/my_path -mapall=host_user -network 192.168.0.0 -mask=255.255.0.0
-network
和-mask
控制着共享可以连接到的网络. 然后, 我们使用命令启动服务器
$ sudo nfsd start
(或者服务器已经正在运行则使用restart
)
Linux
在Ubuntu(或其他任何基于Debian的发行版), nfs-kernel-server
包包含了核心中需要使用NFS服务器的文件. 我们可以用命令安装它
$ sudo apt update && sudo apt install -y nfs-kernel-server
用下面命令共享文件夹:
$ sudo exportfs *:/my_path
*
表示"导出任何主机"; 我们在这可以指定主机名或IP地址
在实例中使用NFS共享挂载文件夹
我们首先需要使用下面命令在实例中安装NFS客户端
$ sudo apt update && sudo apt install -y nfs-common
然后, 我们可以用下面命令挂载共享文件夹
$ sudo mount -t nfs HPST_IP:/my_path /mount_folder -o user=host_user, uid=instance_uid,gid=instance_gid