X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=v2v%2Fvirt-v2v.pl;h=fb1f22049441cc415dd42bf314c0bb22bedc0893;hp=92b53293b6c183c51e8fe7d287d8130215afc28f;hb=f8f10578093e926f5f36289a6c11615d067fbcad;hpb=ce315bba284b40c2a729fce1ed2e3d7a746173f8 diff --git a/v2v/virt-v2v.pl b/v2v/virt-v2v.pl index 92b5329..fb1f220 100755 --- a/v2v/virt-v2v.pl +++ b/v2v/virt-v2v.pl @@ -28,21 +28,85 @@ use Getopt::Long; use Data::Dumper; use File::Temp qw/tempdir/; use XML::Writer; +use Locale::TextDomain 'libguestfs'; =encoding utf8 =head1 NAME -virt-v2v - Convert Xen guests to KVM +virt-v2v - Convert Xen or VMWare guests to KVM =head1 SYNOPSIS virt-v2v xen_name -o kvm_name + virt-v2v guest.ovf.zip -o kvm_name + virt-v2v guest.img [guest.img ...] =head1 DESCRIPTION +Virt-v2v converts guests from one virtualization hypervisor to +another. Currently it is limited in what it can convert. See the +table below. + + -------------------------------+---------------------------- + SOURCE | TARGET + -------------------------------+---------------------------- + Xen domain managed by | + libvirt | + | + Xen compatibility: | + - PV or FV kernel | KVM guest managed by + - with or without PV drivers | libvirt + - RHEL 3.9+, 4.8+, 5.3+ | - with virtio drivers + - Windows XP, 2003 | + | + -------------------------------+ + | + VMWare VMDK image with | + OVF metadata, exported from | + vSphere | + | + VMWare compatibility: | + - RHEL 3.9+, 4.8+, 5.3+ | + - VMWare tools | + | + -------------------------------+---------------------------- + +=head2 CONVERTING XEN DOMAINS + +For Xen domains managed by libvirt, perform the initial conversion +using: + + virt-v2v xen_name -o kvm_name + +where C is the libvirt Xen domain name, and C is +the (new) name for the converted KVM guest. + +Then test boot the new guest in KVM: + + virsh start kvm_name + virt-viewer kvm_name + +When you have verified that this works, shut down the new KVM domain +and I the changes by doing: + + virt-v2v --commit kvm_name + +I. + +Or you can I to the original Xen domain by doing: + + virt-v2v --rollback kvm_name + +B Do I try to run both the original Xen +domain and the KVM domain at the same time! This will cause guest +corruption. + +=head2 CONVERTING VMWARE GUESTS + +I @@ -83,9 +147,22 @@ then libvirt is not used at all. =cut +my $output; + +=item B<--output name> | B<-o name> + +Set the output guest name. + +=cut + +=back + +=cut + GetOptions ("help|?" => \$help, "version" => \$version, "connect|c=s" => \$uri, + "output|o=s" => \$output, ) or pod2usage (2); pod2usage (1) if $help; if ($version) { @@ -94,7 +171,7 @@ if ($version) { print "$h{major}.$h{minor}.$h{release}$h{extra}\n"; exit } -pod2usage ("$0: no image or VM names given") if @ARGV == 0; +pod2usage (__"virt-v2v: no image or VM names given") if @ARGV == 0; # XXX This should be an option. Disable for now until we get # downloads working reliably. @@ -125,18 +202,22 @@ my $oses = inspect_operating_systems ($g, \%fses); #print "oses -----------\n"; #print Dumper($oses); -# We should probably refuse to do anything with those rare -# multiboot VMs at this point ... (XXX) +# Only work on single-root operating systems. +my $root_dev; +my @roots = keys %$oses; +die __"no root device found in this operating system image" if @roots == 0; +die __"multiboot operating systems are not supported by v2v" if @roots > 1; +$root_dev = $roots[0]; # Mount up the disks and check for applications. -my $root_dev; -foreach $root_dev (sort keys %$oses) { - my $os = $oses->{$root_dev}; - mount_operating_system ($g, $os); - inspect_in_detail ($g, $os); - $g->umount_all (); -} +my $os = $oses->{$root_dev}; +mount_operating_system ($g, $os); +inspect_in_detail ($g, $os); +$g->umount_all (); + + + @@ -174,6 +255,8 @@ from L. Richard W.M. Jones L +Matthew Booth L + =head1 COPYRIGHT Copyright (C) 2009 Red Hat Inc.