[Libguestfs] Attach virtual machine disk on gluster volume via libguestfs (Error "No operating system found")

Richard W.M. Jones rjones at redhat.com
Wed Aug 4 19:50:44 UTC 2021


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/




More information about the Libguestfs mailing list