
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;