kvm 的guest与host共享文件
2014-11-27 11:26
1241 查看
Linux kernel最早从2.6.23支持paravirt-ops接口,也就是所谓的半虚拟化。本文简单介绍一下利用libvirt的功能通过virtio的方式将host的一块local
block device 'passthru'到guest os中。
方式1,通过KVM虚拟机的xml配置文件指定,下面是一个虚机xml文件的片段,用来将host的/dev/sda4这一块设备passthru到guest os中:
<domain>
...
<disk type='block' device='disk'>
<source dev='/dev/sda4'/>
<target dev='vdb' bus='virtio'/>
</disk>
</domain>
实验可以用
在virsh命令行中,通过"create '/etc/libvirt/qemu/odm.xml‘"来启动虚机odm,起来之后在odm的guest os中会发现多出了一个块设备/dev/vdb,可以正常mount该块设备,里面的数据应该同host中看到的完全一样。
方式2,可以动态挂载一个host上的块设备到一个正在running的VM中,比如:
virsh# attach-disk odm /dev/sda4 vdb
在虚拟机中mount后会将原盘格式化
方式3,通过libvirt API的方式,有两个API分别用来实现挂载和卸载操作:
virDomainAttachDevice(domain, xml)以及virDomainDetachDevice()
libgustfs 是一个想要一统天下的虚拟机镜像查看/修改工具, 号称支持几乎所有 类型的虚拟机镜像, 在它面前 qemu-nbd 弱爆了. 分析它显然超出了这篇文档的范围. 过后将会专门写一篇文章来分析它, 以下简单的提供一种利用 libguestfs
来访问 虚拟机镜像的方法.
首先, 安装它
然后使用以下指令启动 guestfs 的命令行,
打开另外一个终端, 在 /tmp/mnt 里面就可以看到导出的文件了, 由于是读写方式的挂载, 可以在里面像在本地一样的读写文件, 完成后 使用下面指令卸载
执行后, 上面的 loop 就会结束
启动虚拟机后, 所有的更改都会生效.
block device 'passthru'到guest os中。
方式1,通过KVM虚拟机的xml配置文件指定,下面是一个虚机xml文件的片段,用来将host的/dev/sda4这一块设备passthru到guest os中:
<domain>
...
<disk type='block' device='disk'>
<source dev='/dev/sda4'/>
<target dev='vdb' bus='virtio'/>
</disk>
</domain>
实验可以用
在virsh命令行中,通过"create '/etc/libvirt/qemu/odm.xml‘"来启动虚机odm,起来之后在odm的guest os中会发现多出了一个块设备/dev/vdb,可以正常mount该块设备,里面的数据应该同host中看到的完全一样。
方式2,可以动态挂载一个host上的块设备到一个正在running的VM中,比如:
virsh# attach-disk odm /dev/sda4 vdb
在虚拟机中mount后会将原盘格式化
方式3,通过libvirt API的方式,有两个API分别用来实现挂载和卸载操作:
virDomainAttachDevice(domain, xml)以及virDomainDetachDevice()
libgustfs
libgustfs 是一个想要一统天下的虚拟机镜像查看/修改工具, 号称支持几乎所有 类型的虚拟机镜像, 在它面前 qemu-nbd 弱爆了. 分析它显然超出了这篇文档的范围. 过后将会专门写一篇文章来分析它, 以下简单的提供一种利用 libguestfs来访问 虚拟机镜像的方法.
首先, 安装它
# 在 Gentoo中, 使用 $ sudo emerge libguestfs # 在 redhat 家族的发行版中, 使用 $ yum install libguestfs libguestfs-tools*
然后使用以下指令启动 guestfs 的命令行,
# --rw 参数表示挂载后对镜像具有读写权限, 可能有点慢, 需要 # 等待, 注意对运行中的虚拟机, 有必要使用 --ro 只读挂载 $ guestfish --rw -i -a path/to/image/file # 创建一个临时挂载点, guestfs 的命令行接口可以执行命令 # 命令前面加 ! 就可以了 $ !mkdir /tmp/mnt # 导出镜像文件到 /tmp/mnt, 导出后需要执行 mount-local-run $ mount-local /tmp/mnt # 进入 mount loop, 类似于 glib 的 g_main_loop_run # 卸载镜像后这个 loop 自动结束 $ mount-local-run
打开另外一个终端, 在 /tmp/mnt 里面就可以看到导出的文件了, 由于是读写方式的挂载, 可以在里面像在本地一样的读写文件, 完成后 使用下面指令卸载
$ fusermount -u /tmp/mnt
执行后, 上面的 loop 就会结束
启动虚拟机后, 所有的更改都会生效.
相关文章推荐
- Windows host与VirtualBox中linux guest通过数据空间共享文件
- virtualbox文件共享ubuntu为host机器,win7为guest
- virtualBox guest与host共享文件
- XP(host)与virtualbox中的Fedora 14(guest)Linux共享文件方法
- kvm:qemu-kvm 用rdesktop实现共享Host的文件
- virtuebox 安装VBoxGuestAdditions,ubuntu下设置文件共享
- qemu中使用9p,支持host和guest中共享目录
- libvirt-qemu-Host与Guest之间共享文件夹
- kvm虚拟化之guest镜像文件的挂载
- qemu-kvm宿主机和客户机之间的文件共享
- Virtual Box的host-only网络,文件共享
- 修改KVM虚机镜像中的文件的几种方法(Guestfish/Guestmount /virt-*tools)
- Virtual Box的host-only网络,文件共享
- bochs安装freedos,以及host、guest拷贝文件
- kvm初体验之四:从Host登录Guest的五种方式
- Windows主机(Host)下Virtualbox与Ubuntu(Guest)共享文件夹
- vbox host系统通过数据空间共享数据给guest系统
- VirtualBox共享文件夹设置(host:win7; guest:Ubuntu) .
- kvm在host里获得guest的ip