[ovirt-users] Exporting a VM's disks

John Gardeniers jgardeniers at objectmastery.com
Sun Feb 22 20:35:19 UTC 2015


Hi Maor,

One of the most frustrating things about Ovirt is the inability to 
export VMs. The Import Storage Domain only works in a limited number of 
cases. Examples of where I've need to migrate VMs but where the Import 
Storage Domain idea is a no-go are:

* When the systems involved are at remote locations
* When there is a need to export from RHEV/Ovirt to some other systems, 
such as Qemu/KVM

While the first *could* be dealt with using the Import Storage Domain, 
doing so is very cumbersome, to put it mildly. It's far simpler to just 
transfer the drive image, especially as most images compress reasonably 
well.

regards,
John


On 22/02/15 02:10, Maor Lipchuk wrote:
> Hi John,
>
> Well done for writing the script.
> I was wondering, what is it that you are trying to do? If you try to migrate disks from one setup to another you might want to consider using "Import Storage Domain" (see [1]),
> though it is only supported from oVirt 3.5.
>
>
> [1]
> http://www.ovirt.org/Features/ImportStorageDomain#Work_flow_for_Import_File_Storage_Domain_-_UI_flow
>
>
> Regards,
> Maor
>
>
> ----- Original Message -----
>> From: "John Gardeniers" <jgardeniers at objectmastery.com>
>> To: "users" <users at ovirt.org>
>> Sent: Friday, February 20, 2015 12:33:48 AM
>> Subject: [ovirt-users] Exporting a VM's disks
>>
>> Hi All,
>>
>> Having recently had a need to manually export a VM from our RHEV
>> environment I searched for a way to identify the VM's disks with the
>> files on the storage system. The search led me to
>> http://rhevdup.blogspot.com.au/2013/05/manual-export-of-vm-from-rhev.html but
>> unfortunately, the script in that post only lists the first drive for a
>> VM, making it less than useful for exporting VMs with multiple drives.
>>
>> Inspired by that post I wrote my own version in Perl (I detest Python).
>> The script works on our RHEV 3.4 with a Gluster storage back end. I
>> would greatly appreciate it if some of you could test it on other
>> RHEV/Ovirt versions and on different storage systems. Thanks for any
>> feedback.
>>
>> regards,
>> John
>>
>>
>> #! /usr/bin/env perl
>>
>> # Run this script on the RHEV/Ovirt engine (management) machine
>> #
>> # Find the files on the storage which belong to a VM's disk(s)
>> # Input parameter: A single VM name (case sensitive)
>>
>> use DBI;
>>
>> my $vm = shift or die "No VM specified\n";
>>
>> my $conf = '/etc/ovirt-engine/engine.conf.d/10-setup-database.conf';
>> my $host = 'localhost';
>> my $db;
>> my $user;
>> my $pass;
>> my $port = 5432;
>>
>> open my $fi, '<', $conf or die "Can't read $conf\n";
>>
>> while(<$fi>) {
>>       my $line = $_;
>>       $host = $1 if($line =~ /ENGINE_DB_HOST="(.*)"/);
>>       $db = $1 if($line =~ /ENGINE_DB_DATABASE="(.*)"/);
>>       $user = $1 if($line =~ /ENGINE_DB_USER="(.*)"/);
>>       $pass = $1 if($line =~ /ENGINE_DB_PASSWORD="(.*)"/);
>>       $port = $1 if($line =~ /ENGINE_DB_PORT="(.*)"/);
>> }
>>
>> die "Unable to get all database details\n" if(!$db || !$user || !$pass);
>> my $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port", $user,
>> $pass, {AutoCommit=>1,RaiseError=>1,PrintError=>0});
>> die "Error connecting to the database\n" if(!$dbh);
>>
>> # Get the device ID
>> my $sql = "select device_id from vms_for_disk_view where array_vm_names
>> = '{$vm}'";
>> my @row = $dbh->selectrow_array($sql);
>> my $vm_id = $row[0];
>>
>> if($vm_id) {
>>       print "\nVM ID:      $vm_id\n";
>>
>>       # Get the drive ID(s)
>>       $sql = "select image_guid, to_char(size/1024/1024/1024.0,
>> '999G999D99'), to_char(actual_size/1024/1024/1024.0, '999G999D99'),
>> storage_name from images_storage_domain_view where vm_names = '$vm' and
>> entity_type = 'VM'";
>>       my $sth = $dbh->prepare($sql) || die "Error preparing the SQL
>> string \"$sql\"\n$dbh::errstr";
>>       print "\nError executing $sql\n$DBI::errstr\n\n" unless
>> $sth->execute();
>>       print "Disk ID(s): ";
>>       my $cnt = 0;
>>
>>       while (@row = $sth->fetchrow_array) {
>>           print "            " if($cnt++);
>>           print "$row[0], $row[1]GB allocated, $row[2]GB actual, on
>> $row[3]\n";
>>       }
>>
>>       $sth->finish;
>>       print "\n";
>> } else {
>>       print "\nVM \"$vm\" not found. Be aware that the name is case
>> sensitive.\n\n";
>> }
>>
>> $dbh->disconnect;
>>
>> _______________________________________________
>> Users mailing list
>> Users at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/users
>>
> ______________________________________________________________________
> This email has been scanned by the Symantec Email Security.cloud service.
> For more information please visit http://www.symanteccloud.com
> ______________________________________________________________________




More information about the Users mailing list