It’s always been possible, but clumsy, to access Network Block Device (NBD) disks from libguestfs, but starting in libguestfs 1.22 we hope to make this (and Gluster, Ceph and Sheepdog access) much simpler.
To show this using guestfish, I’ll start an NBD server. This could be started on another machine, but to make things simple I’ll start this server on the same machine:
$ qemu-nbd f18x64.img -t
f18x64.img is the disk image that I want to export. The
-t option makes the qemu-nbd server persistent (ie. it doesn’t just exit after serving the first client).
Now we can connect to this server using guestfish as follows:
$ guestfish Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell ><fs> add-drive "" format:raw protocol:nbd server:localhost ><fs> run
"" (quotes) are the export name. Since qemu-nbd doesn’t support export names, we can leave this empty. The main change is to specify the protocol (
nbd) and the server that libguestfs should connect to (
localhost, but a remote host would also work). I haven’t specified a port number here because both the client and server are using the standard NBD port (10809), but you could use
server:localhost:NNN to use a different port number if needed.
Ordinary guestfish commands just work:
><fs> list-filesystems /dev/sda1: ext4 /dev/fedora/root: ext4 /dev/fedora/swap: swap ><fs> inspect-os /dev/fedora/root ><fs> inspect-get-product-name /dev/fedora/root Fedora release 18 (Spherical Cow)
The next steps are to:
- Add support for more technologies. At least: Gluster, Ceph, Sheepdog and iSCSI, since those are all supported by qemu so we can easily leverage that support in libguestfs.
- Change the guestfish
-aoption to make adding remote drives possible from the command line.
The obvious [but not yet implemented] way to change the
-a option is to allow a URI to be specified. For example:
$ guestfish -a nbd://localhost/exportname
where the elements of the URI like protocol, transport, server, port number and export name translate naturally into parameters of the add-drive API.