VirtualBox虚拟磁盘转换成xen可用的格式

来源:互联网 发布:平板软件强制搬家 编辑:程序博客网 时间:2024/06/05 06:03

针对这个问题,用“convert virtualbox to xen"搜索,找到两篇文章:
http://www.ioncannon.net/system-administration/80/how-to-transfer-linux-from-virtualbox-to-xen/
方法:
VBoxManage internalcommands converttoraw myosimage.vdi /tmp/myosimage.img

http://forums.virtualbox.org/viewtopic.php?f=1&t=18560
方法:
VBoxManage clonehd xyz.vdi xyz.raw --format RAW

重启到正常的内核(其中安装有VirtualBox-3.12),进行如下操作:
[whb@jcwkyl vm]$ VBoxManage clonehd /vm/vm1.vdi /vm/vm1_clone.img --format RAW
VirtualBox Command Line Management Interface Version 3.0.12
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'RAW'. UUID: cb782a52-0759-4450-8ea2-e584f35fc76e

[whb@jcwkyl vm]$ VBoxManage internalcommands converttoraw /vm/vm1.vdi /vm/vm1_convert.img
VirtualBox Command Line Management Interface Version 3.0.12
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

Converting image "/vm/vm1.vdi" with size 8589934592 bytes (8192MB) to raw...

然后卸载VirtualBox(怕它和xen内核发生冲突),重启到xen内核,经过验证,上述两种方法都没有问题,唯一的问题是,产生的文件太大了,以前的vm1.vdi只有987M,但是上述两种方法生成的vm1_clone.img和vm1_convert.img居然都是8.1G!

附自己的xen虚拟机配置文件:
#  -*- mode: python; -*-
#============================================================================
# Python configuration setup for 'xm create'.
# This script sets the parameters used when a domain is created using 'xm create'.
# You use a separate script for each domain you want to create, or 
# you can set the parameters for the domain on the xm command line.
#============================================================================
 
import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'
 
#----------------------------------------------------------------------------
# Kernel image file.
kernel = "/usr/lib/xen/boot/hvmloader"
 
# The domain build function. HVM domain uses 'hvm'.
builder='hvm'
 
# Initial memory allocation (in megabytes) for the new domain.
#
# WARNING: Creating a domain with insufficient memory may cause out of
#          memory errors. The domain needs enough memory to boot kernel
#          and modules. Allocating less than 32MBs is not recommended.
memory = 256
 
# Shadow pagetable memory for the domain, in MB.
# Should be at least 2KB per MB of domain memory, plus a few MB per vcpu.
shadow_memory = 8
 
# A name for your domain. All domains must have different names.
name = "vm1"
 
# 128-bit UUID for the domain.  The default behavior is to generate a new UUID
# on each call to 'xm create'.
#uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9"
 
#-----------------------------------------------------------------------------
# the number of cpus guest platform has, default=1
#vcpus=1
 
# enable/disable HVM guest PAE, default=0 (disabled)
#pae=0
 
# enable/disable HVM guest ACPI, default=0 (disabled)
#acpi=0
 
# enable/disable HVM guest APIC, default=0 (disabled)
#apic=0
 
# List of which CPUS this domain is allowed to use, default Xen picks
#cpus = ""         # leave to Xen to pick
#cpus = "0"        # all vcpus run on CPU0
#cpus = "0-3,5,^1" # run on cpus 0,2,3,5
 
# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
#vif = [ 'type=ioemu, mac=00:16:3e:00:00:11, bridge=xenbr0, model=ne2k_pci' ]
# type=ioemu specify the NIC is an ioemu device not netfront
vif = [ 'type=ioemu, bridge=xenbr0' ]
 
#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
# what you want them accessible as.
# Each disk entry is of the form phy:UNAME,DEV,MODE
# where UNAME is the device, DEV is the device name the domain will see,
# and MODE is r for read-only, w for read-write.
 
#disk = [ 'phy:hda1,hda1,r' ]
#disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ]
disk = [ 'file:/vm/vm1_convert.img,ioemu:hda,w', 'phy:/dev/cdrom,hdc:cdrom,r'  ]
 
#----------------------------------------------------------------------------
# Configure the behaviour when a domain exits.  There are three 'reasons'
# for a domain to stop: poweroff, reboot, and crash.  For each of these you
# may specify:
#
#   "destroy",        meaning that the domain is cleaned up as normal;
#   "restart",        meaning that a new domain is started in place of the old
#                     one;
#   "preserve",       meaning that no clean-up is done until the domain is
#                     manually destroyed (using xm destroy, for example); or
#   "rename-restart", meaning that the old domain is not cleaned up, but is
#                     renamed and a new domain started in its place.
#
# The default is
#
#   on_poweroff = 'destroy'
#   on_reboot   = 'restart'
#   on_crash    = 'restart'
#
# For backwards compatibility we also support the deprecated option restart
#
# restart = 'onreboot' means on_poweroff = 'destroy'
#                            on_reboot   = 'restart'
#                            on_crash    = 'destroy'
#
# restart = 'always'   means on_poweroff = 'restart'
#                            on_reboot   = 'restart'
#                            on_crash    = 'restart'
#
# restart = 'never'    means on_poweroff = 'destroy'
#                            on_reboot   = 'destroy'
#                            on_crash    = 'destroy'
 
#on_poweroff = 'destroy'
#on_reboot   = 'restart'
#on_crash    = 'restart'
on_poweroff = 'destroy'
on_reboot = 'destroy'
on_crash = 'destroy'
#============================================================================
 
# New stuff
device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
 
#-----------------------------------------------------------------------------
# boot on floppy (a), hard disk (c) or CD-ROM (d) 
# default: hard disk, cd-rom, floppy
#boot="cda"
boot='c'
 
#-----------------------------------------------------------------------------
#  write to temporary files instead of disk image files
#snapshot=1
 
#----------------------------------------------------------------------------
# enable SDL library for graphics, default = 0
sdl=1
 
#----------------------------------------------------------------------------
# enable VNC library for graphics, default = 1
vnc=0
 
#----------------------------------------------------------------------------
# address that should be listened on for the VNC server if vnc is set.
# default is to use 'vnc-listen' setting from /etc/xen/xend-config.sxp
#vnclisten="127.0.0.1"
 
#----------------------------------------------------------------------------
# set VNC display number, default = domid
#vncdisplay=1
 
#----------------------------------------------------------------------------
# try to find an unused port for the VNC server, default = 1
#vncunused=1
 
#----------------------------------------------------------------------------
# enable spawning vncviewer for domain's console
# (only valid when vnc=1), default = 0
#vncconsole=0
 
#----------------------------------------------------------------------------
# set password for domain's VNC console
# default is depents on vncpasswd in xend-config.sxp
vncpasswd=''
 
#----------------------------------------------------------------------------
# no graphics, use serial port
#nographic=0
 
#----------------------------------------------------------------------------
# enable stdvga, default = 0 (use cirrus logic device model)
stdvga=0
 
#-----------------------------------------------------------------------------
#   serial port re-direct to pty deivce, /dev/pts/n 
#   then xm console or minicom can connect
serial='pty'
 
 
#-----------------------------------------------------------------------------
#   enable sound card support, [sb16|es1370|all|..,..], default none
#soundhw='sb16'
 
 
#-----------------------------------------------------------------------------
#    set the real time clock to local time [default=0 i.e. set to utc]
#localtime=1
 
 
#-----------------------------------------------------------------------------
#    start in full screen
#full-screen=1   
 
 
#-----------------------------------------------------------------------------
#   Enable USB support (specific devices specified at runtime through the
#            monitor window)
#usb=1
 
#   Enable USB mouse support (only enable one of the following, `mouse' for
#                  PS/2 protocol relative mouse, `tablet' for
#                  absolute mouse)
#usbdevice='mouse'
#usbdevice='tablet'
 
#-----------------------------------------------------------------------------
#   Set keyboard layout, default is en-us keyboard. 
#keymap='ja'