guestfish
- guestfish -a disk.img
+ guestfish [--ro|--rw] -a disk.img
- guestfish -a disk.img -m dev[:mountpoint]
+ guestfish [--ro|--rw] -a disk.img -m dev[:mountpoint]
guestfish -d libvirt-domain
- guestfish -a disk.img -i
+ guestfish [--ro|--rw] -a disk.img -i
guestfish -d libvirt-domain -i
(read-only) option to use guestfish safely if the disk image or
virtual machine might be live.
+=head1 DESCRIPTION
+
+Guestfish is a shell and command-line tool for examining and modifying
+virtual machine filesystems. It uses libguestfs and exposes all of
+the functionality of the guestfs API, see L<guestfs(3)>.
+
+Guestfish gives you structured access to the libguestfs API, from
+shell scripts or the command line or interactively. If you want to
+rescue a broken virtual machine image, you should look at the
+L<virt-rescue(1)> command.
+
=head1 EXAMPLES
=head2 As an interactive shell
'man' to read the manual
'quit' to quit the shell
- ><fs> man
+ ><fs> add-ro disk.img
+ ><fs> run
+ ><fs> list-filesystems
+ /dev/sda1: ext4
+ /dev/vg_guest/lv_root: ext4
+ /dev/vg_guest/lv_swap: swap
+ ><fs> mount /dev/vg_guest/lv_root /
+ ><fs> cat /etc/fstab
+ # /etc/fstab
+ # Created by anaconda
+ [...]
+ ><fs> exit
=head2 From shell scripts
-Create a new C</etc/motd> file in a guest:
+Create a new C</etc/motd> file in a guest or disk image:
guestfish <<_EOF_
add disk.img
write /etc/motd "Welcome, new users"
_EOF_
-List the LVM logical volumes in a guest:
+List the LVM logical volumes in a disk image:
guestfish -a disk.img --ro <<_EOF_
run
lvs
_EOF_
+List all the filesystems in a disk image:
+
+ guestfish -a disk.img --ro <<_EOF_
+ run
+ list-filesystems
+ _EOF_
+
=head2 On one command line
Update C</etc/resolv.conf> in a guest:
Edit C</boot/grub/grub.conf> interactively:
- guestfish --add disk.img \
+ guestfish --rw --add disk.img \
--mount /dev/vg_guest/lv_root \
--mount /dev/sda1:/boot \
edit /boot/grub/grub.conf
guestfish --ro -d libvirt-domain -i cat /etc/group
+Another way to edit C</boot/grub/grub.conf> interactively is:
+
+ guestfish --rw -a disk.img -i edit /boot/grub/grub.conf
+
=head2 As a script interpreter
Create a 100MB disk containing an ext2-formatted partition:
=head2 Remote control
- eval `guestfish --listen --ro`
- guestfish --remote add disk.img
+ eval "`guestfish --listen`"
+ guestfish --remote add-ro disk.img
guestfish --remote run
guestfish --remote lvs
-=head1 DESCRIPTION
-
-Guestfish is a shell and command-line tool for examining and modifying
-virtual machine filesystems. It uses libguestfs and exposes all of
-the functionality of the guestfs API, see L<guestfs(3)>.
-
-Guestfish gives you structured access to the libguestfs API, from
-shell scripts or the command line or interactively. If you want to
-rescue a broken virtual machine image, you should look at the
-L<virt-rescue(1)> command.
-
=head1 OPTIONS
=over 4
Add a block device or virtual machine image to the shell.
+The format of the disk image is auto-detected. To override this and
+force a particular format use the I<--format=..> option.
+
=item B<-c URI> | B<--connect URI>
When used in conjunction with the I<-d> option, this specifies
the libvirt URI to use. The default is to use the default libvirt
connection.
+=item B<--csh>
+
+If using the I<--listen> option and a csh-like shell, use this option.
+See section L</REMOTE CONTROL AND CSH> below.
+
=item B<-d libvirt-domain> | B<--domain libvirt-domain>
Add disks from the named libvirt domain. If the I<--ro> option is
#!/usr/bin/guestfish -f
+=item B<--format=raw|qcow2|..> | B<--format>
+
+The default for the I<-a> option is to auto-detect the format of the
+disk image. Using this forces the disk format for I<-a> options which
+follow on the command line. Using I<--format> with no argument
+switches back to auto-detection for subsequent I<-a> options.
+
+For example:
+
+ guestfish --format=raw -a disk.img
+
+forces raw format (no auto-detection) for C<disk.img>.
+
+ guestfish --format=raw -a disk.img --format -a another.img
+
+forces raw format (no auto-detection) for C<disk.img> and reverts to
+auto-detection for C<another.img>.
+
+If you have untrusted raw-format guest disk images, you should use
+this option to specify the disk format. This avoids a possible
+security problem with malicious guests (CVE-2010-3851). See also
+L</add-drive-opts>.
+
=item B<-i> | B<--inspector>
Using L<virt-inspector(1)> code, inspect the disks looking for
(for active domains, readonly), or specify the block device directly:
- guestfish -a /dev/Guests/MyGuest -i
+ guestfish --rw -a /dev/Guests/MyGuest -i
Note that the command line syntax changed slightly over older
versions of guestfish. You can still use the old syntax:
If any I<-m> or I<--mount> options are given, the guest is
automatically launched.
-If you don't know what filesystems a disk image contains, you
-can either run guestfish without this option, then list the partitions
-and LVs available (see L</list-partitions> and L</lvs> commands),
-or you can use the L<virt-list-filesystems(1)> program.
+If you don't know what filesystems a disk image contains, you can
+either run guestfish without this option, then list the partitions,
+filesystems and LVs available (see L</list-partitions>,
+L</list-filesystems> and L</lvs> commands), or you can use the
+L<virt-filesystems(1)> program.
=item B<-n> | B<--no-sync>
Note that prepared disk images created with I<-N> are not affected by
the I<--ro> option.
+See also L</OPENING DISKS FOR READ AND WRITE> below.
+
=item B<--selinux>
Enable SELinux support for the guest. See L<guestfs(3)/SELINUX>.
Display the guestfish / libguestfs version number and exit.
+=item B<-w> | B<--rw>
+
+This option does nothing at the moment.
+See L</OPENING DISKS FOR READ AND WRITE> below.
+
=item B<-x>
Echo each command before executing it.
C<run> is a synonym for C<launch>. You must C<launch> (or C<run>)
your guest before mounting or performing any other commands.
-The only exception is that if the I<-m> or I<--mount> option was
-given, the guest is automatically run for you (simply because
-guestfish can't mount the disks you asked for without doing this).
+The only exception is that if any of the I<-i>, I<-m>, I<--mount>,
+I<-N> or I<--new> options were given then C<run> is done
+automatically, simply because guestfish can't perform the action you
+asked for without doing this.
+
+=head1 OPENING DISKS FOR READ AND WRITE
+
+The guestfish (and L<guestmount(1)>) options I<--ro> and I<--rw>
+affect whether the other command line options I<-a>, I<-c>, I<-d>,
+I<-i> and I<-m> open disk images read-only or for writing.
+
+In libguestfs E<lt> 1.6.2, guestfish and guestmount defaulted to
+opening disk images supplied on the command line for write. To open a
+disk image read-only you have to do I<-a image --ro>.
+
+This matters: If you accidentally open a live VM disk image writable
+then you will cause irreversible disk corruption.
+
+By libguestfs 1.8 we intend to change the default the other way. Disk
+images will be opened read-only. You will have to either specify
+I<guestfish --rw> or change a configuration file in order to get write
+access for disk images specified by those other command line options.
+
+This version of guestfish has a I<--rw> option which does nothing (it
+is already the default). However it is highly recommended that you
+use this option to indicate that guestfish needs write access, and to
+prepare your scripts for the day when this option will be required for
+write access.
+
+B<Note:> This does I<not> affect commands like L</add> and L</mount>,
+or any other libguestfs program apart from guestfish and guestmount.
=head1 QUOTING
command "/bin/echo 'foo bar'"
command "/bin/echo \'foo\'"
+=head1 OPTIONAL ARGUMENTS
+
+Some commands take optional arguments. These arguments appear in this
+documentation as C<[argname:..]>. You can use them as in these
+examples:
+
+ add-drive-opts filename
+
+ add-drive-opts filename readonly:true
+
+ add-drive-opts filename format:qcow2 readonly:false
+
+Each optional argument can appear at most once. All optional
+arguments must appear after the required ones.
+
=head1 NUMBERS
This section applies to all commands which can take integers
rm-rf /home/*
-Assuming you don't have a directory literally called C</home/*>
+Assuming you don't have a directory called literally C</home/*>
then the above command will return an error.
To perform wildcard expansion, use the C<glob> command.
C<glob> only works on simple guest paths and not on device names.
If you have several parameters, each containing a wildcard, then glob
-will perform a cartesian product.
+will perform a Cartesian product.
=head1 COMMENTS
Finally you have to tell LVM to scan for volume groups on
the newly created mapper device:
- ><fs> vgscan
- ><fs> vg-activate-all true
+ vgscan
+ vg-activate-all true
The logical volume(s) can now be mounted in the usual way.
it and deactivate the volume groups by calling C<vg-activate false VG>
on each one. Then you can close the mapper device:
- ><fs> vg-activate false /dev/VG
- ><fs> luks-close /dev/mapper/luksdev
+ vg-activate false /dev/VG
+ luks-close /dev/mapper/luksdev
=head1 WINDOWS PATHS
Start a guestfish server process using:
- eval `guestfish --listen`
+ eval "`guestfish --listen`"
and then send it commands by doing:
which is how the I<--remote> option knows where to send the commands.
You can have several guestfish listener processes running using:
- eval `guestfish --listen`
+ eval "`guestfish --listen`"
pid1=$GUESTFISH_PID
- eval `guestfish --listen`
+ eval "`guestfish --listen`"
pid2=$GUESTFISH_PID
...
guestfish --remote=$pid1 cmd
guestfish --remote=$pid2 cmd
+=head2 REMOTE CONTROL AND CSH
+
+When using csh-like shells (csh, tcsh etc) you have to add the
+I<--csh> option:
+
+ eval "`guestfish --listen --csh`"
+
=head2 REMOTE CONTROL DETAILS
Remote control happens over a Unix domain socket called
help
help cmd
-Without any parameter, this lists all commands. With a C<cmd>
-parameter, this displays detailed help for a command.
+Without any parameter, this provides general help.
+
+With a C<cmd> parameter, this displays detailed help for that command.
=head2 quit | exit
L<virt-cat(1)>,
L<virt-df(1)>,
L<virt-edit(1)>,
+L<virt-filesystems(1)>,
+L<virt-inspector(1)>,
L<virt-list-filesystems(1)>,
L<virt-list-partitions(1)>,
L<virt-ls(1)>,