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(a)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/