A new Linux tool has been launched to offering better management of "guest" operating systems running as virtual machines on hypervisors.

Libguestfs is a library for accessing and modifying guest VMs and can be used for making batch configuration changes to guests, viewing and editing files inside guests, getting disk statistics, migrating between virtualisation systems, performing partial guest backups and clones, cloning guests and changing system information of Linux and Windows guests among other things.

Developed by Red Hat emerging technologies software engineer Richard Jones, libguestfs overcomes the "constant problem" with virtualisation management of how to "see inside" the guest virtual machine.
"You can measure things like how much CPU it's using or how much network traffic it generates, but people often ask how much disk space a guest is using (not allocated, but actually using)?" Jones said.

"Did the guest boot up correctly? Can you install virtio drivers in that guest? Can you add a disk to a guest and change its /etc/fstab at the same time? Can you migrate a guest from Xen to KVM, uninstall the Xen PV kernel and add the right KVM drivers?"

Libguestfs uses Linux kernel and qemu code, and can access any type of guest file system that Linux and qemu can, including ext2/3/4, btrfs, FAT and NTFS, LVM, different disk partition schemes, qcow, qcow2, and vmdk.

"What we need to use is the Linux kernel code directly," he said. "The whole thing runs inside a qemu container, and we talk from a small library to the userspace inside qemu, giving it instructions like 'edit this file', 'run this program', 'install this device driver'."

The library can be linked with C and C++ management programs and has bindings for OCaml, Perl, Python, Ruby, Java and Haskell. It can also be used from shell scripts or the command line with the guestfish utility.

"The beauty of this is that Linux already has the drivers to handle numerous different file systems, LVM, partition types and so on," Jones said, adding all the complexity is "hidden" inside the libguestfs library.

"The qemu process can decode qcow2 and a variety of other containers. We can even run an NFS server inside the guest and mount file systems on the host."