本文由腾讯云 社区自动同步,原文地址 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
进行格式化
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镜像