kvm 虚拟机直接从virtualbox虚拟磁盘VDI启动的方法

发布: 2011-02-01 11:21

如果同时使用两种虚拟机,像我现在用的kvm和virtualbox,是不是要分别为两种虚拟机创建两个虚拟磁盘,一般用起来都这么做。但这样多用了一个虚拟磁盘的空间,并且还不能保证两个虚拟机的系统同步,或者即使同步了,也非常麻烦。

今天偶然在网上看到一种解决方法,能让kvkm直接从virtualbox的VDI格式虚拟磁盘启动,两种虚拟机操作的同虚拟磁盘上的同一系统,非常方便。

这里需要用到一个工具,vdfuse,它能直接使用fuse方式挂载vbox虚拟磁盘,如ubuntu11-test.VDI。不过这个工具要自己动手编译。

编译环境,gentoo amd64 系统,virtualbox-4.0.2虚拟机,fuse-2.8.5,

vbox安装在/opt/VirtualBox/目录。

在https://build.opensuse.org/package/files?package=vdfuse&project=Virtualization下载几个文件,放在一个目录下,如vdfuse/,然后下面安装,

1.下载文件列表,

VirtualBox-4.0.2-include-only.tar.bz2

vdfuse-vbox4.0.patch

vdfuse-v82.c

2. 解压VirtualBox-4.0.2-include-only.tar.bz2,编译的时候使用vbox的头文件

把该目录中的include拷贝到当前目录,

3. 使用脚本编译,build_vdfuse.sh

[code type="sh"]

#!/bin/sh

export LD_LIBRARY_PATH=/opt/VirtualBox/

gcc vdfuse-v82.c -o vdfuse `pkg-config --cflags --libs fuse` \

-I./include \

-L/opt/VirtualBox/ \

-Wl,-rpath,/opt/VirtualBox/ \

-l:/opt/VirtualBox/VBoxDD.so \

-l:/opt/VirtualBox/VBoxDD2.so \

-l:/opt/VirtualBox/VBoxDDU.so \

-Wall

[/code]

现在如果没有问题,会生成一个vdfuse可执行程序,

./vdfuse

ERROR: a single mountpoint must be specified



DESCRIPTION: This Fuse module uses the VirtualBox access library to open a

VirtualBox supported VD image file and mount it as a Fuse file system. The

mount point contains a flat directory containing the files EntireDisk,

Partition1 .. PartitionN. These can then be loop mounted to access the

underlying file systems



USAGE: ./vdfuse [options] -f image-file mountpoint

-h help

-r readonly

-t specify type (VDI, VMDK, VHD, or raw; default: auto)

-f VDimage file

-a allow all users to read disk

-w allow all users to read and write to disk

-g run in foreground

-v verbose

-d debug

NOTE: you must add the line "user_allow_other" (without quotes)

to /etc/fuse.confand set proper permissions on /etc/fuse.conf

for this to work.

放在这用,或者拷贝到/usr/bin/下。

5.测试,

mkdir /mnt/vdi

vdfuse -v -d -a -w -f ubuntu11-amd64.vdi /mnt/vdi/

ls -l /mnt/vdi/

total 12580864

-rw-rw-rw- 1 gzleo wheel 6442450944 Jan 31 21:48 EntireDisk

-rw-rw-rw- 1 gzleo wheel 5998903296 Jan 31 21:48 Partition1

-rw-rw-rw- 1 gzleo wheel 441450496 Jan 31 21:48 Partition2

说明挂载vbox虚拟磁盘成功。

6. 使用kvm启动vbox虚拟磁盘
上面挂载后,显示了了三个文件,只需要在kvm -drive file参数指定EntireDisk一个,这其实就是整个磁盘,仔细观察,你会发现这个文件的大小是其他分区文件大小的和。

后面的使用就与kvm一相了,不再重述,可能的问题就是驱动有可能不同,可根据情况修正。

PS:
这种方法对windows有问题,启动不了。
linux,freebsd皆可。


原文: http://qtchina.tk/?q=node/555

Powered by zexport