# libguestfs generated file # WARNING: THIS FILE IS GENERATED BY 'src/generator.ml'. # ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST. # # Copyright (C) 2009 Red Hat Inc. # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA =pod =head1 NAME Sys::Guestfs - Perl bindings for libguestfs =head1 SYNOPSIS use Sys::Guestfs; my $h = Sys::Guestfs->new (); $h->add_drive ('guest.img'); $h->launch (); $h->wait_ready (); $h->mount ('/dev/sda1', '/'); $h->touch ('/hello'); $h->sync (); =head1 DESCRIPTION The C module provides a Perl XS binding to the libguestfs API for examining and modifying virtual machine disk images. Amongst the things this is good for: making batch configuration changes to guests, getting disk used/free statistics (see also: virt-df), migrating between virtualization systems (see also: virt-p2v), performing partial backups, performing partial guest clones, cloning guests and changing registry/UUID/hostname info, and much else besides. Libguestfs uses Linux kernel and qemu code, and can access any type of guest filesystem that Linux and qemu can, including but not limited to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition schemes, qcow, qcow2, vmdk. Libguestfs provides ways to enumerate guest storage (eg. partitions, LVs, what filesystem is in each LV, etc.). It can also run commands in the context of the guest. Also you can access filesystems over FTP. =head1 ERRORS All errors turn into calls to C (see L). =head1 METHODS =over 4 =cut package Sys::Guestfs; use strict; use warnings; require XSLoader; XSLoader::load ('Sys::Guestfs'); =item $h = Sys::Guestfs->new (); Create a new guestfs handle. =cut sub new { my $proto = shift; my $class = ref ($proto) || $proto; my $self = Sys::Guestfs::_create (); bless $self, $class; return $self; } =item $h->add_drive ($filename); =item $h->add_cdrom ($filename); This function adds a virtual machine disk image C to the guest. The first time you call this function, the disk appears as IDE disk 0 (C) in the guest, the second time as C, and so on. You don't necessarily need to be root when using libguestfs. However you obviously do need sufficient permissions to access the filename for whatever operations you want to perform (ie. read access if you just want to read the image or write access if you want to modify the image). The C variation adds a CD-ROM device. =item $h->config ($param, $value); =item $h->config ($param); Use this to add arbitrary parameters to the C command line. See L. =item $h->launch (); =item $h->wait_ready (); Internally libguestfs is implemented by running a virtual machine using L. These calls are necessary in order to boot the virtual machine. You should call these two functions after configuring the handle (eg. adding drives) but before performing any actions. =item $h->set_path ($path); =item $path = $h->get_path (); See the discussion of C in the L manpage. =item $h->set_autosync ($autosync); =item $autosync = $h->get_autosync (); See the discussion of I in the L manpage. =item $h->set_verbose ($verbose); =item $verbose = $h->get_verbose (); This sets or gets the verbose messages flag. Verbose messages are sent to C. =item $content = $h->cat (path); Return the contents of the file named C. Note that this function cannot correctly handle binary files (specifically, files containing C<\0> character which is treated as end of string). For those you need to use the C<$h-Eread_file> function which has a more complex interface. Because of the message protocol, there is a transfer limit of somewhere between 2MB and 4MB. To transfer large files you should use FTP. =item @devices = $h->list_devices (); List all the block devices. The full block device names are returned, eg. C =item @partitions = $h->list_partitions (); List all the partitions detected on all block devices. The full partition device names are returned, eg. C This does not return logical volumes. For that you will need to call C<$h-Elvs>. =item $listing = $h->ll (directory); List the files in C (relative to the root directory, there is no cwd) in the format of 'ls -la'. This command is mostly useful for interactive sessions. It is I intended that you try to parse the output string. =item @listing = $h->ls (directory); List the files in C (relative to the root directory, there is no cwd). The '.' and '..' entries are not returned, but hidden files are shown. This command is mostly useful for interactive sessions. Programs should probably use C<$h-Ereaddir> instead. =item @logvols = $h->lvs (); List all the logical volumes detected. This is the equivalent of the L command. This returns a list of the logical volume device names (eg. C). See also C<$h-Elvs_full>. =item @logvols = $h->lvs_full (); List all the logical volumes detected. This is the equivalent of the L command. The "full" version includes all fields. =item $h->mount (device, mountpoint); Mount a guest disk at a position in the filesystem. Block devices are named C, C and so on, as they were added to the guest. If those block devices contain partitions, they will have the usual names (eg. C). Also LVM C-style names can be used. The rules are the same as for L: A filesystem must first be mounted on C before others can be mounted. Other filesystems can only be mounted on directories which already exist. The mounted filesystem is writable, if we have sufficient permissions on the underlying device. The filesystem options C and C are set with this call, in order to improve reliability. =item @physvols = $h->pvs (); List all the physical volumes detected. This is the equivalent of the L command. This returns a list of just the device names that contain PVs (eg. C). See also C<$h-Epvs_full>. =item @physvols = $h->pvs_full (); List all the physical volumes detected. This is the equivalent of the L command. The "full" version includes all fields. =item $h->sync (); This syncs the disk, so that any writes are flushed through to the underlying disk image. You should always call this if you have modified a disk image, before closing the handle. =item $h->touch (path); Touch acts like the L command. It can be used to update the timestamps on a file, or, if the file does not exist, to create a new zero-length file. =item @volgroups = $h->vgs (); List all the volumes groups detected. This is the equivalent of the L command. This returns a list of just the volume group names that were detected (eg. C). See also C<$h-Evgs_full>. =item @volgroups = $h->vgs_full (); List all the volumes groups detected. This is the equivalent of the L command. The "full" version includes all fields. =cut 1; =back =head1 COPYRIGHT Copyright (C) 2009 Red Hat Inc. =head1 LICENSE Please see the file COPYING.LIB for the full license. =head1 SEE ALSO L, L. =cut