宿主机与虚拟机共享文件

2019-11-26 16:14:27 浏览数 (1)

本文由腾讯云 社区自动同步,原文地址 https://stackoverflow.club/article/kvm_share_files/

简介

如果是在本地的机器上安装kvm和虚拟机,拷贝文件还可以通过外接usb和kvm的redirect usb device来完成。而如果是远程的kvm,该如何拷贝文件到本地是一个问题。

静态文件服务器

依赖于python环境,目前仅支持python2.

在要分享的文件路径下运行该命令,然后在要获取文件的系统中下载即可。

代码语言:txt复制
python2 -m SimpleHTTPServer 8080

缺点是只能下载,不能上传。

网盘

可用的网盘很多,如公有云的百度网盘、坚果云,私有云的可道云、nextcloud。

我自己用nextcloud,通过内网穿透或者租用公网服务器的方式部署一个可访问的nextcloud网站,只要有浏览器就可以下载与上传文件。

缺点:不能免下载安装软件,即像挂载第二块磁盘那样直接安装(有时候主磁盘的空间比较尴尬,正好能装下软件,但是先下载到主磁盘再安装就不够)。

共享磁盘

新建img文件(100G)

代码语言:txt复制
sudo dd if=/dev/zero of=raspberrypi.img bs=1MB count=102400

给img文件新增分区表

代码语言:txt复制
sudo parted raspberrypi.img mklabel msdos

分区

代码语言:txt复制
sudo parted raspberrypi.img

格式化工具不支持在img中格式化,所以需要先挂载镜像。

在 Linux 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。

连接loop设备

代码语言:txt复制
sudo losetup --show -f raspberrypi.img

命令会返回链接后的设备路径,本例中为/dev/loop0

连接设备后还需映射分区:

代码语言:txt复制
sudo kpartx -va /dev/loop0

新的块设备在/dev/mapper目录下,这时候可以用mkfs进行格式化

代码语言:txt复制
sudo mkfs.vfat /dev/mapper/loop0p1

挂载到宿主机的目录中

代码语言:txt复制
sudo mount -t vfat /dev/mapper/loop0p1 /mnt/share

在kvm面板中,选择view->details->Add Hardware->Storage->select or create custom storage, 在弹出的对话框中选择之前创建的img文件即可。

注意:该种方式不是实时共享,也就是说在虚拟机中新建一个文件,不能在宿主机中看到。需要虚拟机关机,宿主机重新挂载共享磁盘。

参考

  • 使用dump和restore来制作树莓派的img镜像

0 人点赞