On 8/1/19 10:12 AM, Jan Horak wrote:
Hi all,

i created a script in PHP for create a virtual server with two QCOW2 discs … 
one is our system for installation and second is target system.

After successfully instalation (create a blank Debian system, prepare all files 
and grub partitions) i need a restart virtual without a installation disk.

If i use Virsh:

detach-disk --domain debian-test2 --persistent --target vda
reset debian-test2

everything works well.

If i use a PHP, there is „complicated“ way and „simple“ way:

1, complicated:

libvirt_domain_destroy($domain);
libvirt_domain_undefine($domain);

$xml = domain_create_xml($name,$uuid,$memory,$cpu,$vnc,$mac);
$domain = libvirt_domain_define_xml($server->conn, $xml);
libvirt_domain_disk_add($domain, "/users/".$name.".img", "vdb", "virtio", 
"qcow2", NULL);
libvirt_domain_create($domain);

(or instead libvirt_domain_disk_add i can define disk directly in XML)

But in this case, the server will not boot (GRUB error)

Question is, how GRUB refers to the disk where kernel is to be found. Also, I suspect it is not GRUB that is complaining, but SeaBIOS which hasn't found any bootable device. It's only an assumption becasue I don't know how domain_create_xml() works - it's not a libvirt-php function. There are two possibilities here:

1) make sure domain_create_xml() sets boot devices
2) construct disk XML yourself, and put "<boot order='N'/>" into it


2, simple:

libvirt_domain_disk_remove($domain,“vda“);
libvirt_domain_reboot($domain);

The problem of this solution is thats not working. The remove disk is failing 
with error „Unable attach disk“ - i looks to source code, and yes, there is a 
mystake with „attach“/„detach“, but main problem i see in log from libvirt:

Oh, that's only typo in the error message. In fact the detach API is called. And it fails.


Aug  1 02:57:05 ry libvirtd[19051]: missing source information for device vda

I try to put source detail to xml in source of PHP module

libvirt-domain.c:

   822      if (asprintf(&newXml,
   823                   "    <disk type='file' device='disk'>\n"
   824                   "      <target dev='%s'/>\n"
   825                   "    </disk>", dev) < 0) {
   826          set_error("Out of memory" TSRMLS_CC);
   827          goto error;
   828      }

but my attempts was unsuccesfull (i’m not C programmer).

Yes, this minimalistic XML is not good as detach API requires full device XML. I'll fix this soon.


Questions:

A, why complicated way is not working and system dont want boot (GRUB error) if 
virsh works fine
B, why libvirt_domain_disk_remove is not work ? I use libvirt and libvirt-php 
latest from git.

I've pushed fixes here:


Please give it a try.

Michal

_______________________________________________
libvirt-users mailing list
libvirt-users@redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-users

Reply via email to