"Надежда Мозолина, 119 группа"
2021-Aug-04 13:14 UTC
[Libguestfs] Attach virtual machine disk on gluster volume via libguestfs (Error "No operating system found")
Hello! ? I kinly ask you to help me with attach?virtual machine disk via libguestfs. ? There are 3 compute node with Debian 10. Each node is used as hypervisor based on QEMU/KVM. Libvirt0:amd64 5.0.0-4+deb10u1 Libguestfs0:amd 1:1.40.2-2 I create Virtual Machines with disks on GlusterFS volume. ``` <disk type='network' device='disk'> ? ? ? <driver name='qemu' type='qcow2' cache='none' io='threads' discard='unmap'/> ? ? ? <source protocol='gluster' name='TEST/TEST1'> ? ? ? ? <host name='localhost' port='24007'/> ? ? ? </source> ? ? ? <target dev='vda' bus='virtio'/> ? ? ? <iotune> ? ? ? ? <read_bytes_sec>157286400</read_bytes_sec> ? ? ? ? <write_bytes_sec>104857600</write_bytes_sec> ? ? ? ? <read_iops_sec>40000</read_iops_sec> ? ? ? ? <write_iops_sec>25000</write_iops_sec> ? ? ? </iotune> ? ? ? <alias name='virtio-disk0'/> ? ? ? <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/> ? ? </disk> ``` I would like to work with guest image by libguestfs. Using guestfish (all rights!): ```><fs> add TEST/TEST1 protocol:gluster server:localhost:24007 ><fs> run ><fs> list-filesystems/dev/sda1: ext4 /dev/sda5: swap ``` Unfortunatly,?the using libguestfs library (C#) results in error "No operating system found". You can find my code in attached files (Source.cpp).? ? ? How should I use libguetfs library to attach virtual michine disk correctly? ? ? -- ??????? ???????? -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://listman.redhat.com/archives/libguestfs/attachments/20210804/eba7809e/attachment.htm> -------------- next part -------------- A non-text attachment was scrubbed... Name: Source.cpp Type: text/x-c++src Size: 1469 bytes Desc: not available URL: <http://listman.redhat.com/archives/libguestfs/attachments/20210804/eba7809e/attachment.bin>
Richard W.M. Jones
2021-Aug-04 19:50 UTC
[Libguestfs] Attach virtual machine disk on gluster volume via libguestfs (Error "No operating system found")
On Wed, Aug 04, 2021 at 04:14:20PM +0300, "??????? ????????, 119 ??????" wrote:> Hello! > > I kinly ask you to help me with attach virtual machine disk via libguestfs. > > There are 3 compute node with Debian 10. Each node is used as hypervisor based > on QEMU/KVM. > Libvirt0:amd64 5.0.0-4+deb10u1 > Libguestfs0:amd 1:1.40.2-2 > I create Virtual Machines with disks on GlusterFS volume. > ``` > <disk type='network' device='disk'> > <driver name='qemu' type='qcow2' cache='none' io='threads' discard> 'unmap'/> > <source protocol='gluster' name='TEST/TEST1'> > <host name='localhost' port='24007'/> > </source> > <target dev='vda' bus='virtio'/> > <iotune> > <read_bytes_sec>157286400</read_bytes_sec> > <write_bytes_sec>104857600</write_bytes_sec> > <read_iops_sec>40000</read_iops_sec> > <write_iops_sec>25000</write_iops_sec> > </iotune> > <alias name='virtio-disk0'/> > <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0' > /> > </disk> > ``` > > I would like to work with guest image by libguestfs. > > Using guestfish (all rights!): > ``` > ><fs> add TEST/TEST1 protocol:gluster server:localhost:24007 > ><fs> run > ><fs> list-filesystems > /dev/sda1: ext4 > /dev/sda5: swap > ``` > Unfortunatly, the using libguestfs library (C#) results in error "No operating > system found". You can find my code in attached files (Source.cpp).Do you know what is supposed to be in the guest? Anyway you'll get more information if you enable debugging, by calling guestfs_set_trace and guestfs_set_verbose. See: https://libguestfs.org/guestfs-faq.1.html#how-do-i-debug-when-using-the-api> How should I use libguetfs library to attach virtual michine disk correctly?The program looks fine. Rich.> > -- > ??????? ????????> #include <iostream> > #include <libvirt/libvirt.h> > #include <libguestfs/guestfs.h> > > > void main() > { > auto handle_ = guestfs_create(); > if (!handle_) { > std::cout << "Connection failed" << std::endl; > return; > } > auto protocol = "gluster"; > auto host = "localhost:24007"; > auto name = "TESTPOOL/TESTVM1"; > const char* server[2] = { host.c_str(), NULL }; > > auto res = guestfs_add_drive_opts(handle_, name, > GUESTFS_ADD_DRIVE_OPTS_FORMAT, "raw", > GUESTFS_ADD_DRIVE_OPTS_READONLY, 1, > GUESTFS_ADD_DRIVE_OPTS_PROTOCOL, protocol, > GUESTFS_ADD_DRIVE_OPTS_SERVER, server, > -1); > if (res < 0) { > std::cout << "Add drive failed" << std::endl; > return; > } > > if (guestfs_launch(handle_) < 0) { > std::cout << "Launch failed" << std::endl; > return; > } > > auto filesystems = guestfs_list_filesystems(handle_); > > if (!filesystems) { > std::cout << "Failsystem failed" << std::endl; > return; > } > > if (!filesystems[0]) { > std::cout << "No failsystem found" << std::endl; > return; > } > auto i = 0; > while (true) { > if (!filesystems[i]) { > std::cout << "No more fs" << std::endl; > break; > } > std::cout << "filesystem: " << filesystems[i] << " -- " << filesystems[i + 1] << std::endl; > i += 2; > } > > auto roots_ = guestfs_inspect_os(handle_); > if (!roots_) { > std::cout << "Couldn't get root" << std::endl; > return; > } > if (!roots_[0]) { > std::cout << "No operating system found" << std::endl; > return; > } > } > _______________________________________________ > Libguestfs mailing list > Libguestfs at redhat.com > https://listman.redhat.com/mailman/listinfo/libguestfs-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/