[Pkg-libvirt-commits] [libguestfs] 02/37: Imported Upstream version 1.15.1

Hilko Bengen bengen at moszumanska.debian.org
Sun Dec 22 18:13:32 UTC 2013


This is an automated email from the git hooks/post-receive script.

bengen pushed a commit to annotated tag debian/1%1.15.10-1
in repository libguestfs.

commit a9f3a3d16180a28b7068e9500305a69ec054e7a0
Author: Hilko Bengen <bengen at debian.org>
Date:   Fri Nov 11 11:53:24 2011 +0100

    Imported Upstream version 1.15.1
---
 BUGS                                               |    8 +-
 ChangeLog                                          |   38 +
 Makefile.am                                        |   16 +
 Makefile.in                                        |   16 +
 appliance/packagelist.in                           |    1 +
 configure                                          |   26 +-
 configure.ac                                       |    2 +-
 contrib/README                                     |    6 +
 contrib/autobuild/autobuild.sh                     |  109 +
 contrib/guestfsd-in-wine.sh                        |  117 +
 contrib/intro/libguestfs-intro.html                |  253 ++
 contrib/intro/overview.svg                         |  524 +++
 contrib/intro/talk.txt                             |    7 +
 contrib/intro/tools.svg                            |  711 +++++
 contrib/visualize-alignment/.gitignore             |    2 +
 contrib/visualize-alignment/README                 |   70 +
 .../guestfish-N-fs-10M-aligned-part-disk.qtr       |  122 +
 contrib/visualize-alignment/guestfish-N-fs-10M.qtr |  122 +
 .../visualize-alignment/guestfish-add-mount.qtr    |   72 +
 .../guestfish-lv-ext4-4k-write-hello.qtr           |  104 +
 .../visualize-alignment/guestfish-lv-ext4-4k.qtr   |  450 +++
 .../visualize-alignment/guestfish-write-hello.qtr  |  101 +
 .../qemu-0.13-trace-block-device-access.patch      |  104 +
 contrib/visualize-alignment/tracetops.ml           |  423 +++
 daemon/debug.c                                     |    2 +-
 debian/changelog                                   |    4 +-
 fish/inspect.c                                     |    8 +-
 generator/generator_perl.ml                        |   92 +-
 libguestfs.pc                                      |    2 +-
 perl/lib/Sys/Guestfs.pm                            | 3364 ++++++++++++++++++++
 perl/t/900-introspection.t                         |   42 +
 po-docs/ja.po                                      |  324 +-
 po-docs/ja/guestfish.1                             |    2 +-
 po-docs/ja/guestfs.3                               |    2 +-
 po-docs/ja/guestmount.1                            |    2 +-
 po-docs/ja/libguestfs-test-tool.1                  |    2 +-
 po-docs/ja/virt-alignment-scan.1                   |    2 +-
 po-docs/ja/virt-cat.1                              |    2 +-
 po-docs/ja/virt-copy-in.1                          |    2 +-
 po-docs/ja/virt-copy-out.1                         |    2 +-
 po-docs/ja/virt-df.1                               |    2 +-
 po-docs/ja/virt-edit.1                             |    2 +-
 po-docs/ja/virt-filesystems.1                      |    2 +-
 po-docs/ja/virt-inspector.1                        |    2 +-
 po-docs/ja/virt-list-filesystems.1                 |    2 +-
 po-docs/ja/virt-list-partitions.1                  |    2 +-
 po-docs/ja/virt-ls.1                               |    2 +-
 po-docs/ja/virt-make-fs.1                          |    2 +-
 po-docs/ja/virt-rescue.1                           |   60 +-
 po-docs/ja/virt-rescue.pod                         |   53 +-
 po-docs/ja/virt-resize.1                           |    2 +-
 po-docs/ja/virt-sparsify.1                         |    2 +-
 po-docs/ja/virt-sysprep.1                          |    2 +-
 po-docs/ja/virt-tar-in.1                           |    2 +-
 po-docs/ja/virt-tar-out.1                          |    2 +-
 po-docs/ja/virt-tar.1                              |    2 +-
 po-docs/ja/virt-win-reg.1                          |    2 +-
 po-docs/libguestfs-docs.pot                        |  323 +-
 po-docs/uk.po                                      |  337 +-
 po-docs/uk/guestfish.1                             |    2 +-
 po-docs/uk/guestfs.3                               |    2 +-
 po-docs/uk/guestmount.1                            |    2 +-
 po-docs/uk/libguestfs-test-tool.1                  |    2 +-
 po-docs/uk/virt-alignment-scan.1                   |    2 +-
 po-docs/uk/virt-cat.1                              |    2 +-
 po-docs/uk/virt-copy-in.1                          |    2 +-
 po-docs/uk/virt-copy-out.1                         |    2 +-
 po-docs/uk/virt-df.1                               |    2 +-
 po-docs/uk/virt-edit.1                             |    2 +-
 po-docs/uk/virt-filesystems.1                      |    2 +-
 po-docs/uk/virt-inspector.1                        |    2 +-
 po-docs/uk/virt-list-filesystems.1                 |    2 +-
 po-docs/uk/virt-list-partitions.1                  |    2 +-
 po-docs/uk/virt-ls.1                               |    2 +-
 po-docs/uk/virt-make-fs.1                          |    2 +-
 po-docs/uk/virt-rescue.1                           |   60 +-
 po-docs/uk/virt-rescue.pod                         |   53 +-
 po-docs/uk/virt-resize.1                           |    2 +-
 po-docs/uk/virt-sparsify.1                         |    2 +-
 po-docs/uk/virt-sysprep.1                          |    2 +-
 po-docs/uk/virt-tar-in.1                           |    2 +-
 po-docs/uk/virt-tar-out.1                          |    2 +-
 po-docs/uk/virt-tar.1                              |    2 +-
 po-docs/uk/virt-win-reg.1                          |    2 +-
 po/en_GB.gmo                                       |  Bin 10781 -> 10781 bytes
 po/en_GB.po                                        |   89 +-
 po/es.gmo                                          |  Bin 94335 -> 94335 bytes
 po/es.po                                           |   90 +-
 po/gu.gmo                                          |  Bin 53605 -> 53605 bytes
 po/gu.po                                           |   67 +-
 po/hi.gmo                                          |  Bin 43389 -> 43389 bytes
 po/hi.po                                           |   67 +-
 po/kn.gmo                                          |  Bin 52822 -> 52822 bytes
 po/kn.po                                           |   67 +-
 po/libguestfs.pot                                  |   69 +-
 po/ml.gmo                                          |  Bin 56355 -> 56355 bytes
 po/ml.po                                           |   67 +-
 po/mr.gmo                                          |  Bin 107083 -> 107083 bytes
 po/mr.po                                           |   89 +-
 po/nl.gmo                                          |  Bin 94352 -> 92463 bytes
 po/nl.po                                           |   69 +-
 po/or.gmo                                          |  Bin 52173 -> 52173 bytes
 po/or.po                                           |   67 +-
 po/pa.gmo                                          |  Bin 92358 -> 92358 bytes
 po/pa.po                                           |   89 +-
 po/pl.gmo                                          |  Bin 99008 -> 96999 bytes
 po/pl.po                                           |   69 +-
 po/ta.gmo                                          |  Bin 47311 -> 47311 bytes
 po/ta.po                                           |   67 +-
 po/te.gmo                                          |  Bin 49970 -> 49970 bytes
 po/te.po                                           |   67 +-
 po/uk.gmo                                          |  Bin 129728 -> 127156 bytes
 po/uk.po                                           |   69 +-
 rescue/virt-rescue.c                               |  166 +
 rescue/virt-rescue.pod                             |   54 +-
 115 files changed, 8933 insertions(+), 609 deletions(-)

diff --git a/BUGS b/BUGS
index a257089..4eac2fc 100644
--- a/BUGS
+++ b/BUGS
@@ -1,5 +1,5 @@
 NOTE: This file is automatically generated from "update-bugs.sh".
-Last updated: 2011-10-27
+Last updated: 2011-11-01
 
 This contains a local list of the bugs that are open against
 libguestfs.  Bugs are tracked in the Red Hat Bugzilla database
@@ -171,12 +171,12 @@ You can help by testing the fixes.
 691389 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=691389
   Extended attributes don't work over guestmount (FUSE)
 
-748370 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=748370
-  guestfish fails to read disk images after os upgrade
-
 657499 MODIFIED https://bugzilla.redhat.com/show_bug.cgi?id=657499
   checksum: wrong check sum type causes umount to fail
 
+748370 ON_QA https://bugzilla.redhat.com/show_bug.cgi?id=748370
+  guestfish fails to read disk images after os upgrade
+
 --------------------------------------------------
 These bugs are in the VERIFIED state.
 
diff --git a/ChangeLog b/ChangeLog
index 0da3141..ad2b87b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,43 @@
+2011-11-01  Richard W.M. Jones  <rjones at redhat.com>
+
+	contrib: Add all contrib files to EXTRA_DIST.
+
+	contrib: Add libguestfs talk.
+	This is a short (10-15 min) talk that I give to introduce the main
+	features of libguestfs.  The "slides" are in the form of a complete
+	self-contained HTML page with a handful images that can be easily
+	distributed before the talk.
+
+	rescue: Add --suggest option to suggest mount commands.
+
+	fish: Use size_t instead of int when counting strings.
+
+2011-10-31  Matthew Booth  <mbooth at redhat.com>
+
+	Fix debug help error message.
+	When given an invalid debug command, libguestfs responds with the
+	error message:
+
+	  libguestfs: error: debug: use 'debug help' to list the supported commands
+
+	However this command does not work, as debug requires two
+	arguments. This change updates the message to prompt the user to use
+	'debug help 0'.
+
+2011-10-31  Richard W.M. Jones  <rjones at redhat.com>
+
+	appliance: Add 'mdadm' package.
+
+2011-10-28  Richard W.M. Jones  <rjones at redhat.com>
+
+	perl: Add %guestfs_introspection hash with introspection information.
+	Because this is a useful introspection API, it is a candidate for
+	being backported into older stable branches.
+
 2011-10-27  Richard W.M. Jones  <rjones at redhat.com>
 
+	Version 1.15.0.
+
 	Pull latest translations from Transifex.
 
 	generator: Remove DangerWillRobinson.
diff --git a/Makefile.am b/Makefile.am
index 388cdeb..a7038f3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -102,7 +102,23 @@ EXTRA_DIST = \
 	bugs-in-changelog.sh \
 	autogen.sh \
 	bindtests \
+	contrib/autobuild/autobuild.sh \
+	contrib/guestfsd-in-wine.sh \
+	contrib/intro/libguestfs-intro.html \
+	contrib/intro/overview.svg \
+	contrib/intro/talk.txt \
+	contrib/intro/tools.svg \
 	contrib/README \
+	contrib/visualize-alignment/.gitignore \
+	contrib/visualize-alignment/guestfish-add-mount.qtr \
+	contrib/visualize-alignment/guestfish-lv-ext4-4k.qtr \
+	contrib/visualize-alignment/guestfish-lv-ext4-4k-write-hello.qtr \
+	contrib/visualize-alignment/guestfish-N-fs-10M-aligned-part-disk.qtr \
+	contrib/visualize-alignment/guestfish-N-fs-10M.qtr \
+	contrib/visualize-alignment/guestfish-write-hello.qtr \
+	contrib/visualize-alignment/qemu-0.13-trace-block-device-access.patch \
+	contrib/visualize-alignment/README \
+	contrib/visualize-alignment/tracetops.ml \
 	debian/.gitignore \
 	debian/changelog \
 	debian/compat \
diff --git a/Makefile.in b/Makefile.in
index 3a8c3f6..c90c4ca 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1332,7 +1332,23 @@ EXTRA_DIST = \
 	bugs-in-changelog.sh \
 	autogen.sh \
 	bindtests \
+	contrib/autobuild/autobuild.sh \
+	contrib/guestfsd-in-wine.sh \
+	contrib/intro/libguestfs-intro.html \
+	contrib/intro/overview.svg \
+	contrib/intro/talk.txt \
+	contrib/intro/tools.svg \
 	contrib/README \
+	contrib/visualize-alignment/.gitignore \
+	contrib/visualize-alignment/guestfish-add-mount.qtr \
+	contrib/visualize-alignment/guestfish-lv-ext4-4k.qtr \
+	contrib/visualize-alignment/guestfish-lv-ext4-4k-write-hello.qtr \
+	contrib/visualize-alignment/guestfish-N-fs-10M-aligned-part-disk.qtr \
+	contrib/visualize-alignment/guestfish-N-fs-10M.qtr \
+	contrib/visualize-alignment/guestfish-write-hello.qtr \
+	contrib/visualize-alignment/qemu-0.13-trace-block-device-access.patch \
+	contrib/visualize-alignment/README \
+	contrib/visualize-alignment/tracetops.ml \
 	debian/.gitignore \
 	debian/changelog \
 	debian/compat \
diff --git a/appliance/packagelist.in b/appliance/packagelist.in
index f8f2642..9b723d0 100644
--- a/appliance/packagelist.in
+++ b/appliance/packagelist.in
@@ -108,6 +108,7 @@ jfsutils
 lsof
 lvm2
 lzop
+mdadm
 module-init-tools
 net-tools
 /*
diff --git a/configure b/configure
index 519b1e0..ac47865 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for libguestfs 1.15.0.
+# Generated by GNU Autoconf 2.68 for libguestfs 1.15.1.
 #
 #
 # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -567,8 +567,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libguestfs'
 PACKAGE_TARNAME='libguestfs'
-PACKAGE_VERSION='1.15.0'
-PACKAGE_STRING='libguestfs 1.15.0'
+PACKAGE_VERSION='1.15.1'
+PACKAGE_STRING='libguestfs 1.15.1'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -2282,7 +2282,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libguestfs 1.15.0 to adapt to many kinds of systems.
+\`configure' configures libguestfs 1.15.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -2352,7 +2352,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libguestfs 1.15.0:";;
+     short | recursive ) echo "Configuration of libguestfs 1.15.1:";;
    esac
   cat <<\_ACEOF
 
@@ -2522,7 +2522,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libguestfs configure 1.15.0
+libguestfs configure 1.15.1
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -3264,7 +3264,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libguestfs $as_me 1.15.0, which was
+It was created by libguestfs $as_me 1.15.1, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -4171,7 +4171,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libguestfs'
- VERSION='1.15.0'
+ VERSION='1.15.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4268,8 +4268,8 @@ else
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: libguestfs version 1.15.0$libguestfs_extra" >&5
-$as_echo "$as_me: libguestfs version 1.15.0$libguestfs_extra" >&6;}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: libguestfs version 1.15.1$libguestfs_extra" >&5
+$as_echo "$as_me: libguestfs version 1.15.1$libguestfs_extra" >&6;}
 
 
 $as_echo "#define PACKAGE_VERSION_MAJOR 1" >>confdefs.h
@@ -4278,7 +4278,7 @@ $as_echo "#define PACKAGE_VERSION_MAJOR 1" >>confdefs.h
 $as_echo "#define PACKAGE_VERSION_MINOR 15" >>confdefs.h
 
 
-$as_echo "#define PACKAGE_VERSION_RELEASE 0" >>confdefs.h
+$as_echo "#define PACKAGE_VERSION_RELEASE 1" >>confdefs.h
 
 
 cat >>confdefs.h <<_ACEOF
@@ -53153,7 +53153,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libguestfs $as_me 1.15.0, which was
+This file was extended by libguestfs $as_me 1.15.1, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -53223,7 +53223,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libguestfs config.status 1.15.0
+libguestfs config.status 1.15.1
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
diff --git a/configure.ac b/configure.ac
index cda17a9..7a19e33 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
 # freeform string.
 m4_define([libguestfs_major],   [1])
 m4_define([libguestfs_minor],   [15])
-m4_define([libguestfs_release], [0])
+m4_define([libguestfs_release], [1])
 
 AC_INIT([libguestfs],libguestfs_major.libguestfs_minor.libguestfs_release)
 AC_CONFIG_AUX_DIR([build-aux])
diff --git a/contrib/README b/contrib/README
index ce695ec..a708d90 100644
--- a/contrib/README
+++ b/contrib/README
@@ -28,6 +28,12 @@ guestfsd-in-wine.sh
         Run a Windows-compiled guestfsd under Wine.  Read the
         instructions at the top of this file carefully.
 
+intro/ "Slides" for an intro to libguestfs.  This is a short (10-15
+        min) talk that I give to introduce the main features of
+        libguestfs.  The slides are in the form of a complete
+        self-contained HTML page with a handful images that can be
+        easily distributed before the talk.
+
 visualize-alignment/
         Tests for visualizing block device reads and writes and
         alignment using a patched qemu.  See the README file in that
diff --git a/contrib/autobuild/autobuild.sh b/contrib/autobuild/autobuild.sh
new file mode 100755
index 0000000..c7b0fed
--- /dev/null
+++ b/contrib/autobuild/autobuild.sh
@@ -0,0 +1,109 @@
+#!/bin/bash -
+# libguestfs autobuild script
+# Copyright (C) 2009-2011 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# This script is used to download and test the latest tarball on
+# Debian and other platforms.  It runs from a cron job and sends email
+# to the mailing list about the status.
+
+set -e
+
+# Subject line of email prefix.
+prefix="${1:-[autobuild]}"
+
+# Where we send mail.
+mailto="rjones at redhat.com"
+
+# Move to temporary directory for building.
+tmpdir="$(mktemp -d --tmpdir=/var/tmp)"
+cd "$tmpdir"
+
+# The libguestfs index page contains some hidden fields to help us
+# find the latest version programmatically.
+version=$(wget --no-cache -O- -q http://libguestfs.org |
+          grep '^LATEST-VERSION:' | awk '{print $2}')
+url=$(wget --no-cache -O- -q http://libguestfs.org |
+      grep '^LATEST-URL:' | awk '{print $2}')
+filename=$(basename "$url")
+directory=$(basename "$url" .tar.gz)
+
+echo "--------------------------------------------------"
+echo "prefix     $prefix"
+echo "libguestfs $version"
+echo "url        $url"
+echo "build dir  $tmpdir/$directory"
+echo "--------------------------------------------------"
+
+# Grab the latest tarball from upstream.
+wget "$url"
+
+# Unpack the tarball.
+tar zxf "$filename"
+
+# Enter directory.
+cd "$directory"
+
+# This function is called if any step fails.
+failed ()
+{
+    tail -100 ../build.log > ../build.log.tail
+    mutt -s "$prefix libguestfs $version FAILED $1" "$mailto" -a ../build.log.tail <<EOF
+Autobuild failed.  The last 100 lines of the build log are
+attached.
+
+For the full log see the build machine, in
+$tmpdir/build.log
+EOF
+    rm ../build.log.tail
+}
+
+# This function is called if the build is successful.
+ok ()
+{
+    mutt -s "$prefix libguestfs $version ok" "$mailto" <<EOF
+Autobuild was successful.
+
+For the full log see the build machine, in
+$tmpdir/build.log
+EOF
+}
+
+# Ensure that we get full debugging output.
+export LIBGUESTFS_DEBUG=1
+export LIBGUESTFS_TRACE=1
+
+# Configure and build.
+echo "configure"
+./configure > ../build.log 2>&1 || {
+    failed "configure"
+    exit 1
+}
+echo "make"
+make >> ../build.log 2>&1 || {
+    failed "make"
+    exit 1
+}
+
+# Run the tests.
+echo "make check"
+make check >> ../build.log 2>&1 || {
+    failed "make check"
+    exit 1
+}
+
+echo "finished"
+ok
diff --git a/contrib/guestfsd-in-wine.sh b/contrib/guestfsd-in-wine.sh
new file mode 100755
index 0000000..bc9d87b
--- /dev/null
+++ b/contrib/guestfsd-in-wine.sh
@@ -0,0 +1,117 @@
+#!/bin/bash -
+# Copyright (C) 2009 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# INSTRUCTIONS
+#----------------------------------------------------------------------
+#
+# This is a QEMU wrapper script that allows you to run a
+# Windows-compiled guestfsd.exe (daemon) under Wine from a Linux main
+# program.  You need to read and understand all the instructions below
+# before use.
+#
+# To understand how to compile the daemon for Windows, please read:
+# http://www.redhat.com/archives/libguestfs/2009-November/msg00255.html
+#
+# Adjust the Wine configuration so it can find the libraries, as
+# described here:
+# http://fedoraproject.org/wiki/MinGW/Configure_wine
+#
+# On Fedora 13 there is a serious bug in Wine.  See:
+# https://bugzilla.redhat.com/show_bug.cgi?id=533806#c11
+#
+# If necessary, adjust the line 'guestfsd=...' below so it points to
+# the correct location of the guestfsd.exe program.  You can use an
+# absolute path here if you want.
+guestfsd=daemon/guestfsd.exe
+#
+# This script is a QEMU wrapper.  It pretends to be qemu as far as
+# libguestfs programs are concerned.  Read this to understand the
+# purpose of QEMU wrappers:
+# http://libguestfs.org/guestfs.3.html#qemu_wrappers
+#
+# With this script, the qemu program is not actually run.  Instead we
+# pretend to be qemu, parse out the necessary parts of the long
+# command line that libguestfs passes to qemu, and run the Windows
+# daemon, under Wine, with the right command line.  The Windows daemon
+# then hopefully connects back to the libguestfs socket, and as far as
+# the libguestfs program is concerned, it looks like a full appliance
+# is running.
+#
+# To use this script, you must set the environment variable
+# LIBGUESTFS_QEMU=/path/to/contrib/guestfsd-in-wine.sh (ie. the path
+# to this script).
+#
+# You can then run libguestfs test programs, and (hopefully!) they'll
+# use the Windows guestfsd.exe, simulating calls using Wine.
+#
+# For example from the top build directory:
+#
+# LIBGUESTFS_QEMU=contrib/guestfsd-in-wine.sh ./run ./fish/guestfish
+#
+# Another suggested environment variable is LIBGUESTFS_DEBUG=1 which
+# will give you must more detail about what is going on.  Also look at
+# the contents of the log file 'guestfsd-in-wine.log' after each run.
+#
+#----------------------------------------------------------------------
+
+# Note that stdout & stderr messages will get eaten by libguestfs
+# early on in the process.  Therefore write log messages to
+# a log file.
+exec 5>>guestfsd-in-wine.log
+echo "Environment:" >&5
+printenv | grep LIBGUESTFS >&5
+echo "Command line:" >&5
+echo "  $@" >&5
+
+# We're called several times, first with -help and -version, and we
+# have to pretend to be qemu!  (At least enough to trick libguestfs).
+if [ "$1" = "-help" ]; then
+    echo -- "  -net user  "
+    echo -- "  -no-hpet  "
+    echo -- "  -rtc-td-hack  "
+    exit 0
+elif [ "$1" = "-version" ]; then
+    echo -- "0.0.0"
+    exit 0
+fi
+
+# The interesting parameter is -append.
+append=
+while [ $# -gt 0 ]; do
+    if [ $1 = "-append" ]; then
+        append="$2"
+        shift
+    fi
+    shift
+done
+echo "Append parameter:" >&5
+echo "  $append" >&5
+
+# guestfs_vmchannel parameter.
+vmchannel_param=$(echo "$append" | grep -Eo 'guestfs_vmchannel=[^[:space:]]+')
+echo "Vmchannel parameter:" >&5
+echo "  $vmchannel_param" >&5
+
+# Port number.
+port=$(echo "$vmchannel_param" | grep -Eo '[[:digit:]]+$')
+echo "Port number:" >&5
+echo "  $vmchannel_param" >&5
+
+# Run guestfsd.exe.
+echo "Command:" >&5
+echo "  $guestfsd -f -v -c tcp:localhost:$port" >&5
+$guestfsd -f -v -c tcp:127.0.0.1:$port
diff --git a/contrib/intro/libguestfs-intro.html b/contrib/intro/libguestfs-intro.html
new file mode 100644
index 0000000..cfc7b8b
--- /dev/null
+++ b/contrib/intro/libguestfs-intro.html
@@ -0,0 +1,253 @@
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
+    <title>Short introduction to libguestfs</title>
+    <style>
+      body {
+        counter-reset: chapter;
+      }
+
+      body p {
+        margin-left: 2em;
+      }
+
+      h1 {
+        color: rgb(204,0,0);
+        font-size: 130%;
+        border-bottom: 1px solid rgb(204,0,0);
+      }
+      author {
+        display: block;
+        position: absolute;
+        right: 2em;
+        top: 1em;
+        font-size: 80%;
+        text-align: right;
+      }
+
+      h2 {
+        background-color: #f3f3f3;
+        margin-top: 2em;
+        color: rgb(204,0,0);
+        counter-increment: chapter;
+        counter-reset: section;
+      }
+      h2:before {
+        font-size: 80%;
+        color: #666;
+        content: counter(chapter) " — ";
+      }
+
+      pre {
+        background-color: #fcfcfc;
+        border-top: 1px dotted #888;
+        border-bottom: 1px dotted #888;
+        border-left: 6px solid rgb(204,0,0);
+        padding: 5px;
+        margin-left: 1em;
+      }
+
+      p.sourcelnk {
+        text-align: right;
+        font-size: 70%;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Short introduction to libguestfs</h1>
+    <author>by Richard W.M. Jones <rjones at redhat.com></author>
+
+    <h2>The Idea</h2>
+
+    <p><b>Reuse qemu, Linux kernel and userspace tools</b> to read and
+    write disk images.</p>
+
+    <img src="overview.svg"/>
+
+    <h2>The Stable API</h2>
+
+<pre>
+  /* get the Linux VFS type corresponding to a mounted device */
+extern char *<b>guestfs_vfs_type</b> (guestfs_h *g, const char *device);
+</pre>
+
+<table style="margin-bottom: 4em;" width="100%">
+  <tr><td valign="top">Example using this API:</td><td>
+<pre>
+#include <guestfs.h>
+
+char *fstype = <b>guestfs_vfs_type (g, "/dev/vda1")</b>;
+printf ("%s\n", fstype);
+free (fstype);
+→ <b>ntfs</b>
+</pre>
+<p class="sourcelnk"><a href="http://git.annexia.org/?p=libguestfs.git;a=blob;f=fish/inspect.c;h=2ca54d2296fce5370504c1085cbcd7ac1b51ad3a;hb=HEAD#l208">click to see a real example ...</a></p>
+    </td>
+  </tr>
+</table>
+
+    <table width="100%">
+      <tr><td valign="top">
+
+<pre style="font-size: 80%;">
+  ("<b>vfs_type</b>",
+   (RString "fstype",
+        [Device "device"], []),
+   198, [],
+   [ (* tests *) ],
+   "get the Linux VFS type corresponding to a mounted device",
+   "\
+This command gets the filesystem type corresponding to
+the filesystem on C<device>.
+
+For most filesystems, the result is the name of the Linux
+VFS module which would be used to mount this filesystem
+if you mounted it without specifying the filesystem type.
+For example a string such as C<ext3> or C<ntfs>.");
+</pre>
+<p class="sourcelnk"><a href="http://git.annexia.org/?p=libguestfs.git;a=blob;f=generator/generator_actions.ml;h=d3fa3e0b939eb047a5ff103a68f09c6898807748;hb=HEAD#l4775">full source ...</a></p>
+
+        </td>
+        <td valign="top">
+
+<pre style="font-size: 80%;">
+char *
+<b>do_vfs_type</b> (const char *device)
+{
+  return get_blkid_tag (device, "TYPE");
+}
+
+static char *
+get_blkid_tag (const char *device, const char *tag)
+{
+  char *out, *err;
+  int r;
+
+  r = commandr (&out, &err,
+                "blkid",
+                "-c", "/dev/null",
+                "-o", "value", "-s", tag, device, NULL);
+  if (r != 0 && r != 2) {
+    if (r >= 0)
+      reply_with_error ("%s: %s (blkid returned %d)",
+                        device, err, r);
+    else
+      reply_with_error ("%s: %s", device, err);
+    free (out);
+    free (err);
+    return NULL;
+  }
+
+  /* ... */
+
+  return out;             /* caller frees */
+}
+</pre>
+<p class="sourcelnk"><a href="http://git.annexia.org/?p=libguestfs.git;a=blob;f=daemon/blkid.c;hb=HEAD">full source ...</a></p>
+
+        </td>
+      </tr>
+    </table>
+
+    <p>
+      Just these two fragments generate:
+    </p>
+
+    <ul>
+      <li> bindings in <a href="http://libguestfs.org/guestfs.3.html#api_overview">C</a>,
+        <a href="http://libguestfs.org/guestfs-perl.3.html">Perl</a>,
+        <a href="http://libguestfs.org/guestfs-python.3.html">Python</a>,
+        <a href="http://libguestfs.org/guestfs-ruby.3.html">Ruby</a>,
+        <a href="http://libguestfs.org/guestfs-java.3.html">Java</a>,
+        <a href="http://libguestfs.org/guestfs-ocaml.3.html">OCaml</a>,
+        PHP,
+        Haskell,
+        <a href="http://libguestfs.org/guestfs-erlang.3.html">Erlang</a>
+        and C# </li>
+      <li> <a href="http://libguestfs.org/guestfish.1.html">guestfish</a>
+        (shell script) </li>
+      <li> documentation in man pages and HTML </li>
+      <li> internal RPC code </li>
+    </ul>
+
+    <h2>Tools written around the API</h2>
+
+    <img src="tools.svg" />
+
+    <table>
+      <tr><td valign="top">
+<pre>
+<b>guestfish -N fs -m /dev/sda1 <<EOF</b>
+  <font style="color: green;">mkdir /etc
+  upload /etc/resolv.conf /etc/resolv.conf
+  write /etc/hostname "test01.redhat.com"</font>
+<b>EOF</b>
+</pre>
+<p class="sourcelnk"><a href="http://libguestfs.org/guestfish.1.html">manual ...</a></p>
+        </td><td valign="top">
+<pre>
+<b>virt-df -a /dev/vg/F15x32 -h</b>
+Filesystem                    Size  Used Available Use%
+F15x32:/dev/sda1              484M   31M      428M   7%
+F15x32:/dev/vg_f15x32/lv_root 5.5G  3.4G      1.8G  63%
+</pre>
+<p class="sourcelnk"><a href="http://libguestfs.org/virt-df.1.html">manual ...</a></p>
+      </td></tr>
+      <tr><td valign="top">
+<pre>
+<b>virt-edit -c qemu:///system -d F15x32 /etc/passwd</b>
+<i>(launches editor)</i>
+</pre>
+<p class="sourcelnk"><a href="http://libguestfs.org/virt-edit.1.html">manual ...</a></p>
+        </td><td valign="top">
+<pre>
+<b>virt-win-reg -c qemu:///system --unsafe-printable-strings \
+  Win7x32 'HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters' \
+  | grep DhcpIPAddress</b>
+"DhcpIPAddress"=str(1):"192.168.122.178"
+</pre>
+<p class="sourcelnk"><a href="http://libguestfs.org/virt-win-reg.1.html">manual ...</a></p>
+      </td></tr>
+    </table>
+
+    <h2>Inspection</h2>
+
+
+
+
+    <h2>V2V & P2V</h2>
+
+
+
+
+    <h2>Read more ...</h2>
+
+    <p>
+      <a href="http://libguestfs.org/">libguestfs.org</a> is the
+      main website.
+    </p>
+
+    <p>
+      <a href="http://libguestfs.org/guestfs.3.html">guestfs(3)</a>
+      is the manual page documenting the C API and the internals.
+    </p>
+
+    <p>
+      There are manual pages
+      documenting <a href="http://libguestfs.org/guestfish.1.html">guestfish</a>, <a href="http://libguestfs.org/guestmount.1.html">guestmount</a>
+      and each virt tool.  See
+      the <a href="http://libguestfs.org/">main website</a> or your
+      local man command.
+    </p>
+
+    <hr/>
+
+    <p style="font-size: 70%;">
+      This page © 2011 Red Hat Inc. and distributed
+      under the terms of the GNU General Public License as published by
+      the Free Software Foundation; either version 2 of the License, or
+      (at your option) any later version.
+    </p>
+
+  </body>
+</html>
diff --git a/contrib/intro/overview.svg b/contrib/intro/overview.svg
new file mode 100644
index 0000000..25f245a
--- /dev/null
+++ b/contrib/intro/overview.svg
@@ -0,0 +1,524 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="741.56433"
+   height="342.17648"
+   preserveAspectRatio="xMinYMin meet"
+   viewBox="0 0 742.2916 341.4346"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="libguestfs-overview.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4142136"
+     inkscape:cx="355.32914"
+     inkscape:cy="132.14604"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1400"
+     inkscape:window-height="833"
+     inkscape:window-x="89"
+     inkscape:window-y="31"
+     inkscape:window-maximized="0"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3046"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4254"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4149" />
+    </marker>
+    <inkscape:perspective
+       id="perspective3761"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendR"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendR">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#8c8989;fill-rule:evenodd;stroke:#8c8989;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4924" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendH"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendH">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5584" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lendi"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lendi">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5587" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lendn"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lendn">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5590" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendnS"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendnS">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5709" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendnS4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendnS4">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5832" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1MendG"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1MendG">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4721"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-10.718182,-61.430592)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3793"
+       y="269.36218"
+       x="306"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="269.36218"
+         x="306"
+         id="tspan3795"
+         sodipodi:role="line" /></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3797"
+       y="267.36218"
+       x="304"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="267.36218"
+         x="304"
+         id="tspan3799"
+         sodipodi:role="line" /></text>
+    <rect
+       y="154.46817"
+       x="190.705"
+       height="237.99187"
+       width="294.189"
+       id="rect2985"
+       style="fill:#ffdcdc;fill-opacity:1;stroke:#190000;stroke-width:2.94564199;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text3757"
+       y="201.36218"
+       x="239"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="201.36218"
+         x="239"
+         id="tspan3759"
+         sodipodi:role="line">libguestfs</tspan></text>
+    <rect
+       y="292.36197"
+       x="200.91432"
+       height="54"
+       width="264"
+       id="rect3777"
+       style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text3785"
+       y="326.63818"
+       x="220.52794"
+       style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       xml:space="preserve"><tspan
+         y="326.63818"
+         x="220.52794"
+         id="tspan3787"
+         sodipodi:role="line">Linux kernel</tspan></text>
+    <g
+       transform="matrix(0.88003385,0,0,0.86189263,26.891233,24.839975)"
+       id="g4614">
+      <rect
+         style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3779"
+         width="58"
+         height="40"
+         x="218"
+         y="219.36218" />
+      <text
+         xml:space="preserve"
+         style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+         x="223"
+         y="247.36218"
+         id="text3789"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3791"
+           x="223"
+           y="247.36218">mkfs</tspan></text>
+    </g>
+    <g
+       id="g3077"
+       transform="matrix(0.87343177,0,0,0.83132964,36.681547,40.720104)">
+      <rect
+         y="246.24846"
+         x="279.26575"
+         height="38.597645"
+         width="96.596542"
+         id="rect3781"
+         style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1.2677021;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         xml:space="preserve"
+         style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+         x="287.50287"
+         y="271.77777"
+         id="text3801"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3803"
+           x="287.50287"
+           y="271.77777">lvcreate</tspan></text>
+    </g>
+    <g
+       id="g3072"
+       transform="matrix(0.9731636,0,0,0.89682062,-4.7939037,17.840053)">
+      <rect
+         style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1.15940309;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect3783"
+         width="77.964508"
+         height="40"
+         x="389"
+         y="228.36218" />
+      <text
+         xml:space="preserve"
+         style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+         x="396"
+         y="256.36218"
+         id="text3805"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3807"
+           x="396"
+           y="256.36218">parted</tspan></text>
+    </g>
+    <g
+       id="g3081">
+      <g
+         id="g3074">
+        <image
+           width="85"
+           height="85"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsvVuMJUl6Hvb9EZl57lXV1d3TPTvLmV2CO5RJijQvMGCB9opakGsSIh/8ZunJBvhiGrzZsGBA gJ/4YAKGYJkGZK8fLNpcwwANQWssqaEfLJqkYYKUtaS45Gi53J3tnr53173qXDIzwg9x+yNv55yq 6jmnd/qvzj55iYyMjIzvv8UfEfT5z38er+k1vaaPJ4lNF+A1vabXtDl6zQBe02v6GNNrBvCaXtPH mF4zgNf0mj7G9JoBvKbX9DGm1wzgNb2mjzG9ZgCv6TV9jOk1A3hNr+ljTK8ZwGt6TR9jSjZdgPfe e482XYbX9GrT5z//eb3pMryqRJsKBa4Av8oEXjOFV5+u6xtWwa07rr1mBmvSR8 [...]
+           id="image3871"
+           x="658"
+           y="257.36218" />
+        <image
+           width="97"
+           height="97"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsvWuwZcd1HvZ17332eb/vuXPvxcxwAAwBEEOQIkcQLZs0h/QD9ENSbAdWiaEcRbbsEq2HTdlS JZUqEKmkUqn8jPMnFf9IVfIjhfyRqJQJSaWCSiXFNg2pZGogCiaeM5jHncd9nPdj786P7tW9dp+9 z70AAcwM7lk1d845e/fu3bt3r7W+tVb3avHMM89gTWta08kkea8bsKY1rene0VoArGlNJ5jWAmBN azrBtBYAa1rTCaa1AFjTmk4wrQXAmtZ0gmktANa0phNMawGwpjWdYFoLgDWt6QTTWgCsaU0nmNYC YE1rOsG0FgBrWtMJprUAWNOaTjCtBcCa1nSCaS0A1rSmE0xrAbCmNZ1gWguANa [...]
+           id="image3933"
+           x="616"
+           y="174.36218" />
+        <image
+           width="88"
+           height="88"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsvVmsJNl5JvadE2vu212qbnVtd6m1u6u6m6LYFEk1KTZFUiJbZItbNSlxPJoZyTOGBvCDHjyw aVgDQdYMYD8K82BhHmRiJIxh2IIGGkCwpZEgYwwIsthd+91qr+ra7poZcRY/nNgyMiIzcqt7u2/+ 3Vk3zhInTkSe//+//zsnThIpJSYykYkcTKF73YGJTGQieycTAzCRiRxgmRiAiUzkAMvEAExkIgdY JgZgIhM5wDIxABOZyAGWiQGYyEQOsEwMwEQmcoBlYgAmMpEDLBMDMJGJHGCZGICJTOQAy8QATGQi B1gmBmAiEznAMjEAE5nIAZaJAZjIRA6wTAzARCZygGViACYykQMsEwMwkYkcYJ [...]
+           id="image3995"
+           x="523"
+           y="181.36218" />
+        <image
+           width="67"
+           height="67"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsvVmsLEl6HvbFlpm1nHPu3n17mYWcGdLkkCNapEmKw54Wh5QFwSZswwbsF4F+kW3ABqwHA34h aPjB8JP8ZL/YlhfB8IthGYRMSIJkEeRIlkxitJgQzQFm2NP77bufc6oql4j4/fD/ERmZVed2D6en z+HwxkXdqlMVGRmZGf//f/8aiojwvD1vz9ufzKYvewLP2/P2vF1ee84Anrfn7U9we84Anrfn7U9w e84Anrfn7U9ws5c9gY/avvSlL62Ojo6+LxnWzZs38fDhw8uexpVrNwFc5l05Pj7uf+M3fqO7xCl8 z5u6yl6A11//8s9H6L/Ute0vBqIXiQhKKfCUCTHy3I0xUApIvyulEEKAUgrWWo [...]
+           id="image4057"
+           x="580"
+           y="286.36218" />
+        <image
+           width="62"
+           height="62"
+           xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAIABJREFU eJzsvXmcHUd9L/qtqj7dZ5l90WgkWZItWxbeZLANXgCbPcYBk7DFcYA8ICYm4SXhBrLdmw+P+8gn G+HeB0neexe4sYOBF7MkBBKETeLEXDAywbZsy7I01q4ZjWbObGfOnKWXen90V9evqvuMRrIsb1P2 UVdX1171+/6+9avqHialxKpbdavuxen4s12BVbfqVt2z51YBYNWtuhexWwWAVbfqXsRuFQBW3ap7 EbtVAFh1q+5F7FYBYNWtuhexWwWAVbfqXsRuFQBW3ap7EbtVAFh1q+5F7JxnuwKr7plzjDGWF3wK WWSOicrVo6MvKMdWx/P56YhwLyfQeXFWkg7Qwt/pmhd3FSCeZ24VAJ7jztLitp [...]
+           id="image4119"
+           x="511"
+           y="264.36218" />
+      </g>
+      <g
+         transform="translate(312,29)"
+         id="g4593">
+        <path
+           style="fill:none;stroke:#000000;stroke-width:1.19099998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
+           d="m 146.71493,213.36218 63.78507,-1"
+           id="path4595"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:connector-curvature="0"
+           id="path4597"
+           d="m 209.5,230.36218 -63.78507,-1"
+           style="fill:none;stroke:#000000;stroke-width:1.19099998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" />
+      </g>
+    </g>
+    <g
+       id="g3066"
+       transform="matrix(1,0,0,1.1398731,0,-21.605949)">
+      <rect
+         y="154.46817"
+         x="29.436453"
+         height="208.78802"
+         width="141.45755"
+         id="rect3755"
+         style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1.91299629;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <text
+         xml:space="preserve"
+         style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+         x="52"
+         y="221.36218"
+         id="text4629"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4631"
+           x="52"
+           y="221.36218">virt tools,</tspan><tspan
+           sodipodi:role="line"
+           x="52"
+           y="246.36218"
+           id="tspan4633">scripts,</tspan><tspan
+           sodipodi:role="line"
+           x="52"
+           y="271.36218"
+           id="tspan4637">your</tspan><tspan
+           sodipodi:role="line"
+           x="52"
+           y="296.36218"
+           id="tspan4635">programs</tspan></text>
+    </g>
+    <path
+       inkscape:connector-curvature="0"
+       id="path4139"
+       d="m 147.71493,243.36218 63.78507,-1"
+       style="fill:none;stroke:#000000;stroke-width:1.19099998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.19099998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
+       d="m 210.5,260.36218 -63.78507,-1"
+       id="path4587"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
+       d="m 180.89471,128.46003 0,264"
+       id="path4080"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <text
+       xml:space="preserve"
+       style="font-size:20px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="118.74557"
+       y="86.635712"
+       id="text4082"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4084"
+         x="118.74557"
+         y="86.635712">stable API</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="M 109,-9.2673035 154,24.732697"
+       id="path4086"
+       inkscape:connector-curvature="0"
+       transform="translate(18.479955,101.90301)" />
+    <rect
+       style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:0.74572152;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3048"
+       width="264"
+       height="30.02943"
+       x="200.91432"
+       y="352.42081" />
+    <text
+       xml:space="preserve"
+       style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="220.93394"
+       y="372.44043"
+       id="text3050"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3052"
+         x="220.93394"
+         y="372.44043">qemu</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+       x="371.08105"
+       y="372.44043"
+       id="text3054"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3056"
+         x="371.08105"
+         y="372.44043">raw</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+       x="421.1301"
+       y="372.44043"
+       id="text3058"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3060"
+         x="421.1301"
+         y="372.44043">qcow2</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+       x="323.02417"
+       y="372.91223"
+       id="text3062"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3064"
+         x="323.02417"
+         y="372.91223">vmdk</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+       x="391.51471"
+       y="315.46762"
+       id="text3082"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3084"
+         x="391.51471"
+         y="315.46762">ext4</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+       x="426.90472"
+       y="333.87045"
+       id="text3086"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3088"
+         x="426.90472"
+         y="333.87045">btrfs</tspan></text>
+  </g>
+</svg>
diff --git a/contrib/intro/talk.txt b/contrib/intro/talk.txt
new file mode 100644
index 0000000..a8632f6
--- /dev/null
+++ b/contrib/intro/talk.txt
@@ -0,0 +1,7 @@
+This is a short (10-15 min) talk that I give to introduce the main
+features of libguestfs.  The "slides" are in the form of a complete
+self-contained HTML page with a handful images that can be easily
+distributed before the talk.
+
+----------------------------------------------------------------------
+
diff --git a/contrib/intro/tools.svg b/contrib/intro/tools.svg
new file mode 100644
index 0000000..fe1f034
--- /dev/null
+++ b/contrib/intro/tools.svg
@@ -0,0 +1,711 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="629.526"
+   height="475.37674"
+   preserveAspectRatio="xMinYMin meet"
+   viewBox="0 0 630.14339 474.34607"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="libguestfs-tools.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="305.93218"
+     inkscape:cy="244.25314"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1400"
+     inkscape:window-height="833"
+     inkscape:window-x="26"
+     inkscape:window-y="31"
+     inkscape:window-maximized="0"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3046"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <marker
+       style="overflow:visible"
+       id="Arrow1Mend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4254"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lend"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4149" />
+    </marker>
+    <inkscape:perspective
+       id="perspective3761"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendR"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendR">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#8c8989;fill-rule:evenodd;stroke:#8c8989;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4924" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendH"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendH">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5584" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lendi"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lendi">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5587" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1Lendn"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lendn">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5590" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendnS"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendnS">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5709" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1LendnS4"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1LendnS4">
+      <path
+         inkscape:connector-curvature="0"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         style="fill:#888888;fill-rule:evenodd;stroke:#888888;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path5832" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Arrow1MendG"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Arrow1MendG">
+      <path
+         transform="matrix(-0.4,0,0,-0.4,-4,0)"
+         style="fill:#ff0000;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;marker-start:none"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         id="path4721"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-61.579184,-78.961745)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3793"
+       y="269.36218"
+       x="306"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="269.36218"
+         x="306"
+         id="tspan3795"
+         sodipodi:role="line" /></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3797"
+       y="267.36218"
+       x="304"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       xml:space="preserve"><tspan
+         y="267.36218"
+         x="304"
+         id="tspan3799"
+         sodipodi:role="line" /></text>
+    <g
+       id="g3942"
+       transform="matrix(0.72385693,0,0,0.72385693,134.30682,108.78183)">
+      <rect
+         style="fill:#ffdcdc;fill-opacity:1;stroke:#190000;stroke-width:2.94564199;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect2985"
+         width="294.189"
+         height="237.99187"
+         x="190.705"
+         y="154.46817" />
+      <text
+         xml:space="preserve"
+         style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+         x="239"
+         y="201.36218"
+         id="text3757"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3759"
+           x="239"
+           y="201.36218">libguestfs</tspan></text>
+      <g
+         id="g4614"
+         transform="matrix(0.88003385,0,0,0.86189263,26.891233,24.839975)">
+        <rect
+           y="219.36218"
+           x="218"
+           height="40"
+           width="58"
+           id="rect3779"
+           style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text3789"
+           y="247.36218"
+           x="223"
+           style="font-size:20px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+           xml:space="preserve"><tspan
+             y="247.36218"
+             x="223"
+             id="tspan3791"
+             sodipodi:role="line">mkfs</tspan></text>
+      </g>
+      <g
+         transform="matrix(0.87343177,0,0,0.83132964,36.681547,40.720104)"
+         id="g3077">
+        <rect
+           style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1.2677021;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3781"
+           width="96.596542"
+           height="38.597645"
+           x="279.26575"
+           y="246.24846" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text3801"
+           y="271.77777"
+           x="287.50287"
+           style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+           xml:space="preserve"><tspan
+             y="271.77777"
+             x="287.50287"
+             id="tspan3803"
+             sodipodi:role="line">lvcreate</tspan></text>
+      </g>
+      <g
+         transform="matrix(0.9731636,0,0,0.89682062,-4.7939037,17.840053)"
+         id="g3072">
+        <rect
+           y="228.36218"
+           x="389"
+           height="40"
+           width="77.964508"
+           id="rect3783"
+           style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1.15940309;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text3805"
+           y="256.36218"
+           x="396"
+           style="font-size:20px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+           xml:space="preserve"><tspan
+             y="256.36218"
+             x="396"
+             id="tspan3807"
+             sodipodi:role="line">parted</tspan></text>
+      </g>
+      <g
+         id="g3931">
+        <rect
+           style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:0.74572152;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="rect3048"
+           width="264"
+           height="30.02943"
+           x="200.91432"
+           y="352.42081" />
+        <text
+           xml:space="preserve"
+           style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+           x="220.93394"
+           y="372.44043"
+           id="text3050"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3052"
+             x="220.93394"
+             y="372.44043">qemu</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+           x="371.08105"
+           y="372.44043"
+           id="text3054"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3056"
+             x="371.08105"
+             y="372.44043">raw</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+           x="421.1301"
+           y="372.44043"
+           id="text3058"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3060"
+             x="421.1301"
+             y="372.44043">qcow2</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+           x="323.02417"
+           y="372.91223"
+           id="text3062"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3064"
+             x="323.02417"
+             y="372.91223">vmdk</tspan></text>
+      </g>
+      <g
+         id="g3922">
+        <rect
+           y="292.36197"
+           x="200.91432"
+           height="54"
+           width="264"
+           id="rect3777"
+           style="fill:#fff6f6;fill-opacity:1;stroke:#190000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <text
+           sodipodi:linespacing="125%"
+           id="text3785"
+           y="326.63818"
+           x="220.52794"
+           style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+           xml:space="preserve"><tspan
+             y="326.63818"
+             x="220.52794"
+             id="tspan3787"
+             sodipodi:role="line">Linux kernel</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+           x="391.51471"
+           y="315.46762"
+           id="text3082"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3084"
+             x="391.51471"
+             y="315.46762">ext4</tspan></text>
+        <text
+           xml:space="preserve"
+           style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans Narrow;-inkscape-font-specification:Sans"
+           x="426.90472"
+           y="333.87045"
+           id="text3086"
+           sodipodi:linespacing="125%"><tspan
+             sodipodi:role="line"
+             id="tspan3088"
+             x="426.90472"
+             y="333.87045">btrfs</tspan></text>
+      </g>
+    </g>
+    <g
+       id="g3888"
+       transform="translate(-85.64383,133.06644)">
+      <rect
+         ry="9.1923885"
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)"
+         y="19.7358"
+         x="163.34166"
+         height="31.819805"
+         width="145.66399"
+         id="rect3060"
+         style="fill:#cc0000;fill-opacity:1;stroke:none" />
+      <text
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)"
+         sodipodi:linespacing="125%"
+         id="text3884"
+         y="40.241898"
+         x="178.89801"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         xml:space="preserve"><tspan
+           y="40.241898"
+           x="178.89801"
+           id="tspan3886"
+           sodipodi:role="line">virt-resize</tspan></text>
+    </g>
+    <g
+       transform="translate(268.25631,31.143212)"
+       id="g3901">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:none"
+         id="rect3895"
+         width="145.66399"
+         height="31.819805"
+         x="163.34166"
+         y="19.7358"
+         ry="9.1923885"
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         x="178.89801"
+         y="40.241898"
+         id="text3897"
+         sodipodi:linespacing="125%"
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)"><tspan
+           sodipodi:role="line"
+           id="tspan3899"
+           x="178.89801"
+           y="40.241898">guestmount</tspan></text>
+    </g>
+    <g
+       transform="translate(94.845234,16.279406)"
+       id="g3917">
+      <rect
+         ry="9.2014036"
+         y="72.692146"
+         x="110.51801"
+         height="31.851011"
+         width="145.80684"
+         id="rect3908"
+         style="fill:#cc0000;fill-opacity:1;stroke:none" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3910"
+         y="93.218353"
+         x="126.08962"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         xml:space="preserve"><tspan
+           y="93.218353"
+           x="126.08962"
+           id="tspan3912"
+           sodipodi:role="line">guestfish</tspan></text>
+    </g>
+    <g
+       id="g4006"
+       transform="translate(12.032604,19.818407)">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:none"
+         id="rect3997"
+         width="145.80684"
+         height="31.851011"
+         x="523.87335"
+         y="229.11598"
+         ry="9.2014036" />
+      <text
+         xml:space="preserve"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         x="539.44495"
+         y="249.6422"
+         id="text3999"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4001"
+           x="539.44495"
+           y="249.6422">virt-rescue</tspan></text>
+    </g>
+    <g
+       transform="translate(-102.63104,181.19685)"
+       id="g4011">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:none"
+         id="rect4013"
+         width="145.66399"
+         height="31.819805"
+         x="163.34166"
+         y="19.7358"
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)"
+         ry="9.1923885" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         x="178.89801"
+         y="40.241898"
+         id="text4015"
+         sodipodi:linespacing="125%"
+         transform="matrix(1.0009807,0,0,1.0009807,10.718182,61.430592)"><tspan
+           sodipodi:role="line"
+           id="tspan4017"
+           x="178.89801"
+           y="40.241898">virt-sparsify</tspan></text>
+    </g>
+    <g
+       id="g4081"
+       transform="translate(-5.6624019,-29.72761)">
+      <rect
+         ry="9.2014036"
+         y="341.65622"
+         x="82.206001"
+         height="31.851011"
+         width="145.80684"
+         id="rect4021"
+         style="fill:#cc0000;fill-opacity:1;stroke:none" />
+      <text
+         transform="scale(0.97311457,1.0276282)"
+         sodipodi:linespacing="125%"
+         id="text4023"
+         y="352.44501"
+         x="87.536247"
+         style="font-size:15.58510303px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         xml:space="preserve"><tspan
+           y="352.44501"
+           x="87.536247"
+           id="tspan4025"
+           sodipodi:role="line">virt-alignment-scan</tspan></text>
+    </g>
+    <g
+       id="g4038"
+       transform="translate(-7.7858026,8.4936029)">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:none"
+         id="rect4029"
+         width="145.80684"
+         height="31.851011"
+         x="134.58322"
+         y="428.71567"
+         ry="9.2014036" />
+      <text
+         xml:space="preserve"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         x="150.15482"
+         y="449.24185"
+         id="text4031"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4033"
+           x="150.15482"
+           y="449.24185">virt-inspector</tspan></text>
+    </g>
+    <g
+       transform="translate(75.026826,46.714815)"
+       id="g4043">
+      <rect
+         ry="9.2014036"
+         y="428.71567"
+         x="134.58322"
+         height="31.851011"
+         width="145.80684"
+         id="rect4045"
+         style="fill:#cc0000;fill-opacity:1;stroke:none" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text4047"
+         y="449.24185"
+         x="150.15482"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         xml:space="preserve"><tspan
+           y="449.24185"
+           x="150.15482"
+           id="tspan4049"
+           sodipodi:role="line">virt-filesystems</tspan></text>
+    </g>
+    <g
+       id="g4076"
+       transform="translate(38.929013,4.2468014)">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:none"
+         id="rect4053"
+         width="102.63103"
+         height="31.851011"
+         x="265.52628"
+         y="508.69708"
+         ry="9.2014036" />
+      <text
+         xml:space="preserve"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         x="281.09787"
+         y="529.22327"
+         id="text4055"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan4057"
+           x="281.09787"
+           y="529.22327">virt-df</tspan></text>
+    </g>
+    <g
+       id="g4108"
+       transform="translate(-7.0780024,24.773008)">
+      <rect
+         ry="9.2014036"
+         y="411.72845"
+         x="496.97693"
+         height="31.851011"
+         width="145.80684"
+         id="rect4061"
+         style="fill:#cc0000;fill-opacity:1;stroke:none" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text4063"
+         y="432.25464"
+         x="512.54852"
+         style="font-size:16.01569176px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans Bold"
+         xml:space="preserve"><tspan
+           y="432.25464"
+           x="512.54852"
+           id="tspan4065"
+           sodipodi:role="line">virt-win-reg</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="380.42343"
+       y="96.660439"
+       id="text4086"
+       sodipodi:linespacing="125%"
+       transform="matrix(1.0009807,0,0,1.0009807,64.410388,68.552031)"><tspan
+         sodipodi:role="line"
+         id="tspan4088"
+         x="380.42343"
+         y="96.660439">FUSE / POSIX</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="180.31223"
+       y="81.811195"
+       id="text4090"
+       sodipodi:linespacing="125%"
+       transform="matrix(1.0009807,0,0,1.0009807,64.410388,68.552031)"><tspan
+         sodipodi:role="line"
+         id="tspan4092"
+         x="180.31223"
+         y="81.811195">shell scripts</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="105.35891"
+       y="291.11481"
+       id="text4094"
+       sodipodi:linespacing="125%"
+       transform="matrix(1.0009807,0,0,1.0009807,64.410388,68.552031)"><tspan
+         sodipodi:role="line"
+         id="tspan4096"
+         x="105.35891"
+         y="291.11481">align & resize</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="247.48737"
+       y="384.45288"
+       id="text4098"
+       sodipodi:linespacing="125%"
+       transform="matrix(1.0009807,0,0,1.0009807,64.410388,68.552031)"><tspan
+         sodipodi:role="line"
+         id="tspan4100"
+         x="247.48737"
+         y="384.45288">inspection</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14.01373005px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="500.41534"
+       y="405.25153"
+       id="text4102"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4104"
+         x="500.41534"
+         y="405.25153">Windows</tspan><tspan
+         sodipodi:role="line"
+         x="500.41534"
+         y="422.76868"
+         id="tspan4106">guests</tspan></text>
+  </g>
+</svg>
diff --git a/contrib/visualize-alignment/.gitignore b/contrib/visualize-alignment/.gitignore
new file mode 100644
index 0000000..68a2009
--- /dev/null
+++ b/contrib/visualize-alignment/.gitignore
@@ -0,0 +1,2 @@
+*.eps
+*.png
diff --git a/contrib/visualize-alignment/README b/contrib/visualize-alignment/README
new file mode 100644
index 0000000..e68a902
--- /dev/null
+++ b/contrib/visualize-alignment/README
@@ -0,0 +1,70 @@
+This directory contains some experimental work for capturing traces of
+block device operations while filesystem operations are performed.
+
+You can trace any operation that libguestfs supports, including
+partitioning, mkfs, LVM operations, and filesystem operations.  You
+can enable and disable tracing in order to capture single operations
+such as a single write, or groups of operations.  You can examine the
+traces by hand (as text files) or turn them into graphical
+visualizations.
+
+IMPORTANT NOTE: This is not upstream (in qemu) nor integrated into
+libguestfs.  We should probably be using the 'blktrace' command
+instead, or if that is not suitable, get a more reliable and useful
+trace mechanism added to qemu (the current patch is not suitable for
+upstreaming).
+
+The *.qtr files are qemu trace files, produced using the unofficial
+qemu patch in the current directory.
+
+- guestfish-N-fs-10M.qtr
+
+  The command 'guestfish -N fs:ext2:10M' before we modified the
+  part-disk API to align the partition to 64 sectors.
+
+- guestfish-N-fs-10M-aligned-part-disk.qtr
+
+  The command 'guestfish -N fs:ext2:10M' after we modified the
+  part-disk API to align the partition to 64 sectors.
+
+- guestfish-add-mount.qtr
+
+  $ guestfish -a test1.img -m /dev/sda1
+  where test1.img was created by the previous command.
+
+- guestfish-write-hello.qtr
+
+  $ guestfish -a test1.img -m /dev/sda1 \
+      debug qtrace "/dev/vda on" : \
+      write /hello "hello, world." : \
+      debug qtrace "/dev/vda off"
+  where test1.img was created by the command above.
+
+  This is just the creation of a new file with a small amount of content.
+
+  Within this trace file, the qtrace on/off commands appear as patterns
+  of reads.  For on: 2, 21, 15, 2.  For off: 2, 15, 21, 2.
+
+- guestfish-lv-ext4-4k.qtr
+
+  $ guestfish \
+      alloc test1.img 40M : \
+      run : \
+      part-disk /dev/vda mbr : \
+      pvcreate /dev/vda : \
+      vgcreate VG /dev/vda : \
+      lvcreate LV VG 32 : \
+      mkfs-opts ext4 /dev/VG/LV blocksize:4096
+
+  Some points to note:
+    * an ext4 filesystem, so it has a journal and extents
+    * 4K block size, so we expect writes to be aligned
+    * located inside an LV, so more realistic
+
+- guestfish-lv-ext4-4k-write-hello.qtr
+
+  $ guestfish -a test1.img -m /dev/VG/LV \
+      debug qtrace "/dev/vda on" : \
+      write /hello "hello, world." : \
+      debug qtrace "/dev/vda off"
+  where test1.img was created by the previous command.
diff --git a/contrib/visualize-alignment/guestfish-N-fs-10M-aligned-part-disk.qtr b/contrib/visualize-alignment/guestfish-N-fs-10M-aligned-part-disk.qtr
new file mode 100644
index 0000000..d99c24d
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-N-fs-10M-aligned-part-disk.qtr
@@ -0,0 +1,122 @@
+S 20480
+R 0 1
+R 0 8
+R 8 8
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 20472 8
+R 20216 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 0 32
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 0 8
+R 0 8
+R 0 32
+R 32 64
+R 128 8
+R 20456 8
+W 0 24
+W 20456 24
+R 0 8
+R 8 24
+W 0 8
+R 20352 8
+R 20464 8
+R 0 32
+R 32 64
+W 0 8
+R 20472 8
+R 20216 8
+R 20472 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 20464 8
+R 8 8
+R 0 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 64 2
+W 64 379
+W 443 55
+W 16450 4
+W 16532 92
+R 20416 1
+R 20160 1
+R 20161 1
+R 20162 1
+R 20163 5
+R 2112 1
+R 2113 1
+R 2114 6
+R 576 1
+R 577 1
+R 578 6
+R 4160 1
+R 4161 1
+R 4162 6
+R 0 8
+W 16624 230
+W 20288 128
+W 66 2
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
diff --git a/contrib/visualize-alignment/guestfish-N-fs-10M.qtr b/contrib/visualize-alignment/guestfish-N-fs-10M.qtr
new file mode 100644
index 0000000..4b44e4b
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-N-fs-10M.qtr
@@ -0,0 +1,122 @@
+S 20480
+R 0 1
+R 0 8
+R 8 8
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 20472 8
+R 20216 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 0 32
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 0 8
+R 0 8
+R 0 32
+R 32 64
+R 128 8
+R 20456 8
+W 0 24
+W 20456 24
+R 0 8
+R 8 24
+W 0 8
+R 20352 8
+R 20464 8
+R 0 32
+R 32 64
+W 0 8
+R 20472 8
+R 20216 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 20464 8
+R 8 8
+R 0 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 20225 8
+R 20457 8
+R 1 8
+R 9 8
+R 20473 7
+R 20217 8
+R 20465 8
+R 2049 8
+R 25 8
+R 57 8
+R 121 8
+R 17 8
+R 129 8
+R 65 8
+R 513 8
+R 33 8
+R 4097 8
+R 0 8
+R 1 2
+R 20225 8
+W 1 436
+W 16387 1
+W 16388 3
+W 16469 324
+W 20225 248
+R 20473 7
+R 20217 8
+R 2049 1
+R 2050 1
+R 2051 6
+R 513 1
+R 514 1
+R 515 1
+R 516 1
+R 517 1
+R 518 1
+R 519 1
+R 520 1
+R 4097 1
+R 4098 7
+R 0 8
+W 3 2
+R 20225 8
+R 20457 8
+R 1 8
+R 9 8
+R 20473 7
+R 20217 8
+R 20465 8
+R 2049 8
+R 25 8
+R 57 8
+R 121 8
+R 17 8
+R 129 8
+R 65 8
+R 513 8
+R 33 8
+R 4097 8
+R 0 8
diff --git a/contrib/visualize-alignment/guestfish-add-mount.qtr b/contrib/visualize-alignment/guestfish-add-mount.qtr
new file mode 100644
index 0000000..2c99524
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-add-mount.qtr
@@ -0,0 +1,72 @@
+S 20480
+R 0 1
+R 0 8
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 20472 8
+R 20216 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 0 32
+R 20288 1
+R 20400 1
+R 64 1
+R 72 1
+R 64 4
+R 64 4
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 66 2
+R 68 2
+R 152 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
diff --git a/contrib/visualize-alignment/guestfish-lv-ext4-4k-write-hello.qtr b/contrib/visualize-alignment/guestfish-lv-ext4-4k-write-hello.qtr
new file mode 100644
index 0000000..4f856ed
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-lv-ext4-4k-write-hello.qtr
@@ -0,0 +1,104 @@
+S 81920
+R 0 1
+R 0 8
+R 8 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 0 32
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 0 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 0 8
+R 8 8
+R 8 8
+R 8 8
+R 0 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 65792 8
+R 65904 8
+R 384 8
+R 392 8
+R 65912 8
+R 65656 8
+R 65856 8
+R 65664 8
+R 65520 8
+R 2432 8
+R 408 8
+R 440 8
+R 504 8
+R 400 8
+R 512 8
+R 448 8
+R 896 8
+R 416 8
+R 4480 8
+R 65792 8
+R 65904 8
+R 384 8
+R 392 8
+R 65912 8
+R 65656 8
+R 65856 8
+R 65664 8
+R 65520 8
+R 2432 8
+R 408 8
+R 440 8
+R 504 8
+R 400 8
+R 512 8
+R 448 8
+R 896 8
+R 416 8
+R 4480 8
+R 386 2
+R 384 8
+R 392 8
+R 664 8
+R 456 8
+W 384 8
+R 2 1
+R 21 1
+R 15 1
+R 2 1
+R 416 8
+R 536 8
+R 664 8
+R 408 8
+W 456 8
+W 464 8
+W 10712 8
+W 472 40
+W 512 8
+W 392 8
+W 408 16
+W 536 8
+W 664 8
+R 2 1
+R 15 1
+R 21 1
+R 2 1
+W 384 8
+W 456 8
+W 384 8
diff --git a/contrib/visualize-alignment/guestfish-lv-ext4-4k.qtr b/contrib/visualize-alignment/guestfish-lv-ext4-4k.qtr
new file mode 100644
index 0000000..c95d4b5
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-lv-ext4-4k.qtr
@@ -0,0 +1,450 @@
+S 81920
+R 0 1
+R 0 8
+R 8 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 0 32
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 0 8
+R 0 8
+R 0 32
+R 32 64
+R 128 8
+R 81896 8
+W 0 24
+W 81896 24
+R 81792 8
+R 81904 8
+R 0 32
+W 0 8
+R 32 8
+R 40 56
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 81904 8
+R 32 8
+R 0 32
+W 0 8
+R 2048 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 0 8
+R 512 8
+R 32 8
+R 4096 8
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 0 8
+R 81792 8
+R 81904 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 0 8
+R 8 8
+R 0 8
+R 8 8
+R 24 8
+R 120 8
+R 8 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+W 8 8
+R 0 8
+R 0 8
+W 0 8
+R 8 8
+W 8 8
+R 0 8
+W 0 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 0 8
+R 8 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81728 1
+R 81840 1
+R 64 1
+R 72 1
+R 64 4
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 1
+R 81849 1
+R 81850 1
+R 81851 1
+R 81852 4
+R 2112 1
+R 2113 1
+R 2114 1
+R 2115 1
+R 2116 1
+R 2117 1
+R 2118 1
+R 2119 1
+R 88 1
+R 89 1
+R 90 1
+R 91 1
+R 92 1
+R 93 1
+R 94 1
+R 95 1
+R 120 1
+R 121 1
+R 122 1
+R 123 1
+R 124 1
+R 125 1
+R 126 1
+R 127 1
+R 184 1
+R 185 1
+R 186 6
+R 80 1
+R 81 1
+R 82 1
+R 83 1
+R 84 1
+R 85 3
+R 192 1
+R 193 1
+R 194 1
+R 195 1
+R 196 1
+R 197 1
+R 198 1
+R 199 1
+R 128 1
+R 129 1
+R 130 1
+R 131 1
+R 132 1
+R 133 1
+R 134 1
+R 135 1
+R 576 1
+R 577 1
+R 578 1
+R 579 1
+R 580 1
+R 581 1
+R 582 1
+R 583 1
+R 96 1
+R 97 1
+R 98 1
+R 99 1
+R 100 1
+R 101 1
+R 102 1
+R 103 1
+R 4160 1
+R 4161 1
+R 4162 1
+R 4163 1
+R 4164 1
+R 4165 1
+R 4166 1
+R 4167 1
+R 0 32
+R 81792 8
+R 81904 8
+R 0 8
+R 56 8
+R 8 8
+R 81728 1
+R 81840 1
+R 64 1
+R 72 1
+R 64 4
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 0 8
+R 24 8
+R 56 8
+R 8 8
+R 0 8
+R 8 8
+R 81792 8
+R 81904 8
+R 8 8
+R 0 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 0 8
+R 8 8
+R 81728 1
+R 81840 1
+R 64 1
+R 72 1
+R 64 1
+R 65 3
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 8 8
+R 8 8
+W 8 8
+R 8 8
+R 8 8
+W 8 8
+R 8 8
+R 8 8
+W 8 8
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 81792 8
+R 81904 8
+R 0 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 0 8
+R 8 8
+R 8 8
+R 8 8
+R 64 4
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+W 8 8
+R 8 8
+R 8 8
+R 8 8
+W 8 8
+R 8 8
+R 8 8
+R 8 8
+W 8 8
+R 0 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 8 8
+R 81728 8
+R 81840 8
+R 64 8
+R 72 8
+R 81856 1
+R 81600 8
+R 81848 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 24 8
+R 56 8
+R 65792 8
+R 65904 8
+R 384 8
+R 392 8
+R 65912 8
+R 65656 8
+R 65856 8
+R 65664 8
+R 65520 8
+R 2432 8
+R 408 8
+R 440 8
+R 504 8
+R 400 8
+R 512 8
+R 448 8
+R 896 8
+R 416 8
+R 4480 8
+R 384 8
+W 384 8
+R 81792 8
+R 81904 8
+R 8 8
+R 81912 8
+R 81656 8
+R 81856 8
+R 81664 8
+R 81520 8
+R 384 8
+W 384 3032
+W 3416 576
+W 3992 1448
+W 5440 1608
+W 7048 3032
+W 10080 632
+W 65792 128
+W 384 8
+W 384 8
diff --git a/contrib/visualize-alignment/guestfish-write-hello.qtr b/contrib/visualize-alignment/guestfish-write-hello.qtr
new file mode 100644
index 0000000..28f7bf1
--- /dev/null
+++ b/contrib/visualize-alignment/guestfish-write-hello.qtr
@@ -0,0 +1,101 @@
+S 20480
+R 0 1
+R 0 8
+R 20352 8
+R 20464 8
+R 0 8
+R 8 8
+R 20472 8
+R 20216 8
+R 20416 8
+R 20224 8
+R 20080 8
+R 2048 8
+R 24 8
+R 56 8
+R 120 8
+R 16 8
+R 128 8
+R 64 8
+R 512 8
+R 32 8
+R 4096 8
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 0 8
+R 0 32
+R 20288 1
+R 20400 1
+R 64 1
+R 72 1
+R 64 4
+R 64 4
+R 20288 8
+R 20400 8
+R 64 8
+R 72 8
+R 20416 1
+R 20160 8
+R 20408 8
+R 2112 8
+R 88 8
+R 120 8
+R 184 8
+R 80 8
+R 192 8
+R 128 8
+R 576 8
+R 96 8
+R 4160 8
+R 66 2
+R 68 2
+R 152 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
+R 2 1
+R 21 1
+R 15 1
+R 2 1
+W 66 2
+W 66 2
+W 66 2
+R 470 2
+R 150 2
+R 154 2
+R 148 2
+W 470 2
+W 11330 2
+R 152 2
+W 66 2
+W 68 2
+W 148 8
+W 66 2
+W 66 2
+R 2 1
+R 15 1
+R 21 1
+R 2 1
+W 66 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
+W 66 2
diff --git a/contrib/visualize-alignment/qemu-0.13-trace-block-device-access.patch b/contrib/visualize-alignment/qemu-0.13-trace-block-device-access.patch
new file mode 100644
index 0000000..96904b3
--- /dev/null
+++ b/contrib/visualize-alignment/qemu-0.13-trace-block-device-access.patch
@@ -0,0 +1,104 @@
+From e04ef476fd330485e5a88c7018d29c55cf411fe2 Mon Sep 17 00:00:00 2001
+From: Richard W.M. Jones <rjones at redhat.com>
+Date: Tue, 5 Oct 2010 09:54:10 +0100
+Subject: [PATCH] Trace reads and writes to qemu block devices.
+
+NB: This patch is not suitable for nor intended to go upstream in
+its current form.
+
+When qemu opens a block device, this patch creates a trace file
+in /tmp with a name related to the block device.  Reads and writes
+to the device cause lines to be written to the trace file:
+
+  S <total_sectors>
+  W <sector> <nb_sectors>
+  R <sector> <nb_sectors>
+
+'S' is the summary line, printed first which just tells you how
+many sectors are on the device.
+
+'W' and 'R' are writes and reads, for the range <sector> through
+to <sector> + <nb_sectors> - 1.
+---
+ block.c     |   29 +++++++++++++++++++++++++++++
+ block_int.h |    3 +++
+ 2 files changed, 32 insertions(+), 0 deletions(-)
+
+diff --git a/block.c b/block.c
+index ebbc376..26ead5b 100644
+--- a/block.c
++++ b/block.c
+@@ -474,6 +474,23 @@ static int bdrv_open_common(BlockDriverState *bs, const char *filename,
+         goto free_and_fail;
+     }
+ 
++    /* Open trace file in /tmp based on filename. XXX */
++    size_t len = strlen (filename);
++    char *trace_file = qemu_malloc (10 + len);
++    snprintf (trace_file, 10 + len, "/tmp/%s.qtr", filename);
++    size_t i;
++    for (i = 5; i < 5 + len; ++i) {
++        if (trace_file[i] == '/')
++            trace_file[i] = '_';
++    }
++    bs->trace_fp = fopen (trace_file, "w");
++    if (bs->trace_fp) {
++        setlinebuf (bs->trace_fp);
++        fprintf (bs->trace_fp, "S %" PRIi64 "\n", bs->total_sectors);
++    } else {
++        perror (trace_file);
++    }
++
+ #ifndef _WIN32
+     if (bs->is_temporary) {
+         unlink(filename);
+@@ -665,6 +682,10 @@ void bdrv_close(BlockDriverState *bs)
+             bdrv_close(bs->file);
+         }
+ 
++        if (bs->trace_fp)
++            fclose (bs->trace_fp);
++        bs->trace_fp = NULL;
++
+         /* call the change callback */
+         bs->media_changed = 1;
+         if (bs->change_cb)
+@@ -1995,6 +2016,10 @@ BlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num,
+ 	/* Update stats even though technically transfer has not happened. */
+ 	bs->rd_bytes += (unsigned) nb_sectors * BDRV_SECTOR_SIZE;
+ 	bs->rd_ops ++;
++
++        if (bs->trace_fp)
++            fprintf (bs->trace_fp,
++                     "R %" PRIi64 " %d\n", sector_num, nb_sectors);
+     }
+ 
+     return ret;
+@@ -2028,6 +2053,10 @@ BlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num,
+         if (bs->wr_highest_sector < sector_num + nb_sectors - 1) {
+             bs->wr_highest_sector = sector_num + nb_sectors - 1;
+         }
++
++        if (bs->trace_fp)
++            fprintf (bs->trace_fp,
++                     "W %" PRIi64 " %d\n", sector_num, nb_sectors);
+     }
+ 
+     return ret;
+diff --git a/block_int.h b/block_int.h
+index e8e7156..03e7c9b 100644
+--- a/block_int.h
++++ b/block_int.h
+@@ -178,6 +178,9 @@ struct BlockDriverState {
+     uint64_t wr_ops;
+     uint64_t wr_highest_sector;
+ 
++    /* Trace to file. */
++    FILE *trace_fp;
++
+     /* Whether the disk can expand beyond total_sectors */
+     int growable;
+ 
+-- 
+1.7.3.1
+
diff --git a/contrib/visualize-alignment/tracetops.ml b/contrib/visualize-alignment/tracetops.ml
new file mode 100755
index 0000000..3ea2327
--- /dev/null
+++ b/contrib/visualize-alignment/tracetops.ml
@@ -0,0 +1,423 @@
+#!/usr/bin/ocamlrun /usr/bin/ocaml
+
+(* Convert *.qtr (qemu block device trace) to Postscript.
+ * Copyright (C) 2009-2010 Red Hat Inc.
+ * By Richard W.M. Jones <rjones at redhat.com>.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *)
+
+(* Note that we use ordinary OCaml ints, which means this program is
+ * limited to: ~1TB disks for 32 bit machines, or effectively unlimited
+ * for 64 bit machines.  Also we make several 512 byte sector
+ * assumptions.
+ *)
+
+#use "topfind";;
+#require "extlib";;
+
+open ExtList
+open Scanf
+open Printf
+
+type op = Read | Write
+
+(* If 'true' then print debug messages. *)
+let debug = true
+
+(* Width of each row (in sectors) in the output. *)
+let row_size = 64
+
+(* Desirable alignment (sectors). *)
+let alignment = 8
+
+(* Height (in 1/72 inch) of the final image. *)
+let height = 6.*.72.
+
+(* Width (in 1/72 inch) of the final image. *)
+let width = 6.*.72.
+
+(* Reserve at left for the sector number (comes out of width). *)
+let sn_width = 36.
+
+let input =
+  if Array.length Sys.argv = 2 then
+    Sys.argv.(1)
+  else
+    failwith "usage: tracetops filename.qtr"
+
+(* Read the input file. *)
+let nb_sectors, accesses =
+  let chan = open_in input in
+  let nb_sectors =
+    let summary = input_line chan in
+    if String.length summary < 1 || summary.[0] <> 'S' then
+      failwith (sprintf "%s: input is not a qemu block device trace file"
+                  input);
+    sscanf summary "S %d" (fun x -> x) in
+
+  if nb_sectors mod row_size <> 0 then
+    failwith (sprintf "input nb_sectors (%d) not divisible by row size (%d)"
+                nb_sectors row_size);
+
+  (* Read the reads and writes from the remainder of the file. *)
+  let accesses = ref [] in
+  let rec loop () =
+    let line = input_line chan in
+    let rw, s, n = sscanf line "%c %d %d" (fun rw s n -> (rw, s, n)) in
+    let rw =
+      match rw with
+      | 'R' -> Read | 'W' -> Write
+      | c -> failwith
+          (sprintf "%s: error reading input: got '%c', expecting 'R' or 'W'"
+             input c) in
+    if n < 0 || s < 0 || s+n > nb_sectors then
+      failwith (sprintf "%s: s (%d), n (%d) out of range" input s n);
+    let aligned = s mod alignment = 0 && n mod alignment = 0 in
+    accesses := (rw, aligned, s, n) :: !accesses;
+    loop ()
+  in
+  (try loop () with
+   | End_of_file -> ()
+   | Scan_failure msg ->
+       failwith (sprintf "%s: error reading input: %s" input msg)
+  );
+  close_in chan;
+
+  let accesses = List.rev !accesses in
+
+  if debug then (
+    eprintf "%s: nb_sectors = %d, accesses = %d\n"
+      input nb_sectors (List.length accesses)
+  );
+
+  nb_sectors, accesses
+
+(* If the accesses list contains any qtrace on/off patterns (in
+ * guestfish: debug "qtrace /dev/vda (on|off)") then filter out the
+ * things we want to display.  Otherwise leave the whole trace.
+ *)
+let accesses =
+  let contains_qtrace_patterns =
+    let rec loop = function
+      | [] -> false
+      | (Read, _, 2, 1) :: (Read, _, 21, 1) :: (Read, _, 15, 1) ::
+          (Read, _, 2, 1) :: _ -> true
+      | (Read, _, 2, 1) :: (Read, _, 15, 1) :: (Read, _, 21, 1) ::
+          (Read, _, 2, 1) :: _ -> true
+      | _ :: rest -> loop rest
+    in
+    loop accesses in
+
+  if contains_qtrace_patterns then (
+    if debug then eprintf "%s: contains qtrace on/off patterns\n%!" input;
+
+    let rec find_qtrace_on = function
+      | [] -> []
+      | (Read, _, 2, 1) :: (Read, _, 21, 1) :: (Read, _, 15, 1) ::
+          (Read, _, 2, 1) :: rest -> rest
+      | (Read, _, 2, 1) :: (Read, _, 15, 1) :: (Read, _, 21, 1) ::
+          (Read, _, 2, 1) :: rest ->
+          eprintf "ignored 'qtrace off' pattern when expecting 'qtrace on'\n";
+          find_qtrace_on rest
+      | _ :: rest -> find_qtrace_on rest
+    and split_until_qtrace_off = function
+      | [] -> [], []
+      | (Read, _, 2, 1) :: (Read, _, 15, 1) :: (Read, _, 21, 1) ::
+          (Read, _, 2, 1) :: rest -> [], rest
+      | (Read, _, 2, 1) :: (Read, _, 21, 1) :: (Read, _, 15, 1) ::
+          (Read, _, 2, 1) :: rest ->
+          eprintf "found 'qtrace on' pattern when expecting 'qtrace off'\n";
+          split_until_qtrace_off rest
+      | x :: ys ->
+          let xs, ys = split_until_qtrace_off ys in
+          x :: xs, ys
+    and filter_accesses xs =
+      let xs = find_qtrace_on xs in
+      if xs <> [] then (
+        let xs, ys = split_until_qtrace_off xs in
+        let ys = filter_accesses ys in
+        xs @ ys
+      ) else
+        []
+    in
+    filter_accesses accesses
+  ) else
+    accesses
+
+let ranges =
+  (* Given the number of sectors, make the row array. *)
+  let nr_rows = nb_sectors / row_size in
+  let rows = Array.make nr_rows false in
+
+  List.iter (
+    fun (_, _, s, n) ->
+      let i0 = s / row_size in
+      let i1 = (s+n-1) / row_size in
+      for i = i0 to i1 do rows.(i) <- true done;
+  ) accesses;
+
+  (* Coalesce rows into a list of ranges of rows we will draw. *)
+  let rows = Array.to_list rows in
+  let rows = List.mapi (fun i v -> (v, i)) rows in
+  let ranges =
+    (* When called, we are in the middle of a range which started at i0. *)
+    let rec loop i0 = function
+      | (false, _) :: (false, _) :: (true, i1) :: []
+      | _ :: (_, i1) :: []
+      | (_, i1) :: [] ->
+          [i0, i1]
+      | (false, _) :: (false, _) :: (true, _) :: rest
+      | (false, _) :: (true, _) :: rest
+      | (true, _) :: rest ->
+          loop i0 rest
+      | (false, i1) :: rest ->
+          let i1 = i1 - 1 in
+          let rest = List.dropwhile (function (v, _) -> not v) rest in
+          (match rest with
+           | [] -> [i0, i1]
+           | (_, i2) :: rest -> (i0, i1) :: loop i2 rest)
+      | [] -> assert false
+    in
+    loop 0 (List.tl rows) in
+
+  if debug then (
+    eprintf "%s: rows = %d (ranges = %d)\n" input nr_rows (List.length ranges);
+    List.iter (
+      fun (i0, i1) ->
+        eprintf "  %d - %d (rows %d - %d)\n"
+          (i0 * row_size) ((i1 + 1) * row_size - 1) i0 i1
+    ) ranges
+  );
+
+  ranges
+
+(* Locate where we will draw the rows and cells in the final image. *)
+let iter_rows, mapxy, row_height, cell_width =
+  let nr_ranges = List.length ranges in
+  let nr_breaks = nr_ranges - 1 in
+  let nr_rows =
+    List.fold_left (+) 0 (List.map (fun (i0,i1) -> i1-i0+1) ranges) in
+  let nr_rnb = nr_rows + nr_breaks in
+  let row_height = height /. float nr_rnb in
+  let cell_width = (width -. sn_width) /. float row_size in
+
+  if debug then (
+    eprintf "number of rows and breaks = %d\n" nr_rnb;
+    eprintf "row_height x cell_width = %g x %g\n" row_height cell_width
+  );
+
+  (* Create a higher-order function to iterate over the rows. *)
+  let rec iter_rows f =
+    let rec loop row = function
+      | [] -> ()
+      | (i0,i1) :: rows ->
+          for i = i0 to i1 do
+            let y = float (row+i-i0) *. row_height in
+            f y (Some i)
+          done;
+          (* Call an extra time for the break. *)
+          let y = float (row+i1-i0+1) *. row_height in
+          if rows <> [] then f y None;
+          (* extra +1 here is to skip the break *)
+          loop (row+i1-i0+1+1) rows
+    in
+    loop 0 ranges
+  in
+
+  (* Create a hash which maps from the row number to the position
+   * where we draw the row.  If the row is not drawn, the hash value
+   * is missing.
+   *)
+  let row_y = Hashtbl.create nr_rows in
+  iter_rows (
+    fun y ->
+      function
+      | Some i -> Hashtbl.replace row_y i y
+      | None -> ()
+  );
+
+  (* Create a function which maps from the sector number to the final
+   * position that we will draw it.
+   *)
+  let mapxy s =
+    let r = s / row_size in
+    let y = try Hashtbl.find row_y r with Not_found -> assert false in
+    let x = sn_width +. cell_width *. float (s mod row_size) in
+    x, y
+  in
+
+  iter_rows, mapxy, row_height, cell_width
+
+(* Start the PostScript file. *)
+let () =
+  printf "%%!PS-Adobe-3.0 EPSF-3.0\n";
+  printf "%%%%BoundingBox: -10 -10 %g %g\n"
+    (width +. 10.) (height +. row_height +. 20.);
+  printf "%%%%Creator: tracetops.ml (part of libguestfs)\n";
+  printf "%%%%Title: %s\n" input;
+  printf "%%%%LanguageLevel: 2\n";
+  printf "%%%%Pages: 1\n";
+  printf "%%%%Page: 1 1\n";
+  printf "\n";
+
+  printf "/min { 2 copy gt { exch } if pop } def\n";
+  printf "/max { 2 copy lt { exch } if pop } def\n";
+
+  (* Function for drawing cells. *)
+  printf "/cell {\n";
+  printf "  newpath\n";
+  printf "    moveto\n";
+  printf "    %g 0 rlineto\n" cell_width;
+  printf "    0 %g rlineto\n" row_height;
+  printf "    -%g 0 rlineto\n" cell_width;
+  printf "  closepath\n";
+  printf "  gsave fill grestore 0.75 setgray stroke\n";
+  printf "} def\n";
+
+  (* Define colours for different cell types. *)
+  printf "/unalignedread  { 0.95 0.95 0 setrgbcolor } def\n";
+  printf "/unalignedwrite { 0.95 0 0    setrgbcolor } def\n";
+  printf "/alignedread    { 0 0.95 0    setrgbcolor } def\n";
+  printf "/alignedwrite   { 0 0 0.95    setrgbcolor } def\n";
+
+  (* Get width of text. *)
+  printf "/textwidth { stringwidth pop } def\n";
+
+  (* Draw the outline. *)
+  printf "/outline {\n";
+  printf "  newpath\n";
+  printf "    %g 0 moveto\n" sn_width;
+  printf "    %g 0 lineto\n" width;
+  printf "    %g %g lineto\n" width height;
+  printf "    %g %g lineto\n" sn_width height;
+  printf "  closepath\n";
+  printf "  0.5 setlinewidth 0.3 setgray stroke\n";
+  printf "} def\n";
+
+  (* Draw the outline breaks. *)
+  printf "/breaks {\n";
+  iter_rows (
+    fun y ->
+      function
+      | Some _ -> ()
+      | None ->
+          let f xmin xmax =
+            let yll = y +. row_height /. 3. -. 2. in
+            let ylr = y +. row_height /. 2. -. 2. in
+            let yur = y +. 2. *. row_height /. 3. in
+            let yul = y +. row_height /. 2. in
+            printf "  newpath\n";
+            printf "    %g %g moveto\n" xmin yll;
+            printf "    %g %g lineto\n" xmax ylr;
+            printf "    %g %g lineto\n" xmax yur;
+            printf "    %g %g lineto\n" xmin yul;
+            printf "  closepath\n";
+            printf "  1 setgray fill\n";
+            printf "  newpath\n";
+            printf "    %g %g moveto\n" xmin yll;
+            printf "    %g %g lineto\n" xmax ylr;
+            printf "    %g %g moveto\n" xmax yur;
+            printf "    %g %g lineto\n" xmin yul;
+            printf "  closepath\n";
+            printf "  0.5 setlinewidth 0.3 setgray stroke\n"
+          in
+          f (sn_width -. 6.) (sn_width +. 6.);
+          f (width -. 6.) (width +. 6.)
+  );
+  printf "} def\n";
+
+  (* Draw the labels. *)
+  printf "/labels {\n";
+  printf "  /Courier findfont\n";
+  printf "  0.75 %g mul 10 min scalefont\n" row_height;
+  printf "  setfont\n";
+  iter_rows (
+    fun y ->
+      function
+      | Some i ->
+          let sector = i * row_size in
+          printf "  newpath\n";
+          printf "    /s { (%d) } def\n" sector;
+          printf "    %g s textwidth sub 4 sub %g moveto\n" sn_width (y +. 2.);
+          printf "  s show\n"
+      | None -> ()
+  );
+  printf "} def\n";
+
+  (* Print the key. *)
+  printf "/key {\n";
+  printf "  /Times-Roman findfont\n";
+  printf "  10. scalefont\n";
+  printf "  setfont\n";
+  let x = sn_width and y = height +. 10. in
+  printf "  unalignedwrite %g %g cell\n" x y;
+  let x = x +. cell_width +. 4. in
+  printf "  newpath %g %g moveto (unaligned write) 0.3 setgray show\n" x y;
+  let x = x +. 72. in
+  printf "  unalignedread %g %g cell\n" x y;
+  let x = x +. cell_width +. 4. in
+  printf "  newpath %g %g moveto (unaligned read) 0.3 setgray show\n" x y;
+  let x = x +. 72. in
+  printf "  alignedwrite %g %g cell\n" x y;
+  let x = x +. cell_width +. 4. in
+  printf "  newpath %g %g moveto (aligned write) 0.3 setgray show\n" x y;
+  let x = x +. 72. in
+  printf "  alignedread %g %g cell\n" x y;
+  let x = x +. cell_width +. 4. in
+  printf "  newpath %g %g moveto (aligned read) 0.3 setgray show\n" x y;
+  printf "} def\n";
+
+  printf "\n"
+
+(* Draw the accesses. *)
+let () =
+  (* Sort the accesses so unaligned ones are displayed at the end (on
+   * top of aligned ones) and writes on top of reads.  This isn't
+   * really perfect, but it'll do.
+   *)
+  let cmp (rw, aligned, s, n) (rw', aligned', s', n') =
+    let r = compare rw rw' (* Write later *) in
+    if r <> 0 then r else (
+      let r = compare aligned' aligned (* unaligned later *) in
+      if r <> 0 then r else
+        compare (n, s) (n', s')
+    )
+  in
+  let accesses = List.sort ~cmp accesses in
+
+  List.iter (
+    fun op ->
+      let col, s, n =
+        match op with
+        | Read, false, s, n ->
+            "unalignedread", s, n
+        | Write, false, s, n ->
+            "unalignedwrite", s, n
+        | Read, true, s, n ->
+            "alignedread", s, n
+        | Write, true, s, n ->
+            "alignedwrite", s, n in
+      for i = s to s+n-1 do
+        let x, y = mapxy i in
+        printf "%s %g %g cell\n" col x y
+      done;
+      printf "\n"
+  ) accesses
+
+(* Finish off the PostScript output. *)
+let () =
+  printf "outline breaks labels key\n";
+  printf "%%%%EOF\n"
diff --git a/daemon/debug.c b/daemon/debug.c
index 2ba48a7..6b9d756 100644
--- a/daemon/debug.c
+++ b/daemon/debug.c
@@ -92,7 +92,7 @@ do_debug (const char *subcmd, char *const *argv)
       return cmds[i].f (subcmd, argc, argv);
   }
 
-  reply_with_error ("use 'debug help' to list the supported commands");
+  reply_with_error ("use 'debug help 0' to list the supported commands");
   return NULL;
 }
 
diff --git a/debian/changelog b/debian/changelog
index 4a4764d..b0aa845 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,6 +1,6 @@
-libguestfs (1.15.0-1) unstable; urgency=low
+libguestfs (1.15.1-1) unstable; urgency=low
 
-  * release: New upstream version 1.15.0.
+  * release: New upstream version 1.15.1.
 
  -- Richard W.M. Jones <rjones at redhat.com>  Thu,  9 Dec 2010 12:00:00 +0000
 
diff --git a/fish/inspect.c b/fish/inspect.c
index 2ca54d2..0b82ade 100644
--- a/fish/inspect.c
+++ b/fish/inspect.c
@@ -43,14 +43,14 @@ free_strings (char **argv)
   free (argv);
 }
 
-static int
+static size_t
 count_strings (char *const *argv)
 {
-  int c;
+  size_t i;
 
-  for (c = 0; argv[c]; ++c)
+  for (i = 0; argv[i]; ++i)
     ;
-  return c;
+  return i;
 }
 
 static int
diff --git a/generator/generator_perl.ml b/generator/generator_perl.ml
index d24e775..c9ec4fb 100644
--- a/generator/generator_perl.ml
+++ b/generator/generator_perl.ml
@@ -810,10 +810,71 @@ handlers and threads.
       )
   ) all_functions_sorted;
 
+  pr "=cut\n\n";
+
+  (* Introspection hash. *)
+  pr "use vars qw(%%guestfs_introspection);\n";
+  pr "%%guestfs_introspection = (\n";
+  List.iter (
+    fun (name, (ret, args, optargs), _, _, _, shortdesc, _) ->
+      pr "  \"%s\" => {\n" name;
+      pr "    ret => ";
+      (match ret with
+       | RErr -> pr "'void'"
+       | RInt _ -> pr "'int'"
+       | RBool _ -> pr "'bool'"
+       | RInt64 _ -> pr "'int64'"
+       | RConstString _ -> pr "'const string'"
+       | RConstOptString _ -> pr "'const nullable string'"
+       | RString _ -> pr "'string'"
+       | RStringList _ -> pr "'string list'"
+       | RHashtable _ -> pr "'hash'"
+       | RStruct (_, typ) -> pr "'struct %s'" typ
+       | RStructList (_, typ) -> pr "'struct %s list'" typ
+       | RBufferOut _ -> pr "'buffer'"
+      );
+      pr ",\n";
+      let pr_type i = function
+        | Pathname n -> pr "[ '%s', 'string(path)', %d ]" n i
+        | Device n -> pr "[ '%s', 'string(device)', %d ]" n i
+        | Dev_or_Path n -> pr "[ '%s', 'string(dev_or_path)', %d ]" n i
+        | String n -> pr "[ '%s', 'string', %d ]" n i
+        | FileIn n -> pr "[ '%s', 'string(filename)', %d ]" n i
+        | FileOut n -> pr "[ '%s', 'string(filename)', %d ]" n i
+        | Key n -> pr "[ '%s', 'string(key)', %d ]" n i
+        | BufferIn n -> pr "[ '%s', 'buffer', %d ]" n i
+        | OptString n -> pr "[ '%s', 'nullable string', %d ]" n i
+        | StringList n -> pr "[ '%s', 'string list', %d ]" n i
+        | DeviceList n -> pr "[ '%s', 'string(device) list', %d ]" n i
+        | Bool n -> pr "[ '%s', 'bool', %d ]" n i
+        | Int n -> pr "[ '%s', 'int', %d ]" n i
+        | Int64 n -> pr "[ '%s', 'int64', %d ]" n i
+        | Pointer (t, n) -> pr "[ '%s', 'pointer(%s)', %d ]" n t i
+      in
+      pr "    args => [\n";
+      iteri (fun i arg ->
+        pr "      ";
+        pr_type i arg;
+        pr ",\n"
+      ) args;
+      pr "    ],\n";
+      if optargs <> [] then (
+        pr "    optargs => {\n";
+        iteri (fun i arg ->
+          pr "      %s => " (name_of_argt arg);
+          pr_type i arg;
+          pr ",\n"
+        ) optargs;
+        pr "    },\n";
+      );
+      pr "    name => \"%s\",\n" name;
+      pr "    description => %S,\n" shortdesc;
+      pr "  },\n";
+  ) all_functions_sorted;
+  pr ");\n\n";
+
   (* End of file. *)
   pr "\
-=cut
-
 1;
 
 =back
@@ -835,6 +896,33 @@ class, use the ordinary Perl UNIVERSAL method C<can(METHOD)>
    print \"\\$h->set_verbose is available\\n\";
  }
 
+Perl does not offer a way to list the arguments of a method, and
+from time to time we may add extra arguments to calls that take
+optional arguments.  For this reason, we provide a global hash
+variable C<%%guestfs_introspection> which contains the arguments
+and their types for each libguestfs method.  The keys of this
+hash are the method names, and the values are an hashref
+containing useful introspection information about the method
+(further fields may be added to this in future).
+
+ use Sys::Guestfs;
+ $Sys::Guestfs::guestfs_introspection{mkfs_opts}
+ => {
+    ret => 'void',                    # return type
+    args => [                         # required arguments
+      [ 'fstype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    optargs => {                      # optional arguments
+      blocksize => [ 'blocksize', 'int', 0 ],
+      features => [ 'features', 'string', 1 ],
+      inode => [ 'inode', 'int', 2 ],
+      sectorsize => [ 'sectorsize', 'int', 3 ],
+    },
+    name => \"mkfs_opts\",
+    description => \"make a filesystem\",
+  }
+
 To test if particular features are supported by the current
 build, use the L</available> method like the example below.  Note
 that the appliance must be launched first.
diff --git a/libguestfs.pc b/libguestfs.pc
index f41128e..25c6c52 100644
--- a/libguestfs.pc
+++ b/libguestfs.pc
@@ -4,7 +4,7 @@ libdir=${exec_prefix}/lib
 includedir=${prefix}/include
 
 Name: libguestfs
-Version: 1.15.0
+Version: 1.15.1
 Description: libguestfs library for accessing and modifying VM images
 Requires:
 Cflags:
diff --git a/perl/lib/Sys/Guestfs.pm b/perl/lib/Sys/Guestfs.pm
index fcb6a8e..8aa66e1 100644
--- a/perl/lib/Sys/Guestfs.pm
+++ b/perl/lib/Sys/Guestfs.pm
@@ -4843,6 +4843,3343 @@ of somewhere between 2MB and 4MB.  See L<guestfs(3)/PROTOCOL LIMITS>.
 
 =cut
 
+use vars qw(%guestfs_introspection);
+%guestfs_introspection = (
+  "add_cdrom" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+    ],
+    name => "add_cdrom",
+    description => "add a CD-ROM disk image to examine",
+  },
+  "add_domain" => {
+    ret => 'int',
+    args => [
+      [ 'dom', 'string', 0 ],
+    ],
+    optargs => {
+      libvirturi => [ 'libvirturi', 'string', 0 ],
+      readonly => [ 'readonly', 'bool', 1 ],
+      iface => [ 'iface', 'string', 2 ],
+      live => [ 'live', 'bool', 3 ],
+      allowuuid => [ 'allowuuid', 'bool', 4 ],
+      readonlydisk => [ 'readonlydisk', 'string', 5 ],
+    },
+    name => "add_domain",
+    description => "add the disk(s) from a named libvirt domain",
+  },
+  "add_drive" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+    ],
+    name => "add_drive",
+    description => "add an image to examine or modify",
+  },
+  "add_drive_opts" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+    ],
+    optargs => {
+      readonly => [ 'readonly', 'bool', 0 ],
+      format => [ 'format', 'string', 1 ],
+      iface => [ 'iface', 'string', 2 ],
+      name => [ 'name', 'string', 3 ],
+    },
+    name => "add_drive_opts",
+    description => "add an image to examine or modify",
+  },
+  "add_drive_ro" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+    ],
+    name => "add_drive_ro",
+    description => "add a drive in snapshot mode (read-only)",
+  },
+  "add_drive_ro_with_if" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+      [ 'iface', 'string', 1 ],
+    ],
+    name => "add_drive_ro_with_if",
+    description => "add a drive read-only specifying the QEMU block emulation to use",
+  },
+  "add_drive_with_if" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string', 0 ],
+      [ 'iface', 'string', 1 ],
+    ],
+    name => "add_drive_with_if",
+    description => "add a drive specifying the QEMU block emulation to use",
+  },
+  "aug_clear" => {
+    ret => 'void',
+    args => [
+      [ 'augpath', 'string', 0 ],
+    ],
+    name => "aug_clear",
+    description => "clear Augeas path",
+  },
+  "aug_close" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "aug_close",
+    description => "close the current Augeas handle",
+  },
+  "aug_defnode" => {
+    ret => 'struct int_bool',
+    args => [
+      [ 'name', 'string', 0 ],
+      [ 'expr', 'string', 1 ],
+      [ 'val', 'string', 2 ],
+    ],
+    name => "aug_defnode",
+    description => "define an Augeas node",
+  },
+  "aug_defvar" => {
+    ret => 'int',
+    args => [
+      [ 'name', 'string', 0 ],
+      [ 'expr', 'nullable string', 1 ],
+    ],
+    name => "aug_defvar",
+    description => "define an Augeas variable",
+  },
+  "aug_get" => {
+    ret => 'string',
+    args => [
+      [ 'augpath', 'string', 0 ],
+    ],
+    name => "aug_get",
+    description => "look up the value of an Augeas path",
+  },
+  "aug_init" => {
+    ret => 'void',
+    args => [
+      [ 'root', 'string(path)', 0 ],
+      [ 'flags', 'int', 1 ],
+    ],
+    name => "aug_init",
+    description => "create a new Augeas handle",
+  },
+  "aug_insert" => {
+    ret => 'void',
+    args => [
+      [ 'augpath', 'string', 0 ],
+      [ 'label', 'string', 1 ],
+      [ 'before', 'bool', 2 ],
+    ],
+    name => "aug_insert",
+    description => "insert a sibling Augeas node",
+  },
+  "aug_load" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "aug_load",
+    description => "load files into the tree",
+  },
+  "aug_ls" => {
+    ret => 'string list',
+    args => [
+      [ 'augpath', 'string', 0 ],
+    ],
+    name => "aug_ls",
+    description => "list Augeas nodes under augpath",
+  },
+  "aug_match" => {
+    ret => 'string list',
+    args => [
+      [ 'augpath', 'string', 0 ],
+    ],
+    name => "aug_match",
+    description => "return Augeas nodes which match augpath",
+  },
+  "aug_mv" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string', 0 ],
+      [ 'dest', 'string', 1 ],
+    ],
+    name => "aug_mv",
+    description => "move Augeas node",
+  },
+  "aug_rm" => {
+    ret => 'int',
+    args => [
+      [ 'augpath', 'string', 0 ],
+    ],
+    name => "aug_rm",
+    description => "remove an Augeas path",
+  },
+  "aug_save" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "aug_save",
+    description => "write all pending Augeas changes to disk",
+  },
+  "aug_set" => {
+    ret => 'void',
+    args => [
+      [ 'augpath', 'string', 0 ],
+      [ 'val', 'string', 1 ],
+    ],
+    name => "aug_set",
+    description => "set Augeas path to value",
+  },
+  "available" => {
+    ret => 'void',
+    args => [
+      [ 'groups', 'string list', 0 ],
+    ],
+    name => "available",
+    description => "test availability of some parts of the API",
+  },
+  "available_all_groups" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "available_all_groups",
+    description => "return a list of all optional groups",
+  },
+  "base64_in" => {
+    ret => 'void',
+    args => [
+      [ 'base64file', 'string(filename)', 0 ],
+      [ 'filename', 'string(path)', 1 ],
+    ],
+    name => "base64_in",
+    description => "upload base64-encoded data to file",
+  },
+  "base64_out" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string(path)', 0 ],
+      [ 'base64file', 'string(filename)', 1 ],
+    ],
+    name => "base64_out",
+    description => "download file and encode as base64",
+  },
+  "blockdev_flushbufs" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_flushbufs",
+    description => "flush device buffers",
+  },
+  "blockdev_getbsz" => {
+    ret => 'int',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_getbsz",
+    description => "get blocksize of block device",
+  },
+  "blockdev_getro" => {
+    ret => 'bool',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_getro",
+    description => "is block device set to read-only",
+  },
+  "blockdev_getsize64" => {
+    ret => 'int64',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_getsize64",
+    description => "get total size of device in bytes",
+  },
+  "blockdev_getss" => {
+    ret => 'int',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_getss",
+    description => "get sectorsize of block device",
+  },
+  "blockdev_getsz" => {
+    ret => 'int64',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_getsz",
+    description => "get total size of device in 512-byte sectors",
+  },
+  "blockdev_rereadpt" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_rereadpt",
+    description => "reread partition table",
+  },
+  "blockdev_setbsz" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'blocksize', 'int', 1 ],
+    ],
+    name => "blockdev_setbsz",
+    description => "set blocksize of block device",
+  },
+  "blockdev_setro" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_setro",
+    description => "set block device to read-only",
+  },
+  "blockdev_setrw" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "blockdev_setrw",
+    description => "set block device to read-write",
+  },
+  "btrfs_filesystem_resize" => {
+    ret => 'void',
+    args => [
+      [ 'mountpoint', 'string(path)', 0 ],
+    ],
+    optargs => {
+      size => [ 'size', 'int64', 0 ],
+    },
+    name => "btrfs_filesystem_resize",
+    description => "resize a btrfs filesystem",
+  },
+  "case_sensitive_path" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "case_sensitive_path",
+    description => "return true path on case-insensitive filesystem",
+  },
+  "cat" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "cat",
+    description => "list the contents of a file",
+  },
+  "checksum" => {
+    ret => 'string',
+    args => [
+      [ 'csumtype', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "checksum",
+    description => "compute MD5, SHAx or CRC checksum of file",
+  },
+  "checksum_device" => {
+    ret => 'string',
+    args => [
+      [ 'csumtype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "checksum_device",
+    description => "compute MD5, SHAx or CRC checksum of the contents of a device",
+  },
+  "checksums_out" => {
+    ret => 'void',
+    args => [
+      [ 'csumtype', 'string', 0 ],
+      [ 'directory', 'string(path)', 1 ],
+      [ 'sumsfile', 'string(filename)', 2 ],
+    ],
+    name => "checksums_out",
+    description => "compute MD5, SHAx or CRC checksum of files in a directory",
+  },
+  "chmod" => {
+    ret => 'void',
+    args => [
+      [ 'mode', 'int', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "chmod",
+    description => "change file mode",
+  },
+  "chown" => {
+    ret => 'void',
+    args => [
+      [ 'owner', 'int', 0 ],
+      [ 'group', 'int', 1 ],
+      [ 'path', 'string(path)', 2 ],
+    ],
+    name => "chown",
+    description => "change file owner and group",
+  },
+  "command" => {
+    ret => 'string',
+    args => [
+      [ 'arguments', 'string list', 0 ],
+    ],
+    name => "command",
+    description => "run a command from the guest filesystem",
+  },
+  "command_lines" => {
+    ret => 'string list',
+    args => [
+      [ 'arguments', 'string list', 0 ],
+    ],
+    name => "command_lines",
+    description => "run a command, returning lines",
+  },
+  "compress_device_out" => {
+    ret => 'void',
+    args => [
+      [ 'ctype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+      [ 'zdevice', 'string(filename)', 2 ],
+    ],
+    optargs => {
+      level => [ 'level', 'int', 0 ],
+    },
+    name => "compress_device_out",
+    description => "output compressed device",
+  },
+  "compress_out" => {
+    ret => 'void',
+    args => [
+      [ 'ctype', 'string', 0 ],
+      [ 'file', 'string(path)', 1 ],
+      [ 'zfile', 'string(filename)', 2 ],
+    ],
+    optargs => {
+      level => [ 'level', 'int', 0 ],
+    },
+    name => "compress_out",
+    description => "output compressed file",
+  },
+  "config" => {
+    ret => 'void',
+    args => [
+      [ 'qemuparam', 'string', 0 ],
+      [ 'qemuvalue', 'nullable string', 1 ],
+    ],
+    name => "config",
+    description => "add qemu parameters",
+  },
+  "copy_device_to_device" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(device)', 0 ],
+      [ 'dest', 'string(device)', 1 ],
+    ],
+    optargs => {
+      srcoffset => [ 'srcoffset', 'int64', 0 ],
+      destoffset => [ 'destoffset', 'int64', 1 ],
+      size => [ 'size', 'int64', 2 ],
+    },
+    name => "copy_device_to_device",
+    description => "copy from source device to destination device",
+  },
+  "copy_device_to_file" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(device)', 0 ],
+      [ 'dest', 'string(path)', 1 ],
+    ],
+    optargs => {
+      srcoffset => [ 'srcoffset', 'int64', 0 ],
+      destoffset => [ 'destoffset', 'int64', 1 ],
+      size => [ 'size', 'int64', 2 ],
+    },
+    name => "copy_device_to_file",
+    description => "copy from source device to destination file",
+  },
+  "copy_file_to_device" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(path)', 0 ],
+      [ 'dest', 'string(device)', 1 ],
+    ],
+    optargs => {
+      srcoffset => [ 'srcoffset', 'int64', 0 ],
+      destoffset => [ 'destoffset', 'int64', 1 ],
+      size => [ 'size', 'int64', 2 ],
+    },
+    name => "copy_file_to_device",
+    description => "copy from source file to destination device",
+  },
+  "copy_file_to_file" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(path)', 0 ],
+      [ 'dest', 'string(path)', 1 ],
+    ],
+    optargs => {
+      srcoffset => [ 'srcoffset', 'int64', 0 ],
+      destoffset => [ 'destoffset', 'int64', 1 ],
+      size => [ 'size', 'int64', 2 ],
+    },
+    name => "copy_file_to_file",
+    description => "copy from source file to destination file",
+  },
+  "copy_size" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(dev_or_path)', 0 ],
+      [ 'dest', 'string(dev_or_path)', 1 ],
+      [ 'size', 'int64', 2 ],
+    ],
+    name => "copy_size",
+    description => "copy size bytes from source to destination using dd",
+  },
+  "cp" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(path)', 0 ],
+      [ 'dest', 'string(path)', 1 ],
+    ],
+    name => "cp",
+    description => "copy a file",
+  },
+  "cp_a" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(path)', 0 ],
+      [ 'dest', 'string(path)', 1 ],
+    ],
+    name => "cp_a",
+    description => "copy a file or directory recursively",
+  },
+  "dd" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(dev_or_path)', 0 ],
+      [ 'dest', 'string(dev_or_path)', 1 ],
+    ],
+    name => "dd",
+    description => "copy from source to destination using dd",
+  },
+  "debug" => {
+    ret => 'string',
+    args => [
+      [ 'subcmd', 'string', 0 ],
+      [ 'extraargs', 'string list', 1 ],
+    ],
+    name => "debug",
+    description => "debugging and internals",
+  },
+  "debug_cmdline" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "debug_cmdline",
+    description => "debug the QEMU command line (internal use only)",
+  },
+  "debug_drives" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "debug_drives",
+    description => "debug the drives (internal use only)",
+  },
+  "debug_upload" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string(filename)', 0 ],
+      [ 'tmpname', 'string', 1 ],
+      [ 'mode', 'int', 2 ],
+    ],
+    name => "debug_upload",
+    description => "upload a file to the appliance (internal use only)",
+  },
+  "df" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "df",
+    description => "report file system disk space usage",
+  },
+  "df_h" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "df_h",
+    description => "report file system disk space usage (human readable)",
+  },
+  "dmesg" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "dmesg",
+    description => "return kernel messages",
+  },
+  "download" => {
+    ret => 'void',
+    args => [
+      [ 'remotefilename', 'string(dev_or_path)', 0 ],
+      [ 'filename', 'string(filename)', 1 ],
+    ],
+    name => "download",
+    description => "download a file to the local machine",
+  },
+  "download_offset" => {
+    ret => 'void',
+    args => [
+      [ 'remotefilename', 'string(dev_or_path)', 0 ],
+      [ 'filename', 'string(filename)', 1 ],
+      [ 'offset', 'int64', 2 ],
+      [ 'size', 'int64', 3 ],
+    ],
+    name => "download_offset",
+    description => "download a file to the local machine with offset and size",
+  },
+  "drop_caches" => {
+    ret => 'void',
+    args => [
+      [ 'whattodrop', 'int', 0 ],
+    ],
+    name => "drop_caches",
+    description => "drop kernel page cache, dentries and inodes",
+  },
+  "du" => {
+    ret => 'int64',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "du",
+    description => "estimate file space usage",
+  },
+  "e2fsck_f" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "e2fsck_f",
+    description => "check an ext2/ext3 filesystem",
+  },
+  "echo_daemon" => {
+    ret => 'string',
+    args => [
+      [ 'words', 'string list', 0 ],
+    ],
+    name => "echo_daemon",
+    description => "echo arguments back to the client",
+  },
+  "egrep" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "egrep",
+    description => "return lines matching a pattern",
+  },
+  "egrepi" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "egrepi",
+    description => "return lines matching a pattern",
+  },
+  "equal" => {
+    ret => 'bool',
+    args => [
+      [ 'file1', 'string(path)', 0 ],
+      [ 'file2', 'string(path)', 1 ],
+    ],
+    name => "equal",
+    description => "test if two files have equal contents",
+  },
+  "exists" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "exists",
+    description => "test if file or directory exists",
+  },
+  "fallocate" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'len', 'int', 1 ],
+    ],
+    name => "fallocate",
+    description => "preallocate a file in the guest filesystem",
+  },
+  "fallocate64" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'len', 'int64', 1 ],
+    ],
+    name => "fallocate64",
+    description => "preallocate a file in the guest filesystem",
+  },
+  "fgrep" => {
+    ret => 'string list',
+    args => [
+      [ 'pattern', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "fgrep",
+    description => "return lines matching a pattern",
+  },
+  "fgrepi" => {
+    ret => 'string list',
+    args => [
+      [ 'pattern', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "fgrepi",
+    description => "return lines matching a pattern",
+  },
+  "file" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(dev_or_path)', 0 ],
+    ],
+    name => "file",
+    description => "determine file type",
+  },
+  "file_architecture" => {
+    ret => 'string',
+    args => [
+      [ 'filename', 'string(path)', 0 ],
+    ],
+    name => "file_architecture",
+    description => "detect the architecture of a binary file",
+  },
+  "filesize" => {
+    ret => 'int64',
+    args => [
+      [ 'file', 'string(path)', 0 ],
+    ],
+    name => "filesize",
+    description => "return the size of the file in bytes",
+  },
+  "fill" => {
+    ret => 'void',
+    args => [
+      [ 'c', 'int', 0 ],
+      [ 'len', 'int', 1 ],
+      [ 'path', 'string(path)', 2 ],
+    ],
+    name => "fill",
+    description => "fill a file with octets",
+  },
+  "fill_pattern" => {
+    ret => 'void',
+    args => [
+      [ 'pattern', 'string', 0 ],
+      [ 'len', 'int', 1 ],
+      [ 'path', 'string(path)', 2 ],
+    ],
+    name => "fill_pattern",
+    description => "fill a file with a repeating pattern of bytes",
+  },
+  "find" => {
+    ret => 'string list',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+    ],
+    name => "find",
+    description => "find all files and directories",
+  },
+  "find0" => {
+    ret => 'void',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+      [ 'files', 'string(filename)', 1 ],
+    ],
+    name => "find0",
+    description => "find all files and directories, returning NUL-separated list",
+  },
+  "findfs_label" => {
+    ret => 'string',
+    args => [
+      [ 'label', 'string', 0 ],
+    ],
+    name => "findfs_label",
+    description => "find a filesystem by label",
+  },
+  "findfs_uuid" => {
+    ret => 'string',
+    args => [
+      [ 'uuid', 'string', 0 ],
+    ],
+    name => "findfs_uuid",
+    description => "find a filesystem by UUID",
+  },
+  "fsck" => {
+    ret => 'int',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "fsck",
+    description => "run the filesystem checker",
+  },
+  "get_append" => {
+    ret => 'const nullable string',
+    args => [
+    ],
+    name => "get_append",
+    description => "get the additional kernel options",
+  },
+  "get_attach_method" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "get_attach_method",
+    description => "get the attach method",
+  },
+  "get_autosync" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_autosync",
+    description => "get autosync mode",
+  },
+  "get_direct" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_direct",
+    description => "get direct appliance mode flag",
+  },
+  "get_e2label" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "get_e2label",
+    description => "get the ext2/3/4 filesystem label",
+  },
+  "get_e2uuid" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "get_e2uuid",
+    description => "get the ext2/3/4 filesystem UUID",
+  },
+  "get_memsize" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "get_memsize",
+    description => "get memory allocated to the qemu subprocess",
+  },
+  "get_network" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_network",
+    description => "get enable network flag",
+  },
+  "get_path" => {
+    ret => 'const string',
+    args => [
+    ],
+    name => "get_path",
+    description => "get the search path",
+  },
+  "get_pgroup" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_pgroup",
+    description => "get process group flag",
+  },
+  "get_pid" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "get_pid",
+    description => "get PID of qemu subprocess",
+  },
+  "get_qemu" => {
+    ret => 'const string',
+    args => [
+    ],
+    name => "get_qemu",
+    description => "get the qemu binary",
+  },
+  "get_recovery_proc" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_recovery_proc",
+    description => "get recovery process enabled flag",
+  },
+  "get_selinux" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_selinux",
+    description => "get SELinux enabled flag",
+  },
+  "get_smp" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "get_smp",
+    description => "get number of virtual CPUs in appliance",
+  },
+  "get_state" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "get_state",
+    description => "get the current state",
+  },
+  "get_trace" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_trace",
+    description => "get command trace enabled flag",
+  },
+  "get_umask" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "get_umask",
+    description => "get the current umask",
+  },
+  "get_verbose" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "get_verbose",
+    description => "get verbose mode",
+  },
+  "getcon" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "getcon",
+    description => "get SELinux security context",
+  },
+  "getxattr" => {
+    ret => 'buffer',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'name', 'string', 1 ],
+    ],
+    name => "getxattr",
+    description => "get a single extended attribute",
+  },
+  "getxattrs" => {
+    ret => 'struct xattr list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "getxattrs",
+    description => "list extended attributes of a file or directory",
+  },
+  "glob_expand" => {
+    ret => 'string list',
+    args => [
+      [ 'pattern', 'string(path)', 0 ],
+    ],
+    name => "glob_expand",
+    description => "expand a wildcard path",
+  },
+  "grep" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "grep",
+    description => "return lines matching a pattern",
+  },
+  "grepi" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "grepi",
+    description => "return lines matching a pattern",
+  },
+  "grub_install" => {
+    ret => 'void',
+    args => [
+      [ 'root', 'string(path)', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "grub_install",
+    description => "install GRUB 1",
+  },
+  "head" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "head",
+    description => "return first 10 lines of a file",
+  },
+  "head_n" => {
+    ret => 'string list',
+    args => [
+      [ 'nrlines', 'int', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "head_n",
+    description => "return first N lines of a file",
+  },
+  "hexdump" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "hexdump",
+    description => "dump a file in hexadecimal",
+  },
+  "initrd_cat" => {
+    ret => 'buffer',
+    args => [
+      [ 'initrdpath', 'string(path)', 0 ],
+      [ 'filename', 'string', 1 ],
+    ],
+    name => "initrd_cat",
+    description => "list the contents of a single file in an initrd",
+  },
+  "initrd_list" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "initrd_list",
+    description => "list files in an initrd",
+  },
+  "inotify_add_watch" => {
+    ret => 'int64',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'mask', 'int', 1 ],
+    ],
+    name => "inotify_add_watch",
+    description => "add an inotify watch",
+  },
+  "inotify_close" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "inotify_close",
+    description => "close the inotify handle",
+  },
+  "inotify_files" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "inotify_files",
+    description => "return list of watched files that had events",
+  },
+  "inotify_init" => {
+    ret => 'void',
+    args => [
+      [ 'maxevents', 'int', 0 ],
+    ],
+    name => "inotify_init",
+    description => "create an inotify handle",
+  },
+  "inotify_read" => {
+    ret => 'struct inotify_event list',
+    args => [
+    ],
+    name => "inotify_read",
+    description => "return list of inotify events",
+  },
+  "inotify_rm_watch" => {
+    ret => 'void',
+    args => [
+      [ 'wd', 'int', 0 ],
+    ],
+    name => "inotify_rm_watch",
+    description => "remove an inotify watch",
+  },
+  "inspect_get_arch" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_arch",
+    description => "get architecture of inspected operating system",
+  },
+  "inspect_get_distro" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_distro",
+    description => "get distro of inspected operating system",
+  },
+  "inspect_get_drive_mappings" => {
+    ret => 'hash',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_drive_mappings",
+    description => "get drive letter mappings",
+  },
+  "inspect_get_filesystems" => {
+    ret => 'string list',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_filesystems",
+    description => "get filesystems associated with inspected operating system",
+  },
+  "inspect_get_format" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_format",
+    description => "get format of inspected operating system",
+  },
+  "inspect_get_hostname" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_hostname",
+    description => "get hostname of the operating system",
+  },
+  "inspect_get_icon" => {
+    ret => 'buffer',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    optargs => {
+      favicon => [ 'favicon', 'bool', 0 ],
+      highquality => [ 'highquality', 'bool', 1 ],
+    },
+    name => "inspect_get_icon",
+    description => "get the icon corresponding to this operating system",
+  },
+  "inspect_get_major_version" => {
+    ret => 'int',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_major_version",
+    description => "get major version of inspected operating system",
+  },
+  "inspect_get_minor_version" => {
+    ret => 'int',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_minor_version",
+    description => "get minor version of inspected operating system",
+  },
+  "inspect_get_mountpoints" => {
+    ret => 'hash',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_mountpoints",
+    description => "get mountpoints of inspected operating system",
+  },
+  "inspect_get_package_format" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_package_format",
+    description => "get package format used by the operating system",
+  },
+  "inspect_get_package_management" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_package_management",
+    description => "get package management tool used by the operating system",
+  },
+  "inspect_get_product_name" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_product_name",
+    description => "get product name of inspected operating system",
+  },
+  "inspect_get_product_variant" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_product_variant",
+    description => "get product variant of inspected operating system",
+  },
+  "inspect_get_roots" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "inspect_get_roots",
+    description => "return list of operating systems found by last inspection",
+  },
+  "inspect_get_type" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_type",
+    description => "get type of inspected operating system",
+  },
+  "inspect_get_windows_current_control_set" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_windows_current_control_set",
+    description => "get Windows CurrentControlSet of inspected operating system",
+  },
+  "inspect_get_windows_systemroot" => {
+    ret => 'string',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_get_windows_systemroot",
+    description => "get Windows systemroot of inspected operating system",
+  },
+  "inspect_is_live" => {
+    ret => 'bool',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_is_live",
+    description => "get live flag for install disk",
+  },
+  "inspect_is_multipart" => {
+    ret => 'bool',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_is_multipart",
+    description => "get multipart flag for install disk",
+  },
+  "inspect_is_netinst" => {
+    ret => 'bool',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_is_netinst",
+    description => "get netinst (network installer) flag for install disk",
+  },
+  "inspect_list_applications" => {
+    ret => 'struct application list',
+    args => [
+      [ 'root', 'string(device)', 0 ],
+    ],
+    name => "inspect_list_applications",
+    description => "get list of applications installed in the operating system",
+  },
+  "inspect_os" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "inspect_os",
+    description => "inspect disk and return list of operating systems found",
+  },
+  "internal_autosync" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "internal_autosync",
+    description => "internal autosync operation",
+  },
+  "is_blockdev" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_blockdev",
+    description => "test if block device",
+  },
+  "is_busy" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "is_busy",
+    description => "is busy processing a command",
+  },
+  "is_chardev" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_chardev",
+    description => "test if character device",
+  },
+  "is_config" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "is_config",
+    description => "is in configuration state",
+  },
+  "is_dir" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_dir",
+    description => "test if a directory",
+  },
+  "is_fifo" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_fifo",
+    description => "test if FIFO (named pipe)",
+  },
+  "is_file" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_file",
+    description => "test if a regular file",
+  },
+  "is_launching" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "is_launching",
+    description => "is launching subprocess",
+  },
+  "is_lv" => {
+    ret => 'bool',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "is_lv",
+    description => "test if device is a logical volume",
+  },
+  "is_ready" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "is_ready",
+    description => "is ready to accept commands",
+  },
+  "is_socket" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_socket",
+    description => "test if socket",
+  },
+  "is_symlink" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_symlink",
+    description => "test if symbolic link",
+  },
+  "is_zero" => {
+    ret => 'bool',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "is_zero",
+    description => "test if a file contains all zero bytes",
+  },
+  "is_zero_device" => {
+    ret => 'bool',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "is_zero_device",
+    description => "test if a device contains all zero bytes",
+  },
+  "kill_subprocess" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "kill_subprocess",
+    description => "kill the qemu subprocess",
+  },
+  "launch" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "launch",
+    description => "launch the qemu subprocess",
+  },
+  "lchown" => {
+    ret => 'void',
+    args => [
+      [ 'owner', 'int', 0 ],
+      [ 'group', 'int', 1 ],
+      [ 'path', 'string(path)', 2 ],
+    ],
+    name => "lchown",
+    description => "change file owner and group",
+  },
+  "lgetxattr" => {
+    ret => 'buffer',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'name', 'string', 1 ],
+    ],
+    name => "lgetxattr",
+    description => "get a single extended attribute",
+  },
+  "lgetxattrs" => {
+    ret => 'struct xattr list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "lgetxattrs",
+    description => "list extended attributes of a file or directory",
+  },
+  "list_9p" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "list_9p",
+    description => "list 9p filesystems",
+  },
+  "list_devices" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "list_devices",
+    description => "list the block devices",
+  },
+  "list_dm_devices" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "list_dm_devices",
+    description => "list device mapper devices",
+  },
+  "list_filesystems" => {
+    ret => 'hash',
+    args => [
+    ],
+    name => "list_filesystems",
+    description => "list filesystems",
+  },
+  "list_partitions" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "list_partitions",
+    description => "list the partitions",
+  },
+  "ll" => {
+    ret => 'string',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+    ],
+    name => "ll",
+    description => "list the files in a directory (long format)",
+  },
+  "ln" => {
+    ret => 'void',
+    args => [
+      [ 'target', 'string', 0 ],
+      [ 'linkname', 'string(path)', 1 ],
+    ],
+    name => "ln",
+    description => "create a hard link",
+  },
+  "ln_f" => {
+    ret => 'void',
+    args => [
+      [ 'target', 'string', 0 ],
+      [ 'linkname', 'string(path)', 1 ],
+    ],
+    name => "ln_f",
+    description => "create a hard link",
+  },
+  "ln_s" => {
+    ret => 'void',
+    args => [
+      [ 'target', 'string', 0 ],
+      [ 'linkname', 'string(path)', 1 ],
+    ],
+    name => "ln_s",
+    description => "create a symbolic link",
+  },
+  "ln_sf" => {
+    ret => 'void',
+    args => [
+      [ 'target', 'string', 0 ],
+      [ 'linkname', 'string(path)', 1 ],
+    ],
+    name => "ln_sf",
+    description => "create a symbolic link",
+  },
+  "lremovexattr" => {
+    ret => 'void',
+    args => [
+      [ 'xattr', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "lremovexattr",
+    description => "remove extended attribute of a file or directory",
+  },
+  "ls" => {
+    ret => 'string list',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+    ],
+    name => "ls",
+    description => "list the files in a directory",
+  },
+  "lsetxattr" => {
+    ret => 'void',
+    args => [
+      [ 'xattr', 'string', 0 ],
+      [ 'val', 'string', 1 ],
+      [ 'vallen', 'int', 2 ],
+      [ 'path', 'string(path)', 3 ],
+    ],
+    name => "lsetxattr",
+    description => "set extended attribute of a file or directory",
+  },
+  "lstat" => {
+    ret => 'struct stat',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "lstat",
+    description => "get file information for a symbolic link",
+  },
+  "lstatlist" => {
+    ret => 'struct stat list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'names', 'string list', 1 ],
+    ],
+    name => "lstatlist",
+    description => "lstat on multiple files",
+  },
+  "luks_add_key" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'newkey', 'string(key)', 2 ],
+      [ 'keyslot', 'int', 3 ],
+    ],
+    name => "luks_add_key",
+    description => "add a key on a LUKS encrypted device",
+  },
+  "luks_close" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "luks_close",
+    description => "close a LUKS device",
+  },
+  "luks_format" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'keyslot', 'int', 2 ],
+    ],
+    name => "luks_format",
+    description => "format a block device as a LUKS encrypted device",
+  },
+  "luks_format_cipher" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'keyslot', 'int', 2 ],
+      [ 'cipher', 'string', 3 ],
+    ],
+    name => "luks_format_cipher",
+    description => "format a block device as a LUKS encrypted device",
+  },
+  "luks_kill_slot" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'keyslot', 'int', 2 ],
+    ],
+    name => "luks_kill_slot",
+    description => "remove a key from a LUKS encrypted device",
+  },
+  "luks_open" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'mapname', 'string', 2 ],
+    ],
+    name => "luks_open",
+    description => "open a LUKS-encrypted block device",
+  },
+  "luks_open_ro" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'key', 'string(key)', 1 ],
+      [ 'mapname', 'string', 2 ],
+    ],
+    name => "luks_open_ro",
+    description => "open a LUKS-encrypted block device read-only",
+  },
+  "lvcreate" => {
+    ret => 'void',
+    args => [
+      [ 'logvol', 'string', 0 ],
+      [ 'volgroup', 'string', 1 ],
+      [ 'mbytes', 'int', 2 ],
+    ],
+    name => "lvcreate",
+    description => "create an LVM logical volume",
+  },
+  "lvm_canonical_lv_name" => {
+    ret => 'string',
+    args => [
+      [ 'lvname', 'string(device)', 0 ],
+    ],
+    name => "lvm_canonical_lv_name",
+    description => "get canonical name of an LV",
+  },
+  "lvm_clear_filter" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "lvm_clear_filter",
+    description => "clear LVM device filter",
+  },
+  "lvm_remove_all" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "lvm_remove_all",
+    description => "remove all LVM LVs, VGs and PVs",
+  },
+  "lvm_set_filter" => {
+    ret => 'void',
+    args => [
+      [ 'devices', 'string(device) list', 0 ],
+    ],
+    name => "lvm_set_filter",
+    description => "set LVM device filter",
+  },
+  "lvremove" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "lvremove",
+    description => "remove an LVM logical volume",
+  },
+  "lvrename" => {
+    ret => 'void',
+    args => [
+      [ 'logvol', 'string', 0 ],
+      [ 'newlogvol', 'string', 1 ],
+    ],
+    name => "lvrename",
+    description => "rename an LVM logical volume",
+  },
+  "lvresize" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'mbytes', 'int', 1 ],
+    ],
+    name => "lvresize",
+    description => "resize an LVM logical volume",
+  },
+  "lvresize_free" => {
+    ret => 'void',
+    args => [
+      [ 'lv', 'string(device)', 0 ],
+      [ 'percent', 'int', 1 ],
+    ],
+    name => "lvresize_free",
+    description => "expand an LV to fill free space",
+  },
+  "lvs" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "lvs",
+    description => "list the LVM logical volumes (LVs)",
+  },
+  "lvs_full" => {
+    ret => 'struct lvm_lv list',
+    args => [
+    ],
+    name => "lvs_full",
+    description => "list the LVM logical volumes (LVs)",
+  },
+  "lvuuid" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "lvuuid",
+    description => "get the UUID of a logical volume",
+  },
+  "lxattrlist" => {
+    ret => 'struct xattr list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'names', 'string list', 1 ],
+    ],
+    name => "lxattrlist",
+    description => "lgetxattr on multiple files",
+  },
+  "mkdir" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "mkdir",
+    description => "create a directory",
+  },
+  "mkdir_mode" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'mode', 'int', 1 ],
+    ],
+    name => "mkdir_mode",
+    description => "create a directory with a particular mode",
+  },
+  "mkdir_p" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "mkdir_p",
+    description => "create a directory and parents",
+  },
+  "mkdtemp" => {
+    ret => 'string',
+    args => [
+      [ 'template', 'string(path)', 0 ],
+    ],
+    name => "mkdtemp",
+    description => "create a temporary directory",
+  },
+  "mke2fs_J" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'blocksize', 'int', 1 ],
+      [ 'device', 'string(device)', 2 ],
+      [ 'journal', 'string(device)', 3 ],
+    ],
+    name => "mke2fs_J",
+    description => "make ext2/3/4 filesystem with external journal",
+  },
+  "mke2fs_JL" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'blocksize', 'int', 1 ],
+      [ 'device', 'string(device)', 2 ],
+      [ 'label', 'string', 3 ],
+    ],
+    name => "mke2fs_JL",
+    description => "make ext2/3/4 filesystem with external journal",
+  },
+  "mke2fs_JU" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'blocksize', 'int', 1 ],
+      [ 'device', 'string(device)', 2 ],
+      [ 'uuid', 'string', 3 ],
+    ],
+    name => "mke2fs_JU",
+    description => "make ext2/3/4 filesystem with external journal",
+  },
+  "mke2journal" => {
+    ret => 'void',
+    args => [
+      [ 'blocksize', 'int', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "mke2journal",
+    description => "make ext2/3/4 external journal",
+  },
+  "mke2journal_L" => {
+    ret => 'void',
+    args => [
+      [ 'blocksize', 'int', 0 ],
+      [ 'label', 'string', 1 ],
+      [ 'device', 'string(device)', 2 ],
+    ],
+    name => "mke2journal_L",
+    description => "make ext2/3/4 external journal with label",
+  },
+  "mke2journal_U" => {
+    ret => 'void',
+    args => [
+      [ 'blocksize', 'int', 0 ],
+      [ 'uuid', 'string', 1 ],
+      [ 'device', 'string(device)', 2 ],
+    ],
+    name => "mke2journal_U",
+    description => "make ext2/3/4 external journal with UUID",
+  },
+  "mkfifo" => {
+    ret => 'void',
+    args => [
+      [ 'mode', 'int', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "mkfifo",
+    description => "make FIFO (named pipe)",
+  },
+  "mkfs" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "mkfs",
+    description => "make a filesystem",
+  },
+  "mkfs_b" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'blocksize', 'int', 1 ],
+      [ 'device', 'string(device)', 2 ],
+    ],
+    name => "mkfs_b",
+    description => "make a filesystem with block size",
+  },
+  "mkfs_opts" => {
+    ret => 'void',
+    args => [
+      [ 'fstype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    optargs => {
+      blocksize => [ 'blocksize', 'int', 0 ],
+      features => [ 'features', 'string', 1 ],
+      inode => [ 'inode', 'int', 2 ],
+      sectorsize => [ 'sectorsize', 'int', 3 ],
+    },
+    name => "mkfs_opts",
+    description => "make a filesystem",
+  },
+  "mkmountpoint" => {
+    ret => 'void',
+    args => [
+      [ 'exemptpath', 'string', 0 ],
+    ],
+    name => "mkmountpoint",
+    description => "create a mountpoint",
+  },
+  "mknod" => {
+    ret => 'void',
+    args => [
+      [ 'mode', 'int', 0 ],
+      [ 'devmajor', 'int', 1 ],
+      [ 'devminor', 'int', 2 ],
+      [ 'path', 'string(path)', 3 ],
+    ],
+    name => "mknod",
+    description => "make block, character or FIFO devices",
+  },
+  "mknod_b" => {
+    ret => 'void',
+    args => [
+      [ 'mode', 'int', 0 ],
+      [ 'devmajor', 'int', 1 ],
+      [ 'devminor', 'int', 2 ],
+      [ 'path', 'string(path)', 3 ],
+    ],
+    name => "mknod_b",
+    description => "make block device node",
+  },
+  "mknod_c" => {
+    ret => 'void',
+    args => [
+      [ 'mode', 'int', 0 ],
+      [ 'devmajor', 'int', 1 ],
+      [ 'devminor', 'int', 2 ],
+      [ 'path', 'string(path)', 3 ],
+    ],
+    name => "mknod_c",
+    description => "make char device node",
+  },
+  "mkswap" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "mkswap",
+    description => "create a swap partition",
+  },
+  "mkswap_L" => {
+    ret => 'void',
+    args => [
+      [ 'label', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "mkswap_L",
+    description => "create a swap partition with a label",
+  },
+  "mkswap_U" => {
+    ret => 'void',
+    args => [
+      [ 'uuid', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "mkswap_U",
+    description => "create a swap partition with an explicit UUID",
+  },
+  "mkswap_file" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "mkswap_file",
+    description => "create a swap file",
+  },
+  "modprobe" => {
+    ret => 'void',
+    args => [
+      [ 'modulename', 'string', 0 ],
+    ],
+    name => "modprobe",
+    description => "load a kernel module",
+  },
+  "mount" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'mountpoint', 'string', 1 ],
+    ],
+    name => "mount",
+    description => "mount a guest disk at a position in the filesystem",
+  },
+  "mount_9p" => {
+    ret => 'void',
+    args => [
+      [ 'mounttag', 'string', 0 ],
+      [ 'mountpoint', 'string', 1 ],
+    ],
+    optargs => {
+      options => [ 'options', 'string', 0 ],
+    },
+    name => "mount_9p",
+    description => "mount 9p filesystem",
+  },
+  "mount_loop" => {
+    ret => 'void',
+    args => [
+      [ 'file', 'string(path)', 0 ],
+      [ 'mountpoint', 'string(path)', 1 ],
+    ],
+    name => "mount_loop",
+    description => "mount a file using the loop device",
+  },
+  "mount_options" => {
+    ret => 'void',
+    args => [
+      [ 'options', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+      [ 'mountpoint', 'string', 2 ],
+    ],
+    name => "mount_options",
+    description => "mount a guest disk with mount options",
+  },
+  "mount_ro" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'mountpoint', 'string', 1 ],
+    ],
+    name => "mount_ro",
+    description => "mount a guest disk, read-only",
+  },
+  "mount_vfs" => {
+    ret => 'void',
+    args => [
+      [ 'options', 'string', 0 ],
+      [ 'vfstype', 'string', 1 ],
+      [ 'device', 'string(device)', 2 ],
+      [ 'mountpoint', 'string', 3 ],
+    ],
+    name => "mount_vfs",
+    description => "mount a guest disk with mount options and vfstype",
+  },
+  "mountpoints" => {
+    ret => 'hash',
+    args => [
+    ],
+    name => "mountpoints",
+    description => "show mountpoints",
+  },
+  "mounts" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "mounts",
+    description => "show mounted filesystems",
+  },
+  "mv" => {
+    ret => 'void',
+    args => [
+      [ 'src', 'string(path)', 0 ],
+      [ 'dest', 'string(path)', 1 ],
+    ],
+    name => "mv",
+    description => "move a file",
+  },
+  "ntfs_3g_probe" => {
+    ret => 'int',
+    args => [
+      [ 'rw', 'bool', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    name => "ntfs_3g_probe",
+    description => "probe NTFS volume",
+  },
+  "ntfsresize" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "ntfsresize",
+    description => "resize an NTFS filesystem",
+  },
+  "ntfsresize_opts" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    optargs => {
+      size => [ 'size', 'int64', 0 ],
+      force => [ 'force', 'bool', 1 ],
+    },
+    name => "ntfsresize_opts",
+    description => "resize an NTFS filesystem",
+  },
+  "ntfsresize_size" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'size', 'int64', 1 ],
+    ],
+    name => "ntfsresize_size",
+    description => "resize an NTFS filesystem (with size)",
+  },
+  "part_add" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'prlogex', 'string', 1 ],
+      [ 'startsect', 'int64', 2 ],
+      [ 'endsect', 'int64', 3 ],
+    ],
+    name => "part_add",
+    description => "add a partition to the device",
+  },
+  "part_del" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+    ],
+    name => "part_del",
+    description => "delete a partition",
+  },
+  "part_disk" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'parttype', 'string', 1 ],
+    ],
+    name => "part_disk",
+    description => "partition whole disk with a single primary partition",
+  },
+  "part_get_bootable" => {
+    ret => 'bool',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+    ],
+    name => "part_get_bootable",
+    description => "return true if a partition is bootable",
+  },
+  "part_get_mbr_id" => {
+    ret => 'int',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+    ],
+    name => "part_get_mbr_id",
+    description => "get the MBR type byte (ID byte) from a partition",
+  },
+  "part_get_parttype" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "part_get_parttype",
+    description => "get the partition table type",
+  },
+  "part_init" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'parttype', 'string', 1 ],
+    ],
+    name => "part_init",
+    description => "create an empty partition table",
+  },
+  "part_list" => {
+    ret => 'struct partition list',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "part_list",
+    description => "list partitions on a device",
+  },
+  "part_set_bootable" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+      [ 'bootable', 'bool', 2 ],
+    ],
+    name => "part_set_bootable",
+    description => "make a partition bootable",
+  },
+  "part_set_mbr_id" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+      [ 'idbyte', 'int', 2 ],
+    ],
+    name => "part_set_mbr_id",
+    description => "set the MBR type byte (ID byte) of a partition",
+  },
+  "part_set_name" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+      [ 'name', 'string', 2 ],
+    ],
+    name => "part_set_name",
+    description => "set partition name",
+  },
+  "part_to_dev" => {
+    ret => 'string',
+    args => [
+      [ 'partition', 'string(device)', 0 ],
+    ],
+    name => "part_to_dev",
+    description => "convert partition name to device name",
+  },
+  "part_to_partnum" => {
+    ret => 'int',
+    args => [
+      [ 'partition', 'string(device)', 0 ],
+    ],
+    name => "part_to_partnum",
+    description => "convert partition name to partition number",
+  },
+  "ping_daemon" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "ping_daemon",
+    description => "ping the guest daemon",
+  },
+  "pread" => {
+    ret => 'buffer',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'count', 'int', 1 ],
+      [ 'offset', 'int64', 2 ],
+    ],
+    name => "pread",
+    description => "read part of a file",
+  },
+  "pread_device" => {
+    ret => 'buffer',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'count', 'int', 1 ],
+      [ 'offset', 'int64', 2 ],
+    ],
+    name => "pread_device",
+    description => "read part of a device",
+  },
+  "pvcreate" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "pvcreate",
+    description => "create an LVM physical volume",
+  },
+  "pvremove" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "pvremove",
+    description => "remove an LVM physical volume",
+  },
+  "pvresize" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "pvresize",
+    description => "resize an LVM physical volume",
+  },
+  "pvresize_size" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'size', 'int64', 1 ],
+    ],
+    name => "pvresize_size",
+    description => "resize an LVM physical volume (with size)",
+  },
+  "pvs" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "pvs",
+    description => "list the LVM physical volumes (PVs)",
+  },
+  "pvs_full" => {
+    ret => 'struct lvm_pv list',
+    args => [
+    ],
+    name => "pvs_full",
+    description => "list the LVM physical volumes (PVs)",
+  },
+  "pvuuid" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "pvuuid",
+    description => "get the UUID of a physical volume",
+  },
+  "pwrite" => {
+    ret => 'int',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'content', 'buffer', 1 ],
+      [ 'offset', 'int64', 2 ],
+    ],
+    name => "pwrite",
+    description => "write to part of a file",
+  },
+  "pwrite_device" => {
+    ret => 'int',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'content', 'buffer', 1 ],
+      [ 'offset', 'int64', 2 ],
+    ],
+    name => "pwrite_device",
+    description => "write to part of a device",
+  },
+  "read_file" => {
+    ret => 'buffer',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "read_file",
+    description => "read a file",
+  },
+  "read_lines" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "read_lines",
+    description => "read file as lines",
+  },
+  "readdir" => {
+    ret => 'struct dirent list',
+    args => [
+      [ 'dir', 'string(path)', 0 ],
+    ],
+    name => "readdir",
+    description => "read directories entries",
+  },
+  "readlink" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "readlink",
+    description => "read the target of a symbolic link",
+  },
+  "readlinklist" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'names', 'string list', 1 ],
+    ],
+    name => "readlinklist",
+    description => "readlink on multiple files",
+  },
+  "realpath" => {
+    ret => 'string',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "realpath",
+    description => "canonicalized absolute pathname",
+  },
+  "removexattr" => {
+    ret => 'void',
+    args => [
+      [ 'xattr', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "removexattr",
+    description => "remove extended attribute of a file or directory",
+  },
+  "resize2fs" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "resize2fs",
+    description => "resize an ext2, ext3 or ext4 filesystem",
+  },
+  "resize2fs_M" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "resize2fs_M",
+    description => "resize an ext2, ext3 or ext4 filesystem to the minimum size",
+  },
+  "resize2fs_size" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'size', 'int64', 1 ],
+    ],
+    name => "resize2fs_size",
+    description => "resize an ext2, ext3 or ext4 filesystem (with size)",
+  },
+  "rm" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "rm",
+    description => "remove a file",
+  },
+  "rm_rf" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "rm_rf",
+    description => "remove a file or directory recursively",
+  },
+  "rmdir" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "rmdir",
+    description => "remove a directory",
+  },
+  "rmmountpoint" => {
+    ret => 'void',
+    args => [
+      [ 'exemptpath', 'string', 0 ],
+    ],
+    name => "rmmountpoint",
+    description => "remove a mountpoint",
+  },
+  "scrub_device" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "scrub_device",
+    description => "scrub (securely wipe) a device",
+  },
+  "scrub_file" => {
+    ret => 'void',
+    args => [
+      [ 'file', 'string(path)', 0 ],
+    ],
+    name => "scrub_file",
+    description => "scrub (securely wipe) a file",
+  },
+  "scrub_freespace" => {
+    ret => 'void',
+    args => [
+      [ 'dir', 'string(path)', 0 ],
+    ],
+    name => "scrub_freespace",
+    description => "scrub (securely wipe) free space",
+  },
+  "set_append" => {
+    ret => 'void',
+    args => [
+      [ 'append', 'nullable string', 0 ],
+    ],
+    name => "set_append",
+    description => "add options to kernel command line",
+  },
+  "set_attach_method" => {
+    ret => 'void',
+    args => [
+      [ 'attachmethod', 'string', 0 ],
+    ],
+    name => "set_attach_method",
+    description => "set the attach method",
+  },
+  "set_autosync" => {
+    ret => 'void',
+    args => [
+      [ 'autosync', 'bool', 0 ],
+    ],
+    name => "set_autosync",
+    description => "set autosync mode",
+  },
+  "set_direct" => {
+    ret => 'void',
+    args => [
+      [ 'direct', 'bool', 0 ],
+    ],
+    name => "set_direct",
+    description => "enable or disable direct appliance mode",
+  },
+  "set_e2label" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'label', 'string', 1 ],
+    ],
+    name => "set_e2label",
+    description => "set the ext2/3/4 filesystem label",
+  },
+  "set_e2uuid" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'uuid', 'string', 1 ],
+    ],
+    name => "set_e2uuid",
+    description => "set the ext2/3/4 filesystem UUID",
+  },
+  "set_memsize" => {
+    ret => 'void',
+    args => [
+      [ 'memsize', 'int', 0 ],
+    ],
+    name => "set_memsize",
+    description => "set memory allocated to the qemu subprocess",
+  },
+  "set_network" => {
+    ret => 'void',
+    args => [
+      [ 'network', 'bool', 0 ],
+    ],
+    name => "set_network",
+    description => "set enable network flag",
+  },
+  "set_path" => {
+    ret => 'void',
+    args => [
+      [ 'searchpath', 'nullable string', 0 ],
+    ],
+    name => "set_path",
+    description => "set the search path",
+  },
+  "set_pgroup" => {
+    ret => 'void',
+    args => [
+      [ 'pgroup', 'bool', 0 ],
+    ],
+    name => "set_pgroup",
+    description => "set process group flag",
+  },
+  "set_qemu" => {
+    ret => 'void',
+    args => [
+      [ 'qemu', 'nullable string', 0 ],
+    ],
+    name => "set_qemu",
+    description => "set the qemu binary",
+  },
+  "set_recovery_proc" => {
+    ret => 'void',
+    args => [
+      [ 'recoveryproc', 'bool', 0 ],
+    ],
+    name => "set_recovery_proc",
+    description => "enable or disable the recovery process",
+  },
+  "set_selinux" => {
+    ret => 'void',
+    args => [
+      [ 'selinux', 'bool', 0 ],
+    ],
+    name => "set_selinux",
+    description => "set SELinux enabled or disabled at appliance boot",
+  },
+  "set_smp" => {
+    ret => 'void',
+    args => [
+      [ 'smp', 'int', 0 ],
+    ],
+    name => "set_smp",
+    description => "set number of virtual CPUs in appliance",
+  },
+  "set_trace" => {
+    ret => 'void',
+    args => [
+      [ 'trace', 'bool', 0 ],
+    ],
+    name => "set_trace",
+    description => "enable or disable command traces",
+  },
+  "set_verbose" => {
+    ret => 'void',
+    args => [
+      [ 'verbose', 'bool', 0 ],
+    ],
+    name => "set_verbose",
+    description => "set verbose mode",
+  },
+  "setcon" => {
+    ret => 'void',
+    args => [
+      [ 'context', 'string', 0 ],
+    ],
+    name => "setcon",
+    description => "set SELinux security context",
+  },
+  "setxattr" => {
+    ret => 'void',
+    args => [
+      [ 'xattr', 'string', 0 ],
+      [ 'val', 'string', 1 ],
+      [ 'vallen', 'int', 2 ],
+      [ 'path', 'string(path)', 3 ],
+    ],
+    name => "setxattr",
+    description => "set extended attribute of a file or directory",
+  },
+  "sfdisk" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'cyls', 'int', 1 ],
+      [ 'heads', 'int', 2 ],
+      [ 'sectors', 'int', 3 ],
+      [ 'lines', 'string list', 4 ],
+    ],
+    name => "sfdisk",
+    description => "create partitions on a block device",
+  },
+  "sfdiskM" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'lines', 'string list', 1 ],
+    ],
+    name => "sfdiskM",
+    description => "create partitions on a block device",
+  },
+  "sfdisk_N" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+      [ 'partnum', 'int', 1 ],
+      [ 'cyls', 'int', 2 ],
+      [ 'heads', 'int', 3 ],
+      [ 'sectors', 'int', 4 ],
+      [ 'line', 'string', 5 ],
+    ],
+    name => "sfdisk_N",
+    description => "modify a single partition on a block device",
+  },
+  "sfdisk_disk_geometry" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "sfdisk_disk_geometry",
+    description => "display the disk geometry from the partition table",
+  },
+  "sfdisk_kernel_geometry" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "sfdisk_kernel_geometry",
+    description => "display the kernel geometry",
+  },
+  "sfdisk_l" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "sfdisk_l",
+    description => "display the partition table",
+  },
+  "sh" => {
+    ret => 'string',
+    args => [
+      [ 'command', 'string', 0 ],
+    ],
+    name => "sh",
+    description => "run a command via the shell",
+  },
+  "sh_lines" => {
+    ret => 'string list',
+    args => [
+      [ 'command', 'string', 0 ],
+    ],
+    name => "sh_lines",
+    description => "run a command via the shell returning lines",
+  },
+  "sleep" => {
+    ret => 'void',
+    args => [
+      [ 'secs', 'int', 0 ],
+    ],
+    name => "sleep",
+    description => "sleep for some seconds",
+  },
+  "stat" => {
+    ret => 'struct stat',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "stat",
+    description => "get file information",
+  },
+  "statvfs" => {
+    ret => 'struct statvfs',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "statvfs",
+    description => "get file system statistics",
+  },
+  "strings" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "strings",
+    description => "print the printable strings in a file",
+  },
+  "strings_e" => {
+    ret => 'string list',
+    args => [
+      [ 'encoding', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "strings_e",
+    description => "print the printable strings in a file",
+  },
+  "swapoff_device" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "swapoff_device",
+    description => "disable swap on device",
+  },
+  "swapoff_file" => {
+    ret => 'void',
+    args => [
+      [ 'file', 'string(path)', 0 ],
+    ],
+    name => "swapoff_file",
+    description => "disable swap on file",
+  },
+  "swapoff_label" => {
+    ret => 'void',
+    args => [
+      [ 'label', 'string', 0 ],
+    ],
+    name => "swapoff_label",
+    description => "disable swap on labeled swap partition",
+  },
+  "swapoff_uuid" => {
+    ret => 'void',
+    args => [
+      [ 'uuid', 'string', 0 ],
+    ],
+    name => "swapoff_uuid",
+    description => "disable swap on swap partition by UUID",
+  },
+  "swapon_device" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "swapon_device",
+    description => "enable swap on device",
+  },
+  "swapon_file" => {
+    ret => 'void',
+    args => [
+      [ 'file', 'string(path)', 0 ],
+    ],
+    name => "swapon_file",
+    description => "enable swap on file",
+  },
+  "swapon_label" => {
+    ret => 'void',
+    args => [
+      [ 'label', 'string', 0 ],
+    ],
+    name => "swapon_label",
+    description => "enable swap on labeled swap partition",
+  },
+  "swapon_uuid" => {
+    ret => 'void',
+    args => [
+      [ 'uuid', 'string', 0 ],
+    ],
+    name => "swapon_uuid",
+    description => "enable swap on swap partition by UUID",
+  },
+  "sync" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "sync",
+    description => "sync disks, writes are flushed through to the disk image",
+  },
+  "tail" => {
+    ret => 'string list',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "tail",
+    description => "return last 10 lines of a file",
+  },
+  "tail_n" => {
+    ret => 'string list',
+    args => [
+      [ 'nrlines', 'int', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "tail_n",
+    description => "return last N lines of a file",
+  },
+  "tar_in" => {
+    ret => 'void',
+    args => [
+      [ 'tarfile', 'string(filename)', 0 ],
+      [ 'directory', 'string(path)', 1 ],
+    ],
+    name => "tar_in",
+    description => "unpack tarfile to directory",
+  },
+  "tar_out" => {
+    ret => 'void',
+    args => [
+      [ 'directory', 'string', 0 ],
+      [ 'tarfile', 'string(filename)', 1 ],
+    ],
+    name => "tar_out",
+    description => "pack directory into tarfile",
+  },
+  "test0" => {
+    ret => 'void',
+    args => [
+      [ 'str', 'string', 0 ],
+      [ 'optstr', 'nullable string', 1 ],
+      [ 'strlist', 'string list', 2 ],
+      [ 'b', 'bool', 3 ],
+      [ 'integer', 'int', 4 ],
+      [ 'integer64', 'int64', 5 ],
+      [ 'filein', 'string(filename)', 6 ],
+      [ 'fileout', 'string(filename)', 7 ],
+      [ 'bufferin', 'buffer', 8 ],
+    ],
+    name => "test0",
+    description => "internal test function - do not use",
+  },
+  "test0rbool" => {
+    ret => 'bool',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rbool",
+    description => "internal test function - do not use",
+  },
+  "test0rboolerr" => {
+    ret => 'bool',
+    args => [
+    ],
+    name => "test0rboolerr",
+    description => "internal test function - do not use",
+  },
+  "test0rconstoptstring" => {
+    ret => 'const nullable string',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rconstoptstring",
+    description => "internal test function - do not use",
+  },
+  "test0rconstoptstringerr" => {
+    ret => 'const nullable string',
+    args => [
+    ],
+    name => "test0rconstoptstringerr",
+    description => "internal test function - do not use",
+  },
+  "test0rconststring" => {
+    ret => 'const string',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rconststring",
+    description => "internal test function - do not use",
+  },
+  "test0rconststringerr" => {
+    ret => 'const string',
+    args => [
+    ],
+    name => "test0rconststringerr",
+    description => "internal test function - do not use",
+  },
+  "test0rhashtable" => {
+    ret => 'hash',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rhashtable",
+    description => "internal test function - do not use",
+  },
+  "test0rhashtableerr" => {
+    ret => 'hash',
+    args => [
+    ],
+    name => "test0rhashtableerr",
+    description => "internal test function - do not use",
+  },
+  "test0rint" => {
+    ret => 'int',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rint",
+    description => "internal test function - do not use",
+  },
+  "test0rint64" => {
+    ret => 'int64',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rint64",
+    description => "internal test function - do not use",
+  },
+  "test0rint64err" => {
+    ret => 'int64',
+    args => [
+    ],
+    name => "test0rint64err",
+    description => "internal test function - do not use",
+  },
+  "test0rinterr" => {
+    ret => 'int',
+    args => [
+    ],
+    name => "test0rinterr",
+    description => "internal test function - do not use",
+  },
+  "test0rstring" => {
+    ret => 'string',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rstring",
+    description => "internal test function - do not use",
+  },
+  "test0rstringerr" => {
+    ret => 'string',
+    args => [
+    ],
+    name => "test0rstringerr",
+    description => "internal test function - do not use",
+  },
+  "test0rstringlist" => {
+    ret => 'string list',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rstringlist",
+    description => "internal test function - do not use",
+  },
+  "test0rstringlisterr" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "test0rstringlisterr",
+    description => "internal test function - do not use",
+  },
+  "test0rstruct" => {
+    ret => 'struct lvm_pv',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rstruct",
+    description => "internal test function - do not use",
+  },
+  "test0rstructerr" => {
+    ret => 'struct lvm_pv',
+    args => [
+    ],
+    name => "test0rstructerr",
+    description => "internal test function - do not use",
+  },
+  "test0rstructlist" => {
+    ret => 'struct lvm_pv list',
+    args => [
+      [ 'val', 'string', 0 ],
+    ],
+    name => "test0rstructlist",
+    description => "internal test function - do not use",
+  },
+  "test0rstructlisterr" => {
+    ret => 'struct lvm_pv list',
+    args => [
+    ],
+    name => "test0rstructlisterr",
+    description => "internal test function - do not use",
+  },
+  "tgz_in" => {
+    ret => 'void',
+    args => [
+      [ 'tarball', 'string(filename)', 0 ],
+      [ 'directory', 'string(path)', 1 ],
+    ],
+    name => "tgz_in",
+    description => "unpack compressed tarball to directory",
+  },
+  "tgz_out" => {
+    ret => 'void',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+      [ 'tarball', 'string(filename)', 1 ],
+    ],
+    name => "tgz_out",
+    description => "pack directory into compressed tarball",
+  },
+  "touch" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "touch",
+    description => "update file timestamps or create a new file",
+  },
+  "truncate" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "truncate",
+    description => "truncate a file to zero size",
+  },
+  "truncate_size" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'size', 'int64', 1 ],
+    ],
+    name => "truncate_size",
+    description => "truncate a file to a particular size",
+  },
+  "tune2fs_l" => {
+    ret => 'hash',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "tune2fs_l",
+    description => "get ext2/ext3/ext4 superblock details",
+  },
+  "txz_in" => {
+    ret => 'void',
+    args => [
+      [ 'tarball', 'string(filename)', 0 ],
+      [ 'directory', 'string(path)', 1 ],
+    ],
+    name => "txz_in",
+    description => "unpack compressed tarball to directory",
+  },
+  "txz_out" => {
+    ret => 'void',
+    args => [
+      [ 'directory', 'string(path)', 0 ],
+      [ 'tarball', 'string(filename)', 1 ],
+    ],
+    name => "txz_out",
+    description => "pack directory into compressed tarball",
+  },
+  "umask" => {
+    ret => 'int',
+    args => [
+      [ 'mask', 'int', 0 ],
+    ],
+    name => "umask",
+    description => "set file mode creation mask (umask)",
+  },
+  "umount" => {
+    ret => 'void',
+    args => [
+      [ 'pathordevice', 'string', 0 ],
+    ],
+    name => "umount",
+    description => "unmount a filesystem",
+  },
+  "umount_all" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "umount_all",
+    description => "unmount all filesystems",
+  },
+  "upload" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string(filename)', 0 ],
+      [ 'remotefilename', 'string(dev_or_path)', 1 ],
+    ],
+    name => "upload",
+    description => "upload a file from the local machine",
+  },
+  "upload_offset" => {
+    ret => 'void',
+    args => [
+      [ 'filename', 'string(filename)', 0 ],
+      [ 'remotefilename', 'string(dev_or_path)', 1 ],
+      [ 'offset', 'int64', 2 ],
+    ],
+    name => "upload_offset",
+    description => "upload a file from the local machine with offset",
+  },
+  "utimens" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'atsecs', 'int64', 1 ],
+      [ 'atnsecs', 'int64', 2 ],
+      [ 'mtsecs', 'int64', 3 ],
+      [ 'mtnsecs', 'int64', 4 ],
+    ],
+    name => "utimens",
+    description => "set timestamp of a file with nanosecond precision",
+  },
+  "version" => {
+    ret => 'struct version',
+    args => [
+    ],
+    name => "version",
+    description => "get the library version number",
+  },
+  "vfs_label" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "vfs_label",
+    description => "get the filesystem label",
+  },
+  "vfs_type" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "vfs_type",
+    description => "get the Linux VFS type corresponding to a mounted device",
+  },
+  "vfs_uuid" => {
+    ret => 'string',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "vfs_uuid",
+    description => "get the filesystem UUID",
+  },
+  "vg_activate" => {
+    ret => 'void',
+    args => [
+      [ 'activate', 'bool', 0 ],
+      [ 'volgroups', 'string list', 1 ],
+    ],
+    name => "vg_activate",
+    description => "activate or deactivate some volume groups",
+  },
+  "vg_activate_all" => {
+    ret => 'void',
+    args => [
+      [ 'activate', 'bool', 0 ],
+    ],
+    name => "vg_activate_all",
+    description => "activate or deactivate all volume groups",
+  },
+  "vgcreate" => {
+    ret => 'void',
+    args => [
+      [ 'volgroup', 'string', 0 ],
+      [ 'physvols', 'string(device) list', 1 ],
+    ],
+    name => "vgcreate",
+    description => "create an LVM volume group",
+  },
+  "vglvuuids" => {
+    ret => 'string list',
+    args => [
+      [ 'vgname', 'string', 0 ],
+    ],
+    name => "vglvuuids",
+    description => "get the LV UUIDs of all LVs in the volume group",
+  },
+  "vgpvuuids" => {
+    ret => 'string list',
+    args => [
+      [ 'vgname', 'string', 0 ],
+    ],
+    name => "vgpvuuids",
+    description => "get the PV UUIDs containing the volume group",
+  },
+  "vgremove" => {
+    ret => 'void',
+    args => [
+      [ 'vgname', 'string', 0 ],
+    ],
+    name => "vgremove",
+    description => "remove an LVM volume group",
+  },
+  "vgrename" => {
+    ret => 'void',
+    args => [
+      [ 'volgroup', 'string', 0 ],
+      [ 'newvolgroup', 'string', 1 ],
+    ],
+    name => "vgrename",
+    description => "rename an LVM volume group",
+  },
+  "vgs" => {
+    ret => 'string list',
+    args => [
+    ],
+    name => "vgs",
+    description => "list the LVM volume groups (VGs)",
+  },
+  "vgs_full" => {
+    ret => 'struct lvm_vg list',
+    args => [
+    ],
+    name => "vgs_full",
+    description => "list the LVM volume groups (VGs)",
+  },
+  "vgscan" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "vgscan",
+    description => "rescan for LVM physical volumes, volume groups and logical volumes",
+  },
+  "vguuid" => {
+    ret => 'string',
+    args => [
+      [ 'vgname', 'string', 0 ],
+    ],
+    name => "vguuid",
+    description => "get the UUID of a volume group",
+  },
+  "wait_ready" => {
+    ret => 'void',
+    args => [
+    ],
+    name => "wait_ready",
+    description => "wait until the qemu subprocess launches (no op)",
+  },
+  "wc_c" => {
+    ret => 'int',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "wc_c",
+    description => "count characters in a file",
+  },
+  "wc_l" => {
+    ret => 'int',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "wc_l",
+    description => "count lines in a file",
+  },
+  "wc_w" => {
+    ret => 'int',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+    ],
+    name => "wc_w",
+    description => "count words in a file",
+  },
+  "write" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'content', 'buffer', 1 ],
+    ],
+    name => "write",
+    description => "create a new file",
+  },
+  "write_append" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'content', 'buffer', 1 ],
+    ],
+    name => "write_append",
+    description => "append content to end of file",
+  },
+  "write_file" => {
+    ret => 'void',
+    args => [
+      [ 'path', 'string(path)', 0 ],
+      [ 'content', 'string', 1 ],
+      [ 'size', 'int', 2 ],
+    ],
+    name => "write_file",
+    description => "create a file",
+  },
+  "zegrep" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zegrep",
+    description => "return lines matching a pattern",
+  },
+  "zegrepi" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zegrepi",
+    description => "return lines matching a pattern",
+  },
+  "zero" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "zero",
+    description => "write zeroes to the device",
+  },
+  "zero_device" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "zero_device",
+    description => "write zeroes to an entire device",
+  },
+  "zerofree" => {
+    ret => 'void',
+    args => [
+      [ 'device', 'string(device)', 0 ],
+    ],
+    name => "zerofree",
+    description => "zero unused inodes and disk blocks on ext2/3 filesystem",
+  },
+  "zfgrep" => {
+    ret => 'string list',
+    args => [
+      [ 'pattern', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zfgrep",
+    description => "return lines matching a pattern",
+  },
+  "zfgrepi" => {
+    ret => 'string list',
+    args => [
+      [ 'pattern', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zfgrepi",
+    description => "return lines matching a pattern",
+  },
+  "zfile" => {
+    ret => 'string',
+    args => [
+      [ 'meth', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zfile",
+    description => "determine file type inside a compressed file",
+  },
+  "zgrep" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zgrep",
+    description => "return lines matching a pattern",
+  },
+  "zgrepi" => {
+    ret => 'string list',
+    args => [
+      [ 'regex', 'string', 0 ],
+      [ 'path', 'string(path)', 1 ],
+    ],
+    name => "zgrepi",
+    description => "return lines matching a pattern",
+  },
+);
+
 1;
 
 =back
@@ -4864,6 +8201,33 @@ class, use the ordinary Perl UNIVERSAL method C<can(METHOD)>
    print "\$h->set_verbose is available\n";
  }
 
+Perl does not offer a way to list the arguments of a method, and
+from time to time we may add extra arguments to calls that take
+optional arguments.  For this reason, we provide a global hash
+variable C<%guestfs_introspection> which contains the arguments
+and their types for each libguestfs method.  The keys of this
+hash are the method names, and the values are an hashref
+containing useful introspection information about the method
+(further fields may be added to this in future).
+
+ use Sys::Guestfs;
+ $Sys::Guestfs::guestfs_introspection{mkfs_opts}
+ => {
+    ret => 'void',                    # return type
+    args => [                         # required arguments
+      [ 'fstype', 'string', 0 ],
+      [ 'device', 'string(device)', 1 ],
+    ],
+    optargs => {                      # optional arguments
+      blocksize => [ 'blocksize', 'int', 0 ],
+      features => [ 'features', 'string', 1 ],
+      inode => [ 'inode', 'int', 2 ],
+      sectorsize => [ 'sectorsize', 'int', 3 ],
+    },
+    name => "mkfs_opts",
+    description => "make a filesystem",
+  }
+
 To test if particular features are supported by the current
 build, use the L</available> method like the example below.  Note
 that the appliance must be launched first.
diff --git a/perl/t/900-introspection.t b/perl/t/900-introspection.t
new file mode 100644
index 0000000..6defc9b
--- /dev/null
+++ b/perl/t/900-introspection.t
@@ -0,0 +1,42 @@
+# libguestfs Perl bindings -*- perl -*-
+# Copyright (C) 2011 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+# Test %guestfs_introspection.
+
+use strict;
+use warnings;
+use Test::More tests => 10;
+
+use Errno;
+
+use Sys::Guestfs;
+
+my %add_drive = %{$Sys::Guestfs::guestfs_introspection{add_drive}};
+ok(1);
+
+is ($add_drive{ret}, "void");
+is ($add_drive{args}[0][0], "filename");
+is ($add_drive{args}[0][1], "string");
+is ($add_drive{args}[0][2], 0);
+
+my %add_drive_opts = %{$Sys::Guestfs::guestfs_introspection{add_drive_opts}};
+ok(1);
+
+ok (exists $add_drive_opts{optargs});
+ok (exists $add_drive_opts{optargs}->{readonly});
+is ($add_drive_opts{optargs}->{readonly}[0], "readonly");
+is ($add_drive_opts{optargs}->{readonly}[1], "bool");
diff --git a/po-docs/ja.po b/po-docs/ja.po
index 744b652..6c9560a 100644
--- a/po-docs/ja.po
+++ b/po-docs/ja.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: libguestfs at redhat.com\n"
-"POT-Creation-Date: 2011-10-27 16:05+0200\n"
+"POT-Creation-Date: 2011-11-01 14:20+0000\n"
 "PO-Revision-Date: 2011-10-27 09:15+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Japanese <trans-ja at lists.fedoraproject.org>\n"
@@ -91,7 +91,7 @@ msgstr ""
 #: ../fish/virt-tar-out.pod:15 ../fuse/guestmount.pod:20
 #: ../inspector/virt-inspector.pod:19 ../java/examples/guestfs-java.pod:15
 #: ../ocaml/examples/guestfs-ocaml.pod:25 ../perl/examples/guestfs-perl.pod:18
-#: ../python/examples/guestfs-python.pod:14 ../rescue/virt-rescue.pod:29
+#: ../python/examples/guestfs-python.pod:14 ../rescue/virt-rescue.pod:31
 #: ../resize/virt-resize.pod:13 ../ruby/examples/guestfs-ruby.pod:15
 #: ../sparsify/virt-sparsify.pod:11 ../src/guestfs.pod:23
 #: ../test-tool/libguestfs-test-tool.pod:11
@@ -266,7 +266,7 @@ msgstr ""
 #: ../fish/guestfish.pod:148 ../fish/virt-copy-in.pod:45
 #: ../fish/virt-copy-out.pod:34 ../fish/virt-tar-in.pod:42
 #: ../fish/virt-tar-out.pod:36 ../fuse/guestmount.pod:92
-#: ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:84
+#: ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:112
 #: ../resize/virt-resize.pod:262 ../sparsify/virt-sparsify.pod:99
 #: ../test-tool/libguestfs-test-tool.pod:36
 #: ../tools/virt-list-filesystems.pl:53 ../tools/virt-list-partitions.pl:54
@@ -280,7 +280,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:95 ../cat/virt-ls.pod:265
 #: ../clone/virt-sysprep.pod:46 ../df/virt-df.pod:63 ../edit/virt-edit.pod:66
 #: ../fish/guestfish.pod:152 ../fuse/guestmount.pod:160
-#: ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:88
+#: ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:116
 #: ../resize/virt-resize.pod:266 ../sparsify/virt-sparsify.pod:103
 #: ../test-tool/libguestfs-test-tool.pod:40
 #: ../tools/virt-list-filesystems.pl:61 ../tools/virt-list-partitions.pl:62
@@ -293,7 +293,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:95 ../cat/virt-cat.pod:68
 #: ../cat/virt-filesystems.pod:97 ../cat/virt-ls.pod:267
 #: ../clone/virt-sysprep.pod:48 ../df/virt-df.pod:65 ../edit/virt-edit.pod:68
-#: ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:90
+#: ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:118
 #: ../tools/virt-list-filesystems.pl:63 ../tools/virt-list-partitions.pl:64
 #: ../tools/virt-make-fs.pl:163 ../tools/virt-tar.pl:113
 #: ../tools/virt-win-reg.pl:106
@@ -304,7 +304,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:97 ../cat/virt-cat.pod:70
 #: ../cat/virt-filesystems.pod:99 ../cat/virt-ls.pod:269
 #: ../clone/virt-sysprep.pod:50 ../df/virt-df.pod:67 ../edit/virt-edit.pod:70
-#: ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:92
+#: ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:120
 msgid "B<-a> file"
 msgstr ""
 
@@ -312,7 +312,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:99 ../cat/virt-cat.pod:72
 #: ../cat/virt-filesystems.pod:101 ../cat/virt-ls.pod:271
 #: ../clone/virt-sysprep.pod:52 ../df/virt-df.pod:69 ../edit/virt-edit.pod:72
-#: ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:94
+#: ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:122
 msgid "B<--add> file"
 msgstr ""
 
@@ -326,7 +326,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:107 ../cat/virt-ls.pod:277
 #: ../clone/virt-sysprep.pod:56 ../df/virt-df.pod:75 ../edit/virt-edit.pod:78
 #: ../fish/guestfish.pod:174 ../fuse/guestmount.pod:102
-#: ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:100
+#: ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:128
 msgid ""
 "The format of the disk image is auto-detected.  To override this and force a "
 "particular format use the I<--format=..> option."
@@ -336,7 +336,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:106 ../cat/virt-cat.pod:81
 #: ../cat/virt-filesystems.pod:125 ../cat/virt-ls.pod:291
 #: ../clone/virt-sysprep.pod:59 ../df/virt-df.pod:78
-#: ../rescue/virt-rescue.pod:107
+#: ../rescue/virt-rescue.pod:135
 msgid "B<-c> URI"
 msgstr ""
 
@@ -344,7 +344,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:108 ../cat/virt-cat.pod:83
 #: ../cat/virt-filesystems.pod:127 ../cat/virt-ls.pod:293
 #: ../clone/virt-sysprep.pod:61 ../df/virt-df.pod:80
-#: ../rescue/virt-rescue.pod:109
+#: ../rescue/virt-rescue.pod:137
 msgid "B<--connect> URI"
 msgstr ""
 
@@ -352,7 +352,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:110 ../cat/virt-cat.pod:85
 #: ../cat/virt-filesystems.pod:129 ../cat/virt-ls.pod:295
 #: ../clone/virt-sysprep.pod:63 ../df/virt-df.pod:82 ../edit/virt-edit.pod:99
-#: ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:111
+#: ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:139
 #: ../tools/virt-list-filesystems.pl:81 ../tools/virt-list-partitions.pl:82
 #: ../tools/virt-tar.pl:131 ../tools/virt-win-reg.pl:132
 msgid ""
@@ -364,7 +364,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:113 ../cat/virt-cat.pod:88
 #: ../cat/virt-filesystems.pod:132 ../cat/virt-ls.pod:298
 #: ../clone/virt-sysprep.pod:66 ../df/virt-df.pod:85
-#: ../rescue/virt-rescue.pod:114
+#: ../rescue/virt-rescue.pod:142
 msgid ""
 "If you specify guest block devices directly (I<-a>), then libvirt is not "
 "used at all."
@@ -374,7 +374,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:116 ../cat/virt-cat.pod:91
 #: ../cat/virt-filesystems.pod:141 ../cat/virt-ls.pod:307
 #: ../clone/virt-sysprep.pod:69 ../df/virt-df.pod:94 ../edit/virt-edit.pod:105
-#: ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:117
+#: ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:145
 msgid "B<-d> guest"
 msgstr ""
 
@@ -382,7 +382,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:118 ../cat/virt-cat.pod:93
 #: ../cat/virt-filesystems.pod:143 ../cat/virt-ls.pod:309
 #: ../clone/virt-sysprep.pod:71 ../df/virt-df.pod:96 ../edit/virt-edit.pod:107
-#: ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:119
+#: ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:147
 msgid "B<--domain> guest"
 msgstr ""
 
@@ -390,7 +390,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:120 ../cat/virt-cat.pod:95
 #: ../cat/virt-filesystems.pod:145 ../cat/virt-ls.pod:311
 #: ../clone/virt-sysprep.pod:73 ../df/virt-df.pod:98 ../edit/virt-edit.pod:109
-#: ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:121
+#: ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:149
 msgid ""
 "Add all the disks from the named libvirt guest.  Domain UUIDs can be used "
 "instead of names."
@@ -401,7 +401,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:170 ../cat/virt-ls.pod:328
 #: ../clone/virt-sysprep.pod:95 ../df/virt-df.pod:101
 #: ../fish/guestfish.pod:233 ../fuse/guestmount.pod:142
-#: ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:124
+#: ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:152
 msgid "B<--format=raw|qcow2|..>"
 msgstr ""
 
@@ -411,7 +411,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:97 ../df/virt-df.pod:103
 #: ../edit/virt-edit.pod:134 ../fish/guestfish.pod:235
 #: ../fuse/guestmount.pod:144 ../inspector/virt-inspector.pod:101
-#: ../rescue/virt-rescue.pod:126
+#: ../rescue/virt-rescue.pod:154
 msgid "B<--format>"
 msgstr ""
 
@@ -420,7 +420,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:174 ../cat/virt-ls.pod:332
 #: ../clone/virt-sysprep.pod:99 ../df/virt-df.pod:105
 #: ../edit/virt-edit.pod:136 ../fish/guestfish.pod:237
-#: ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:128
+#: ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:156
 msgid ""
 "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 "
@@ -434,7 +434,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:104 ../df/virt-df.pod:110
 #: ../edit/virt-edit.pod:141 ../fish/guestfish.pod:242
 #: ../fish/guestfish.pod:673 ../inspector/virt-inspector.pod:336
-#: ../rescue/virt-rescue.pod:133 ../src/guestfs.pod:2877
+#: ../rescue/virt-rescue.pod:161 ../src/guestfs.pod:2877
 msgid "For example:"
 msgstr ""
 
@@ -451,7 +451,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:183 ../cat/virt-ls.pod:341
 #: ../clone/virt-sysprep.pod:108 ../df/virt-df.pod:114
 #: ../edit/virt-edit.pod:145 ../fish/guestfish.pod:246
-#: ../rescue/virt-rescue.pod:137
+#: ../rescue/virt-rescue.pod:165
 msgid "forces raw format (no auto-detection) for C<disk.img>."
 msgstr ""
 
@@ -468,7 +468,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:187 ../cat/virt-ls.pod:345
 #: ../clone/virt-sysprep.pod:112 ../df/virt-df.pod:118
 #: ../edit/virt-edit.pod:149 ../fish/guestfish.pod:250
-#: ../rescue/virt-rescue.pod:141
+#: ../rescue/virt-rescue.pod:169
 msgid ""
 "forces raw format (no auto-detection) for C<disk.img> and reverts to auto-"
 "detection for C<another.img>."
@@ -478,7 +478,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:143 ../cat/virt-cat.pod:125
 #: ../cat/virt-filesystems.pod:190 ../cat/virt-ls.pod:348
 #: ../clone/virt-sysprep.pod:115 ../df/virt-df.pod:121
-#: ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:144
+#: ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:172
 msgid ""
 "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 "
@@ -510,7 +510,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:138 ../df/virt-df.pod:173
 #: ../edit/virt-edit.pod:161 ../fish/guestfish.pod:390
 #: ../fuse/guestmount.pod:266 ../inspector/virt-inspector.pod:119
-#: ../rescue/virt-rescue.pod:182 ../sparsify/virt-sparsify.pod:159
+#: ../rescue/virt-rescue.pod:219 ../sparsify/virt-sparsify.pod:159
 msgid "B<-v>"
 msgstr ""
 
@@ -520,7 +520,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:140 ../df/virt-df.pod:175
 #: ../edit/virt-edit.pod:163 ../fish/guestfish.pod:392
 #: ../fuse/guestmount.pod:268 ../inspector/virt-inspector.pod:121
-#: ../rescue/virt-rescue.pod:184 ../sparsify/virt-sparsify.pod:161
+#: ../rescue/virt-rescue.pod:221 ../sparsify/virt-sparsify.pod:161
 msgid "B<--verbose>"
 msgstr ""
 
@@ -529,7 +529,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:265 ../cat/virt-ls.pod:429
 #: ../clone/virt-sysprep.pod:142 ../df/virt-df.pod:177
 #: ../edit/virt-edit.pod:165 ../inspector/virt-inspector.pod:123
-#: ../rescue/virt-rescue.pod:186 ../sparsify/virt-sparsify.pod:163
+#: ../rescue/virt-rescue.pod:223 ../sparsify/virt-sparsify.pod:163
 msgid "Enable verbose messages for debugging."
 msgstr ""
 
@@ -539,7 +539,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:144 ../df/virt-df.pod:179
 #: ../edit/virt-edit.pod:167 ../fish/guestfish.pod:397
 #: ../fuse/guestmount.pod:272 ../inspector/virt-inspector.pod:125
-#: ../rescue/virt-rescue.pod:188 ../resize/virt-resize.pod:561
+#: ../rescue/virt-rescue.pod:225 ../resize/virt-resize.pod:561
 #: ../sparsify/virt-sparsify.pod:165
 msgid "B<-V>"
 msgstr ""
@@ -550,7 +550,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:146 ../df/virt-df.pod:181
 #: ../edit/virt-edit.pod:169 ../fish/guestfish.pod:399
 #: ../fuse/guestmount.pod:274 ../inspector/virt-inspector.pod:127
-#: ../rescue/virt-rescue.pod:190 ../resize/virt-resize.pod:563
+#: ../rescue/virt-rescue.pod:227 ../resize/virt-resize.pod:563
 #: ../sparsify/virt-sparsify.pod:167 ../tools/virt-list-filesystems.pl:69
 #: ../tools/virt-list-partitions.pl:70 ../tools/virt-make-fs.pl:169
 #: ../tools/virt-tar.pl:119 ../tools/virt-win-reg.pl:112
@@ -562,7 +562,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:271 ../cat/virt-ls.pod:435
 #: ../clone/virt-sysprep.pod:148 ../df/virt-df.pod:183
 #: ../edit/virt-edit.pod:171 ../inspector/virt-inspector.pod:129
-#: ../rescue/virt-rescue.pod:192 ../resize/virt-resize.pod:565
+#: ../rescue/virt-rescue.pod:229 ../resize/virt-resize.pod:565
 #: ../sparsify/virt-sparsify.pod:169 ../tools/virt-list-filesystems.pl:71
 #: ../tools/virt-list-partitions.pl:72 ../tools/virt-make-fs.pl:171
 #: ../tools/virt-tar.pl:121 ../tools/virt-win-reg.pl:114
@@ -575,7 +575,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:150 ../df/virt-df.pod:185
 #: ../edit/virt-edit.pod:173 ../fish/guestfish.pod:412
 #: ../fuse/guestmount.pod:287 ../inspector/virt-inspector.pod:131
-#: ../rescue/virt-rescue.pod:203 ../sparsify/virt-sparsify.pod:171
+#: ../rescue/virt-rescue.pod:240 ../sparsify/virt-sparsify.pod:171
 #: ../tools/virt-tar.pl:158
 msgid "B<-x>"
 msgstr ""
@@ -585,7 +585,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:283 ../cat/virt-ls.pod:439
 #: ../clone/virt-sysprep.pod:152 ../df/virt-df.pod:187
 #: ../edit/virt-edit.pod:175 ../inspector/virt-inspector.pod:133
-#: ../rescue/virt-rescue.pod:205 ../sparsify/virt-sparsify.pod:173
+#: ../rescue/virt-rescue.pod:242 ../sparsify/virt-sparsify.pod:173
 msgid "Enable tracing of libguestfs API calls."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:373 ../cat/virt-ls.pod:483
 #: ../clone/virt-sysprep.pod:475 ../df/virt-df.pod:215
 #: ../edit/virt-edit.pod:342 ../inspector/virt-inspector.pod:352
-#: ../rescue/virt-rescue.pod:266 ../resize/virt-resize.pod:676
+#: ../rescue/virt-rescue.pod:303 ../resize/virt-resize.pod:676
 #: ../tools/virt-list-filesystems.pl:188 ../tools/virt-list-partitions.pl:258
 #: ../tools/virt-make-fs.pl:550 ../tools/virt-tar.pl:289
 #: ../tools/virt-win-reg.pl:744
@@ -873,7 +873,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:375 ../cat/virt-ls.pod:485
 #: ../clone/virt-sysprep.pod:477 ../df/virt-df.pod:217
 #: ../edit/virt-edit.pod:344 ../inspector/virt-inspector.pod:354
-#: ../rescue/virt-rescue.pod:268 ../resize/virt-resize.pod:678
+#: ../rescue/virt-rescue.pod:305 ../resize/virt-resize.pod:678
 #: ../tools/virt-list-filesystems.pl:190 ../tools/virt-list-partitions.pl:260
 #: ../tools/virt-make-fs.pl:552 ../tools/virt-tar.pl:291
 #: ../tools/virt-win-reg.pl:752
@@ -1037,7 +1037,7 @@ msgstr ""
 #: ../fish/virt-tar-out.pod:41 ../fuse/guestmount.pod:317
 #: ../inspector/virt-inspector.pod:380 ../java/examples/guestfs-java.pod:45
 #: ../ocaml/examples/guestfs-ocaml.pod:78 ../perl/examples/guestfs-perl.pod:39
-#: ../python/examples/guestfs-python.pod:42 ../rescue/virt-rescue.pod:288
+#: ../python/examples/guestfs-python.pod:42 ../rescue/virt-rescue.pod:325
 #: ../resize/virt-resize.pod:688 ../ruby/examples/guestfs-ruby.pod:36
 #: ../sparsify/virt-sparsify.pod:251 ../src/guestfs.pod:3270
 #: ../test-tool/libguestfs-test-tool.pod:100
@@ -1058,7 +1058,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:361 ../cat/virt-cat.pod:252
 #: ../cat/virt-filesystems.pod:396 ../cat/virt-ls.pod:507
 #: ../clone/virt-sysprep.pod:501 ../df/virt-df.pod:235
-#: ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:296
+#: ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:334
 #: ../resize/virt-resize.pod:711 ../sparsify/virt-sparsify.pod:264
 #: ../tools/virt-list-filesystems.pl:208 ../tools/virt-list-partitions.pl:277
 #: ../tools/virt-make-fs.pl:582 ../tools/virt-tar.pl:311
@@ -1071,7 +1071,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:398 ../cat/virt-ls.pod:509
 #: ../clone/virt-sysprep.pod:503 ../df/virt-df.pod:237
 #: ../edit/virt-edit.pod:370 ../inspector/virt-inspector.pod:395
-#: ../rescue/virt-rescue.pod:298 ../resize/virt-resize.pod:713
+#: ../rescue/virt-rescue.pod:336 ../resize/virt-resize.pod:713
 #: ../sparsify/virt-sparsify.pod:266 ../tools/virt-list-filesystems.pl:210
 #: ../tools/virt-list-partitions.pl:279 ../tools/virt-make-fs.pl:584
 #: ../tools/virt-tar.pl:313 ../tools/virt-win-reg.pl:785
@@ -1089,7 +1089,7 @@ msgstr ""
 #: ../fish/virt-tar-out.pod:55 ../fuse/guestmount.pod:332
 #: ../inspector/virt-inspector.pod:403 ../java/examples/guestfs-java.pod:62
 #: ../ocaml/examples/guestfs-ocaml.pod:95 ../perl/examples/guestfs-perl.pod:56
-#: ../python/examples/guestfs-python.pod:58 ../rescue/virt-rescue.pod:300
+#: ../python/examples/guestfs-python.pod:58 ../rescue/virt-rescue.pod:338
 #: ../resize/virt-resize.pod:715 ../ruby/examples/guestfs-ruby.pod:52
 #: ../sparsify/virt-sparsify.pod:268 ../src/guestfs.pod:3352
 #: ../test-tool/libguestfs-test-tool.pod:110
@@ -1113,7 +1113,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:69 ../fish/virt-copy-out.pod:58
 #: ../fish/virt-tar-in.pod:67 ../fish/virt-tar-out.pod:60
 #: ../fuse/guestmount.pod:337 ../inspector/virt-inspector.pod:407
-#: ../rescue/virt-rescue.pod:304 ../resize/virt-resize.pod:719
+#: ../rescue/virt-rescue.pod:342 ../resize/virt-resize.pod:719
 #: ../sparsify/virt-sparsify.pod:272 ../test-tool/libguestfs-test-tool.pod:115
 #: ../tools/virt-list-filesystems.pl:216 ../tools/virt-list-partitions.pl:285
 #: ../tools/virt-make-fs.pl:590 ../tools/virt-tar.pl:319
@@ -1133,7 +1133,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:74 ../fish/virt-copy-out.pod:63
 #: ../fish/virt-tar-in.pod:72 ../fish/virt-tar-out.pod:65
 #: ../fuse/guestmount.pod:342 ../inspector/virt-inspector.pod:412
-#: ../rescue/virt-rescue.pod:309 ../resize/virt-resize.pod:724
+#: ../rescue/virt-rescue.pod:347 ../resize/virt-resize.pod:724
 #: ../sparsify/virt-sparsify.pod:277 ../test-tool/libguestfs-test-tool.pod:120
 #: ../tools/virt-list-filesystems.pl:221 ../tools/virt-list-partitions.pl:290
 #: ../tools/virt-make-fs.pl:595 ../tools/virt-tar.pl:324
@@ -1153,7 +1153,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:79 ../fish/virt-copy-out.pod:68
 #: ../fish/virt-tar-in.pod:77 ../fish/virt-tar-out.pod:70
 #: ../fuse/guestmount.pod:347 ../inspector/virt-inspector.pod:417
-#: ../rescue/virt-rescue.pod:314 ../resize/virt-resize.pod:729
+#: ../rescue/virt-rescue.pod:352 ../resize/virt-resize.pod:729
 #: ../sparsify/virt-sparsify.pod:282 ../test-tool/libguestfs-test-tool.pod:125
 #: ../tools/virt-list-filesystems.pl:226 ../tools/virt-list-partitions.pl:295
 #: ../tools/virt-make-fs.pl:600 ../tools/virt-tar.pl:329
@@ -1326,7 +1326,7 @@ msgstr ""
 #. type: textblock
 #: ../cat/virt-cat.pod:74 ../cat/virt-filesystems.pod:103
 #: ../cat/virt-ls.pod:273 ../df/virt-df.pod:71 ../edit/virt-edit.pod:74
-#: ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:96
+#: ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:124
 msgid ""
 "Add I<file> which should be a disk image from a virtual machine.  If the "
 "virtual machine has multiple block devices, you must supply all of them with "
@@ -1383,7 +1383,7 @@ msgstr ""
 
 #. type: =head1
 #: ../cat/virt-cat.pod:152 ../cat/virt-ls.pod:443 ../edit/virt-edit.pod:179
-#: ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:209
+#: ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:246
 msgid "OLD-STYLE COMMAND LINE ARGUMENTS"
 msgstr ""
 
@@ -1402,7 +1402,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:158 ../cat/virt-ls.pod:449 ../edit/virt-edit.pod:185
-#: ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:215
+#: ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:252
 msgid "or"
 msgstr ""
 
@@ -1416,7 +1416,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:162 ../cat/virt-ls.pod:453 ../edit/virt-edit.pod:189
-#: ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:219
+#: ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:256
 msgid ""
 "whereas in this version you should use I<-a> or I<-d> respectively to avoid "
 "the confusing case where a disk image might have the same name as a guest."
@@ -1424,7 +1424,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:166 ../cat/virt-ls.pod:457 ../edit/virt-edit.pod:193
-#: ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:223
+#: ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:260
 msgid "For compatibility the old style is still supported."
 msgstr ""
 
@@ -2256,7 +2256,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:13
+#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:15
 msgid "Old style:"
 msgstr ""
 
@@ -2984,7 +2984,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-ls.pod:513 ../df/virt-df.pod:241 ../edit/virt-edit.pod:374
-#: ../rescue/virt-rescue.pod:302
+#: ../rescue/virt-rescue.pod:340
 msgid "Copyright (C) 2009-2011 Red Hat Inc."
 msgstr ""
 
@@ -4048,7 +4048,7 @@ msgstr ""
 #. type: =head1
 #: ../edit/virt-edit.pod:21 ../fish/guestfish.pod:23
 #: ../fish/virt-copy-in.pod:13 ../fish/virt-tar-in.pod:15
-#: ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:19
+#: ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:21
 #: ../tools/virt-tar.pl:64 ../tools/virt-win-reg.pl:51
 msgid "WARNING"
 msgstr ""
@@ -4516,7 +4516,7 @@ msgstr ""
 
 #. type: =head1
 #: ../edit/virt-edit.pod:329 ../fish/guestfish.pod:1119
-#: ../rescue/virt-rescue.pod:261 ../sparsify/virt-sparsify.pod:232
+#: ../rescue/virt-rescue.pod:298 ../sparsify/virt-sparsify.pod:232
 #: ../src/guestfs.pod:3209 ../test-tool/libguestfs-test-tool.pod:95
 msgid "ENVIRONMENT VARIABLES"
 msgstr ""
@@ -18846,13 +18846,13 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:369 ../fuse/guestmount.pod:248
-#: ../rescue/virt-rescue.pod:161
+#: ../rescue/virt-rescue.pod:189
 msgid "B<-r>"
 msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:371 ../fuse/guestmount.pod:250
-#: ../rescue/virt-rescue.pod:163
+#: ../rescue/virt-rescue.pod:191
 msgid "B<--ro>"
 msgstr ""
 
@@ -18864,7 +18864,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:167
+#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:195
 msgid ""
 "The option must always be used if the disk image or virtual machine might be "
 "running, and is generally recommended in cases where you don't need write "
@@ -18886,7 +18886,7 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:386 ../fuse/guestmount.pod:262
-#: ../rescue/virt-rescue.pod:173
+#: ../rescue/virt-rescue.pod:201
 msgid "B<--selinux>"
 msgstr ""
 
@@ -18908,13 +18908,13 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:403 ../fuse/guestmount.pod:278
-#: ../rescue/virt-rescue.pod:194
+#: ../rescue/virt-rescue.pod:231
 msgid "B<-w>"
 msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:405 ../fuse/guestmount.pod:280
-#: ../rescue/virt-rescue.pod:196
+#: ../rescue/virt-rescue.pod:233
 msgid "B<--rw>"
 msgstr ""
 
@@ -20705,25 +20705,25 @@ msgstr ""
 
 #. type: =head1
 #: ../fish/guestfish.pod:1209 ../fuse/guestmount.pod:297
-#: ../rescue/virt-rescue.pod:273
+#: ../rescue/virt-rescue.pod:310
 msgid "FILES"
 msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:1213 ../fuse/guestmount.pod:301
-#: ../rescue/virt-rescue.pod:277
+#: ../rescue/virt-rescue.pod:314
 msgid "$HOME/.libguestfs-tools.rc"
 msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:1215 ../fuse/guestmount.pod:303
-#: ../rescue/virt-rescue.pod:279
+#: ../rescue/virt-rescue.pod:316
 msgid "/etc/libguestfs-tools.conf"
 msgstr ""
 
 #. type: textblock
 #: ../fish/guestfish.pod:1217 ../fuse/guestmount.pod:305
-#: ../rescue/virt-rescue.pod:281
+#: ../rescue/virt-rescue.pod:318
 msgid ""
 "This configuration file controls the default read-only or read-write mode "
 "(I<--ro> or I<--rw>)."
@@ -21329,7 +21329,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:68
+#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:96
 #: ../resize/virt-resize.pod:621
 msgid "NOTES"
 msgstr ""
@@ -21547,7 +21547,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:171
+#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:199
 msgid "See also L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr ""
 
@@ -21568,7 +21568,7 @@ msgstr ""
 
 #. type: textblock
 #: ../fuse/guestmount.pod:285 ../fuse/guestmount.pod:308
-#: ../rescue/virt-rescue.pod:201 ../rescue/virt-rescue.pod:284
+#: ../rescue/virt-rescue.pod:238 ../rescue/virt-rescue.pod:321
 msgid "See L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr ""
 
@@ -22535,10 +22535,10 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:15
+#: ../rescue/virt-rescue.pod:13
 #, no-wrap
 msgid ""
-" virt-rescue [--options] domname\n"
+" virt-rescue --suggest (-d domname | -a disk.img ...)\n"
 "\n"
 msgstr ""
 
@@ -22546,12 +22546,20 @@ msgstr ""
 #: ../rescue/virt-rescue.pod:17
 #, no-wrap
 msgid ""
+" virt-rescue [--options] domname\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:19
+#, no-wrap
+msgid ""
 " virt-rescue [--options] disk.img [disk.img ...]\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:21
+#: ../rescue/virt-rescue.pod:23
 msgid ""
 "You must I<not> use C<virt-rescue> on live virtual machines.  Doing so will "
 "probably result in disk corruption in the VM.  C<virt-rescue> tries to stop "
@@ -22559,7 +22567,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:25
+#: ../rescue/virt-rescue.pod:27
 msgid ""
 "However if you use the I<--ro> (read only) option, then you can attach a "
 "shell to a live virtual machine.  The results might be strange or "
@@ -22567,7 +22575,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:31
+#: ../rescue/virt-rescue.pod:33
 msgid ""
 "virt-rescue is like a Rescue CD, but for virtual machines, and without the "
 "need for a CD.  virt-rescue gives you a rescue shell and some simple "
@@ -22576,14 +22584,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:36
+#: ../rescue/virt-rescue.pod:38
 msgid ""
 "You can run virt-rescue on any virtual machine known to libvirt, or directly "
 "on disk image(s):"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:39
+#: ../rescue/virt-rescue.pod:41
 #, no-wrap
 msgid ""
 " virt-rescue -d GuestName\n"
@@ -22591,7 +22599,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:41
+#: ../rescue/virt-rescue.pod:43
 #, no-wrap
 msgid ""
 " virt-rescue --ro -a /path/to/disk.img\n"
@@ -22599,7 +22607,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:43
+#: ../rescue/virt-rescue.pod:45
 #, no-wrap
 msgid ""
 " virt-rescue -a /dev/sdc\n"
@@ -22607,12 +22615,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:45
+#: ../rescue/virt-rescue.pod:47
 msgid "For live VMs you I<must> use the --ro option."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:47
+#: ../rescue/virt-rescue.pod:49
 msgid ""
 "When you run virt-rescue on a virtual machine or disk image, you are placed "
 "in an interactive bash shell where you can use many ordinary Linux "
@@ -22622,34 +22630,98 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:54
+#: ../rescue/virt-rescue.pod:56
+msgid ""
+"You can get virt-rescue to suggest mount commands for you by using the I<--"
+"suggest> option (in another terminal):"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:59
+#, no-wrap
+msgid ""
+" $ virt-rescue --suggest -d Fedora15\n"
+" Inspecting the virtual machine or disk image ...\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:62
+#, no-wrap
+msgid ""
+" This disk contains one or more operating systems.  You can use these\n"
+" mount commands in virt-rescue (at the ><rescue> prompt) to mount the\n"
+" filesystems.\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:66
+#, no-wrap
+msgid ""
+" # /dev/vg_f15x32/lv_root is the root of a linux operating system\n"
+" # type: linux, distro: fedora, version: 15.0\n"
+" # Fedora release 15 (Lovelock)\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:70
+#, no-wrap
+msgid ""
+" mount /dev/vg_f15x32/lv_root /sysroot/\n"
+" mount /dev/vda1 /sysroot/boot\n"
+" mount --bind /dev /sysroot/dev\n"
+" mount --bind /dev/pts /sysroot/dev/pts\n"
+" mount --bind /proc /sysroot/proc\n"
+" mount --bind /sys /sysroot/sys\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:77
 msgid ""
-"In the example below, we list logical volumes, then choose one to mount "
-"under C</sysroot>:"
+"Another way is to list the logical volumes (with L<lvs(8)>) and partitions "
+"(with L<parted(8)>) and mount them by hand:"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:57
+#: ../rescue/virt-rescue.pod:80
 #, no-wrap
 msgid ""
 " ><rescue> lvs\n"
 " LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert\n"
-" lv_root vg_f11x64 -wi-a-   8.83G\n"
-" lv_swap vg_f11x64 -wi-a- 992.00M\n"
-" ><rescue> mount /dev/vg_f11x64/lv_root /sysroot\n"
+" lv_root vg_f15x32 -wi-a-   8.83G\n"
+" lv_swap vg_f15x32 -wi-a- 992.00M\n"
+" ><rescue> mount /dev/vg_f15x32/lv_root /sysroot\n"
+" ><rescue> mount /dev/vda1 /sysroot/boot\n"
 " ><rescue> ls /sysroot\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:64
+#: ../rescue/virt-rescue.pod:88
 msgid ""
-"If you don't know what filesystems are available on the virtual machine then "
-"you can use commands such as L<parted(8)> and L<lvs(8)> to find out."
+"Another command to list available filesystems is L<virt-filesystems(1)>."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:70
+#: ../rescue/virt-rescue.pod:91
+msgid ""
+"To run commands in a Linux guest (for example, grub), you should chroot into "
+"the /sysroot directory first:"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:94
+#, no-wrap
+msgid ""
+" ><rescue> chroot /sysroot\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:98
 msgid ""
 "Virt-rescue can be used on I<any> disk image file or device, not just a "
 "virtual machine.  For example you can use it on a blank file if you want to "
@@ -22659,14 +22731,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:76
+#: ../rescue/virt-rescue.pod:104
 msgid ""
 "Virt-rescue does not require root.  You only need to run it as root if you "
 "need root to open the disk image."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:79
+#: ../rescue/virt-rescue.pod:107
 msgid ""
 "This tool is just designed for quick interactive hacking on a virtual "
 "machine.  For more structured access to a virtual machine disk image, you "
@@ -22675,17 +22747,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:103
+#: ../rescue/virt-rescue.pod:131
 msgid "B<--append kernelopts>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:105
+#: ../rescue/virt-rescue.pod:133
 msgid "Pass additional options to the rescue kernel."
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:135
+#: ../rescue/virt-rescue.pod:163
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img\n"
@@ -22693,7 +22765,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:139
+#: ../rescue/virt-rescue.pod:167
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img --format -a another.img\n"
@@ -22701,17 +22773,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:148
+#: ../rescue/virt-rescue.pod:176
 msgid "B<-m MB>"
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:150
+#: ../rescue/virt-rescue.pod:178
 msgid "B<--memsize MB>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:152
+#: ../rescue/virt-rescue.pod:180
 msgid ""
 "Change the amount of memory allocated to the rescue system.  The default is "
 "set by libguestfs and is small but adequate for running system tools.  The "
@@ -22720,51 +22792,71 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:157
+#: ../rescue/virt-rescue.pod:185
 msgid "B<--network>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:159
+#: ../rescue/virt-rescue.pod:187
 msgid "Enable QEMU user networking in the guest.  See L</NETWORK>."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:165
+#: ../rescue/virt-rescue.pod:193
 msgid "Open the image read-only."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:175
+#: ../rescue/virt-rescue.pod:203
 msgid ""
 "Enable SELinux in the rescue appliance.  You should read L<guestfs(3)/"
 "SELINUX> before using this option."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:178
+#: ../rescue/virt-rescue.pod:206
 msgid "B<--smp> N"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:180
+#: ../rescue/virt-rescue.pod:208
 msgid "Enable N E<ge> 2 virtual CPUs in the rescue appliance."
 msgstr ""
 
+#. type: =item
+#: ../rescue/virt-rescue.pod:210
+msgid "B<--suggest>"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:212
+msgid ""
+"Inspect the disk image and suggest what mount commands should be used to "
+"mount the disks.  You should use the I<--suggest> option in a second "
+"terminal, then paste the commands into another virt-rescue."
+msgstr ""
+
 #. type: textblock
-#: ../rescue/virt-rescue.pod:198
+#: ../rescue/virt-rescue.pod:216
+msgid ""
+"This option implies I<--ro> and is safe to use even if the guest is up or if "
+"another virt-rescue is running."
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:235
 msgid ""
 "This changes the I<-a> and I<-d> options so that disks are added and mounts "
 "are done read-write."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:211
+#: ../rescue/virt-rescue.pod:248
 msgid "Previous versions of virt-rescue allowed you to write either:"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:213
+#: ../rescue/virt-rescue.pod:250
 #, no-wrap
 msgid ""
 " virt-rescue disk.img [disk.img ...]\n"
@@ -22772,7 +22864,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:217
+#: ../rescue/virt-rescue.pod:254
 #, no-wrap
 msgid ""
 " virt-rescue guestname\n"
@@ -22780,12 +22872,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../rescue/virt-rescue.pod:225
+#: ../rescue/virt-rescue.pod:262
 msgid "NETWORK"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:227
+#: ../rescue/virt-rescue.pod:264
 msgid ""
 "Adding the I<--network> option enables QEMU user networking in the rescue "
 "appliance.  There are some differences between user networking and ordinary "
@@ -22793,12 +22885,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:233
+#: ../rescue/virt-rescue.pod:270
 msgid "ping does not work"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:235
+#: ../rescue/virt-rescue.pod:272
 msgid ""
 "Because the ICMP ECHO_REQUEST protocol generally requires root in order to "
 "send the ping packets, and because virt-rescue must be able to run as non-"
@@ -22809,22 +22901,22 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:242
+#: ../rescue/virt-rescue.pod:279
 msgid "cannot receive connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:244
+#: ../rescue/virt-rescue.pod:281
 msgid "QEMU user networking cannot receive incoming connections."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:246
+#: ../rescue/virt-rescue.pod:283
 msgid "making TCP connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:248
+#: ../rescue/virt-rescue.pod:285
 msgid ""
 "The virt-rescue appliance needs to be small and so does not include many "
 "network tools.  In particular there is no L<telnet(1)> command.  You can "
@@ -22833,7 +22925,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:253
+#: ../rescue/virt-rescue.pod:290
 #, no-wrap
 msgid ""
 " exec 3<>/dev/tcp/redhat.com/80\n"
@@ -22843,22 +22935,22 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:257
+#: ../rescue/virt-rescue.pod:294
 msgid "See L<bash(1)> for more details."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:263
+#: ../rescue/virt-rescue.pod:300
 msgid ""
 "Several environment variables affect virt-rescue.  See L<guestfs(3)/"
 "ENVIRONMENT VARIABLES> for the complete list."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:290
+#: ../rescue/virt-rescue.pod:327
 msgid ""
-"L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>, L<http://"
-"libguestfs.org/>."
+"L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>, L<virt-"
+"filesystems(1)>, L<http://libguestfs.org/>."
 msgstr ""
 
 #. type: textblock
diff --git a/po-docs/ja/guestfish.1 b/po-docs/ja/guestfish.1
index 7933f3a..11ccf98 100644
--- a/po-docs/ja/guestfish.1
+++ b/po-docs/ja/guestfish.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestfish 1"
-.TH guestfish 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestfish 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/guestfs.3 b/po-docs/ja/guestfs.3
index 4594af4..0cfd369 100644
--- a/po-docs/ja/guestfs.3
+++ b/po-docs/ja/guestfs.3
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestfs 3"
-.TH guestfs 3 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestfs 3 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/guestmount.1 b/po-docs/ja/guestmount.1
index 69f48f3..04e0e0e 100644
--- a/po-docs/ja/guestmount.1
+++ b/po-docs/ja/guestmount.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestmount 1"
-.TH guestmount 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestmount 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/libguestfs-test-tool.1 b/po-docs/ja/libguestfs-test-tool.1
index 5f3d309..f580bfd 100644
--- a/po-docs/ja/libguestfs-test-tool.1
+++ b/po-docs/ja/libguestfs-test-tool.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "libguestfs-test-tool 1"
-.TH libguestfs-test-tool 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH libguestfs-test-tool 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-alignment-scan.1 b/po-docs/ja/virt-alignment-scan.1
index 7ab3e70..352fac1 100644
--- a/po-docs/ja/virt-alignment-scan.1
+++ b/po-docs/ja/virt-alignment-scan.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-alignment-scan 1"
-.TH virt-alignment-scan 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-alignment-scan 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-cat.1 b/po-docs/ja/virt-cat.1
index 2025916..d77d320 100644
--- a/po-docs/ja/virt-cat.1
+++ b/po-docs/ja/virt-cat.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-cat 1"
-.TH virt-cat 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-cat 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-copy-in.1 b/po-docs/ja/virt-copy-in.1
index 570d4d6..4bf44e4 100644
--- a/po-docs/ja/virt-copy-in.1
+++ b/po-docs/ja/virt-copy-in.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-copy-in 1"
-.TH virt-copy-in 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-copy-in 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-copy-out.1 b/po-docs/ja/virt-copy-out.1
index 01c8075..9d3e062 100644
--- a/po-docs/ja/virt-copy-out.1
+++ b/po-docs/ja/virt-copy-out.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-copy-out 1"
-.TH virt-copy-out 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-copy-out 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-df.1 b/po-docs/ja/virt-df.1
index bc3c850..be24757 100644
--- a/po-docs/ja/virt-df.1
+++ b/po-docs/ja/virt-df.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-df 1"
-.TH virt-df 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-df 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-edit.1 b/po-docs/ja/virt-edit.1
index 5684d3d..5a659c4 100644
--- a/po-docs/ja/virt-edit.1
+++ b/po-docs/ja/virt-edit.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-edit 1"
-.TH virt-edit 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-edit 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-filesystems.1 b/po-docs/ja/virt-filesystems.1
index 31b077d..8522fee 100644
--- a/po-docs/ja/virt-filesystems.1
+++ b/po-docs/ja/virt-filesystems.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-filesystems 1"
-.TH virt-filesystems 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-filesystems 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-inspector.1 b/po-docs/ja/virt-inspector.1
index 6167e5e..5ad177b 100644
--- a/po-docs/ja/virt-inspector.1
+++ b/po-docs/ja/virt-inspector.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-inspector 1"
-.TH virt-inspector 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-inspector 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-list-filesystems.1 b/po-docs/ja/virt-list-filesystems.1
index 24f1269..1400545 100644
--- a/po-docs/ja/virt-list-filesystems.1
+++ b/po-docs/ja/virt-list-filesystems.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-list-filesystems.pl 1"
-.TH virt-list-filesystems.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-list-filesystems.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-list-partitions.1 b/po-docs/ja/virt-list-partitions.1
index 87a0271..f6ff9d9 100644
--- a/po-docs/ja/virt-list-partitions.1
+++ b/po-docs/ja/virt-list-partitions.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-list-partitions.pl 1"
-.TH virt-list-partitions.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-list-partitions.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-ls.1 b/po-docs/ja/virt-ls.1
index 46fe852..6c5eb00 100644
--- a/po-docs/ja/virt-ls.1
+++ b/po-docs/ja/virt-ls.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-ls 1"
-.TH virt-ls 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-ls 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-make-fs.1 b/po-docs/ja/virt-make-fs.1
index af0e2bc..35b96d2 100644
--- a/po-docs/ja/virt-make-fs.1
+++ b/po-docs/ja/virt-make-fs.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-make-fs.pl 1"
-.TH virt-make-fs.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-make-fs.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-rescue.1 b/po-docs/ja/virt-rescue.1
index aa60adb..a093fa2 100644
--- a/po-docs/ja/virt-rescue.1
+++ b/po-docs/ja/virt-rescue.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-rescue 1"
-.TH virt-rescue 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-rescue 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -76,6 +76,8 @@ virt-rescue \- Run a rescue shell on a virtual machine
 \& virt\-rescue [\-\-options] \-d domname
 \&
 \& virt\-rescue [\-\-options] \-a disk.img [\-a disk.img ...]
+\&
+\& virt\-rescue \-\-suggest (\-d domname | \-a disk.img ...)
 .Ve
 .PP
 Old style:
@@ -120,20 +122,50 @@ commands.  What you see in \f(CW\*(C`/\*(C'\fR (\f(CW\*(C`/bin\*(C'\fR, \f(CW\*(
 appliance.  You must mount the virtual machine's filesystems by hand.  There
 is an empty directory called \f(CW\*(C`/sysroot\*(C'\fR where you can mount filesystems.
 .PP
-In the example below, we list logical volumes, then choose one to mount
-under \f(CW\*(C`/sysroot\*(C'\fR:
+You can get virt-rescue to suggest mount commands for you by using the
+\&\fI\-\-suggest\fR option (in another terminal):
+.PP
+.Vb 2
+\& $ virt\-rescue \-\-suggest \-d Fedora15
+\& Inspecting the virtual machine or disk image ...
+\& 
+\& This disk contains one or more operating systems.  You can use these
+\& mount commands in virt\-rescue (at the ><rescue> prompt) to mount the
+\& filesystems.
+\& 
+\& # /dev/vg_f15x32/lv_root is the root of a linux operating system
+\& # type: linux, distro: fedora, version: 15.0
+\& # Fedora release 15 (Lovelock)
+\& 
+\& mount /dev/vg_f15x32/lv_root /sysroot/
+\& mount /dev/vda1 /sysroot/boot
+\& mount \-\-bind /dev /sysroot/dev
+\& mount \-\-bind /dev/pts /sysroot/dev/pts
+\& mount \-\-bind /proc /sysroot/proc
+\& mount \-\-bind /sys /sysroot/sys
+.Ve
 .PP
-.Vb 6
+Another way is to list the logical volumes (with \fIlvs\fR\|(8)) and partitions
+(with \fIparted\fR\|(8)) and mount them by hand:
+.PP
+.Vb 7
 \& ><rescue> lvs
 \& LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
-\& lv_root vg_f11x64 \-wi\-a\-   8.83G
-\& lv_swap vg_f11x64 \-wi\-a\- 992.00M
-\& ><rescue> mount /dev/vg_f11x64/lv_root /sysroot
+\& lv_root vg_f15x32 \-wi\-a\-   8.83G
+\& lv_swap vg_f15x32 \-wi\-a\- 992.00M
+\& ><rescue> mount /dev/vg_f15x32/lv_root /sysroot
+\& ><rescue> mount /dev/vda1 /sysroot/boot
 \& ><rescue> ls /sysroot
 .Ve
 .PP
-If you don't know what filesystems are available on the virtual machine then
-you can use commands such as \fIparted\fR\|(8) and \fIlvs\fR\|(8) to find out.
+Another command to list available filesystems is \fIvirt\-filesystems\fR\|(1).
+.PP
+To run commands in a Linux guest (for example, grub), you should chroot into
+the /sysroot directory first:
+.PP
+.Vb 1
+\& ><rescue> chroot /sysroot
+.Ve
 .SS "\s-1NOTES\s0"
 .IX Subsection "NOTES"
 Virt-rescue can be used on \fIany\fR disk image file or device, not just a
@@ -250,6 +282,14 @@ Enable SELinux in the rescue appliance.  You should read
 .IP "\fB\-\-smp\fR N" 4
 .IX Item "--smp N"
 Enable N ≥ 2 virtual CPUs in the rescue appliance.
+.IP "\fB\-\-suggest\fR" 4
+.IX Item "--suggest"
+Inspect the disk image and suggest what mount commands should be used to
+mount the disks.  You should use the \fI\-\-suggest\fR option in a second
+terminal, then paste the commands into another virt-rescue.
+.Sp
+This option implies \fI\-\-ro\fR and is safe to use even if the guest is up or if
+another virt-rescue is running.
 .IP "\fB\-v\fR" 4
 .IX Item "-v"
 .PD 0
@@ -351,7 +391,7 @@ See \*(L"\s-1OPENING\s0 \s-1DISKS\s0 \s-1FOR\s0 \s-1READ\s0 \s-1AND\s0 \s-1WRITE
 .SH "SEE ALSO"
 .IX Header "SEE ALSO"
 \&\fIguestfs\fR\|(3), \fIguestfish\fR\|(1), \fIvirt\-cat\fR\|(1), \fIvirt\-edit\fR\|(1),
-<http://libguestfs.org/>.
+\&\fIvirt\-filesystems\fR\|(1), <http://libguestfs.org/>.
 .SH "AUTHOR"
 .IX Header "AUTHOR"
 Richard W.M. Jones <http://people.redhat.com/~rjones/>
diff --git a/po-docs/ja/virt-rescue.pod b/po-docs/ja/virt-rescue.pod
index 1fc0471..76bcd02 100644
--- a/po-docs/ja/virt-rescue.pod
+++ b/po-docs/ja/virt-rescue.pod
@@ -10,6 +10,8 @@ virt-rescue - Run a rescue shell on a virtual machine
 
  virt-rescue [--options] -a disk.img [-a disk.img ...]
 
+ virt-rescue --suggest (-d domname | -a disk.img ...)
+
 Old style:
 
  virt-rescue [--options] domname
@@ -50,18 +52,44 @@ commands.  What you see in C</> (C</bin>, C</lib> etc) is the rescue
 appliance.  You must mount the virtual machine's filesystems by hand.  There
 is an empty directory called C</sysroot> where you can mount filesystems.
 
-In the example below, we list logical volumes, then choose one to mount
-under C</sysroot>:
+You can get virt-rescue to suggest mount commands for you by using the
+I<--suggest> option (in another terminal):
+
+ $ virt-rescue --suggest -d Fedora15
+ Inspecting the virtual machine or disk image ...
+ 
+ This disk contains one or more operating systems.  You can use these
+ mount commands in virt-rescue (at the ><rescue> prompt) to mount the
+ filesystems.
+ 
+ # /dev/vg_f15x32/lv_root is the root of a linux operating system
+ # type: linux, distro: fedora, version: 15.0
+ # Fedora release 15 (Lovelock)
+ 
+ mount /dev/vg_f15x32/lv_root /sysroot/
+ mount /dev/vda1 /sysroot/boot
+ mount --bind /dev /sysroot/dev
+ mount --bind /dev/pts /sysroot/dev/pts
+ mount --bind /proc /sysroot/proc
+ mount --bind /sys /sysroot/sys
+
+Another way is to list the logical volumes (with L<lvs(8)>) and partitions
+(with L<parted(8)>) and mount them by hand:
 
  ><rescue> lvs
  LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
- lv_root vg_f11x64 -wi-a-   8.83G
- lv_swap vg_f11x64 -wi-a- 992.00M
- ><rescue> mount /dev/vg_f11x64/lv_root /sysroot
+ lv_root vg_f15x32 -wi-a-   8.83G
+ lv_swap vg_f15x32 -wi-a- 992.00M
+ ><rescue> mount /dev/vg_f15x32/lv_root /sysroot
+ ><rescue> mount /dev/vda1 /sysroot/boot
  ><rescue> ls /sysroot
 
-If you don't know what filesystems are available on the virtual machine then
-you can use commands such as L<parted(8)> and L<lvs(8)> to find out.
+Another command to list available filesystems is L<virt-filesystems(1)>.
+
+To run commands in a Linux guest (for example, grub), you should chroot into
+the /sysroot directory first:
+
+ ><rescue> chroot /sysroot
 
 =head2 NOTES
 
@@ -177,6 +205,15 @@ L<guestfs(3)/SELINUX> before using this option.
 
 Enable N E<ge> 2 virtual CPUs in the rescue appliance.
 
+=item B<--suggest>
+
+Inspect the disk image and suggest what mount commands should be used to
+mount the disks.  You should use the I<--suggest> option in a second
+terminal, then paste the commands into another virt-rescue.
+
+This option implies I<--ro> and is safe to use even if the guest is up or if
+another virt-rescue is running.
+
 =item B<-v>
 
 =item B<--verbose>
@@ -285,7 +322,7 @@ See L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>.
 =head1 SEE ALSO
 
 L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>,
-L<http://libguestfs.org/>.
+L<virt-filesystems(1)>, L<http://libguestfs.org/>.
 
 =head1 AUTHOR
 
diff --git a/po-docs/ja/virt-resize.1 b/po-docs/ja/virt-resize.1
index 73d171e..7303688 100644
--- a/po-docs/ja/virt-resize.1
+++ b/po-docs/ja/virt-resize.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-resize 1"
-.TH virt-resize 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-resize 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-sparsify.1 b/po-docs/ja/virt-sparsify.1
index 29030d5..8d2591e 100644
--- a/po-docs/ja/virt-sparsify.1
+++ b/po-docs/ja/virt-sparsify.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sparsify 1"
-.TH virt-sparsify 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-sparsify 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-sysprep.1 b/po-docs/ja/virt-sysprep.1
index 73e7caa..30c5551 100644
--- a/po-docs/ja/virt-sysprep.1
+++ b/po-docs/ja/virt-sysprep.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sysprep 1"
-.TH virt-sysprep 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-sysprep 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-tar-in.1 b/po-docs/ja/virt-tar-in.1
index bfaf349..797fb9d 100644
--- a/po-docs/ja/virt-tar-in.1
+++ b/po-docs/ja/virt-tar-in.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar-in 1"
-.TH virt-tar-in 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar-in 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-tar-out.1 b/po-docs/ja/virt-tar-out.1
index adb437a..afd134c 100644
--- a/po-docs/ja/virt-tar-out.1
+++ b/po-docs/ja/virt-tar-out.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar-out 1"
-.TH virt-tar-out 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar-out 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-tar.1 b/po-docs/ja/virt-tar.1
index 83fc9e0..ae5f92c 100644
--- a/po-docs/ja/virt-tar.1
+++ b/po-docs/ja/virt-tar.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar.pl 1"
-.TH virt-tar.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/ja/virt-win-reg.1 b/po-docs/ja/virt-win-reg.1
index c4832c4..25b9844 100644
--- a/po-docs/ja/virt-win-reg.1
+++ b/po-docs/ja/virt-win-reg.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-win-reg.pl 1"
-.TH virt-win-reg.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-win-reg.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/libguestfs-docs.pot b/po-docs/libguestfs-docs.pot
index e5c110d..7f99c0e 100644
--- a/po-docs/libguestfs-docs.pot
+++ b/po-docs/libguestfs-docs.pot
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: libguestfs 1.15.0\n"
+"Project-Id-Version: libguestfs 1.15.1\n"
 "Report-Msgid-Bugs-To: libguestfs at redhat.com\n"
-"POT-Creation-Date: 2011-10-27 16:05+0200\n"
+"POT-Creation-Date: 2011-11-01 14:20+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -49,7 +49,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:13 ../cat/virt-cat.pod:19 ../cat/virt-filesystems.pod:13 ../cat/virt-ls.pod:19 ../clone/virt-sysprep.pod:13 ../df/virt-df.pod:21 ../edit/virt-edit.pod:27 ../erlang/examples/guestfs-erlang.pod:16 ../examples/guestfs-examples.pod:19 ../examples/guestfs-recipes.pod:18 ../fish/guestfish.pod:30 ../fish/virt-copy-in.pod:19 ../fish/virt-copy-out.pod:13 ../fish/virt-tar-in.pod:21 ../fish/virt-tar-out.pod:15 ../fuse/guestmount.pod:20 ../inspector/virt-inspector [...]
+#: ../align/virt-alignment-scan.pod:13 ../cat/virt-cat.pod:19 ../cat/virt-filesystems.pod:13 ../cat/virt-ls.pod:19 ../clone/virt-sysprep.pod:13 ../df/virt-df.pod:21 ../edit/virt-edit.pod:27 ../erlang/examples/guestfs-erlang.pod:16 ../examples/guestfs-examples.pod:19 ../examples/guestfs-recipes.pod:18 ../fish/guestfish.pod:30 ../fish/virt-copy-in.pod:19 ../fish/virt-copy-out.pod:13 ../fish/virt-tar-in.pod:21 ../fish/virt-tar-out.pod:15 ../fuse/guestmount.pod:20 ../inspector/virt-inspector [...]
 msgid "DESCRIPTION"
 msgstr ""
 
@@ -212,27 +212,27 @@ msgid "If you just want the exit code with no output, use the I<-q> option."
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:89 ../cat/virt-cat.pod:62 ../cat/virt-filesystems.pod:91 ../cat/virt-ls.pod:261 ../clone/virt-sysprep.pod:42 ../df/virt-df.pod:59 ../edit/virt-edit.pod:62 ../fish/guestfish.pod:148 ../fish/virt-copy-in.pod:45 ../fish/virt-copy-out.pod:34 ../fish/virt-tar-in.pod:42 ../fish/virt-tar-out.pod:36 ../fuse/guestmount.pod:92 ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:84 ../resize/virt-resize.pod:262 ../sparsify/virt-sparsify.pod:99 ../test-to [...]
+#: ../align/virt-alignment-scan.pod:89 ../cat/virt-cat.pod:62 ../cat/virt-filesystems.pod:91 ../cat/virt-ls.pod:261 ../clone/virt-sysprep.pod:42 ../df/virt-df.pod:59 ../edit/virt-edit.pod:62 ../fish/guestfish.pod:148 ../fish/virt-copy-in.pod:45 ../fish/virt-copy-out.pod:34 ../fish/virt-tar-in.pod:42 ../fish/virt-tar-out.pod:36 ../fuse/guestmount.pod:92 ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:112 ../resize/virt-resize.pod:262 ../sparsify/virt-sparsify.pod:99 ../test-t [...]
 msgid "OPTIONS"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:93 ../cat/virt-cat.pod:66 ../cat/virt-filesystems.pod:95 ../cat/virt-ls.pod:265 ../clone/virt-sysprep.pod:46 ../df/virt-df.pod:63 ../edit/virt-edit.pod:66 ../fish/guestfish.pod:152 ../fuse/guestmount.pod:160 ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:88 ../resize/virt-resize.pod:266 ../sparsify/virt-sparsify.pod:103 ../test-tool/libguestfs-test-tool.pod:40 ../tools/virt-list-filesystems.pl:61 ../tools/virt-list-partitions.pl:62 ../too [...]
+#: ../align/virt-alignment-scan.pod:93 ../cat/virt-cat.pod:66 ../cat/virt-filesystems.pod:95 ../cat/virt-ls.pod:265 ../clone/virt-sysprep.pod:46 ../df/virt-df.pod:63 ../edit/virt-edit.pod:66 ../fish/guestfish.pod:152 ../fuse/guestmount.pod:160 ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:116 ../resize/virt-resize.pod:266 ../sparsify/virt-sparsify.pod:103 ../test-tool/libguestfs-test-tool.pod:40 ../tools/virt-list-filesystems.pl:61 ../tools/virt-list-partitions.pl:62 ../to [...]
 msgid "B<--help>"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:95 ../cat/virt-cat.pod:68 ../cat/virt-filesystems.pod:97 ../cat/virt-ls.pod:267 ../clone/virt-sysprep.pod:48 ../df/virt-df.pod:65 ../edit/virt-edit.pod:68 ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:90 ../tools/virt-list-filesystems.pl:63 ../tools/virt-list-partitions.pl:64 ../tools/virt-make-fs.pl:163 ../tools/virt-tar.pl:113 ../tools/virt-win-reg.pl:106
+#: ../align/virt-alignment-scan.pod:95 ../cat/virt-cat.pod:68 ../cat/virt-filesystems.pod:97 ../cat/virt-ls.pod:267 ../clone/virt-sysprep.pod:48 ../df/virt-df.pod:65 ../edit/virt-edit.pod:68 ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:118 ../tools/virt-list-filesystems.pl:63 ../tools/virt-list-partitions.pl:64 ../tools/virt-make-fs.pl:163 ../tools/virt-tar.pl:113 ../tools/virt-win-reg.pl:106
 msgid "Display brief help."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:97 ../cat/virt-cat.pod:70 ../cat/virt-filesystems.pod:99 ../cat/virt-ls.pod:269 ../clone/virt-sysprep.pod:50 ../df/virt-df.pod:67 ../edit/virt-edit.pod:70 ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:92
+#: ../align/virt-alignment-scan.pod:97 ../cat/virt-cat.pod:70 ../cat/virt-filesystems.pod:99 ../cat/virt-ls.pod:269 ../clone/virt-sysprep.pod:50 ../df/virt-df.pod:67 ../edit/virt-edit.pod:70 ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:120
 msgid "B<-a> file"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:99 ../cat/virt-cat.pod:72 ../cat/virt-filesystems.pod:101 ../cat/virt-ls.pod:271 ../clone/virt-sysprep.pod:52 ../df/virt-df.pod:69 ../edit/virt-edit.pod:72 ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:94
+#: ../align/virt-alignment-scan.pod:99 ../cat/virt-cat.pod:72 ../cat/virt-filesystems.pod:101 ../cat/virt-ls.pod:271 ../clone/virt-sysprep.pod:52 ../df/virt-df.pod:69 ../edit/virt-edit.pod:72 ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:122
 msgid "B<--add> file"
 msgstr ""
 
@@ -242,65 +242,65 @@ msgid "Add I<file> which should be a disk image from a virtual machine."
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:103 ../cat/virt-cat.pod:78 ../cat/virt-filesystems.pod:107 ../cat/virt-ls.pod:277 ../clone/virt-sysprep.pod:56 ../df/virt-df.pod:75 ../edit/virt-edit.pod:78 ../fish/guestfish.pod:174 ../fuse/guestmount.pod:102 ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:100
+#: ../align/virt-alignment-scan.pod:103 ../cat/virt-cat.pod:78 ../cat/virt-filesystems.pod:107 ../cat/virt-ls.pod:277 ../clone/virt-sysprep.pod:56 ../df/virt-df.pod:75 ../edit/virt-edit.pod:78 ../fish/guestfish.pod:174 ../fuse/guestmount.pod:102 ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:128
 msgid ""
 "The format of the disk image is auto-detected.  To override this and force a "
 "particular format use the I<--format=..> option."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:106 ../cat/virt-cat.pod:81 ../cat/virt-filesystems.pod:125 ../cat/virt-ls.pod:291 ../clone/virt-sysprep.pod:59 ../df/virt-df.pod:78 ../rescue/virt-rescue.pod:107
+#: ../align/virt-alignment-scan.pod:106 ../cat/virt-cat.pod:81 ../cat/virt-filesystems.pod:125 ../cat/virt-ls.pod:291 ../clone/virt-sysprep.pod:59 ../df/virt-df.pod:78 ../rescue/virt-rescue.pod:135
 msgid "B<-c> URI"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:108 ../cat/virt-cat.pod:83 ../cat/virt-filesystems.pod:127 ../cat/virt-ls.pod:293 ../clone/virt-sysprep.pod:61 ../df/virt-df.pod:80 ../rescue/virt-rescue.pod:109
+#: ../align/virt-alignment-scan.pod:108 ../cat/virt-cat.pod:83 ../cat/virt-filesystems.pod:127 ../cat/virt-ls.pod:293 ../clone/virt-sysprep.pod:61 ../df/virt-df.pod:80 ../rescue/virt-rescue.pod:137
 msgid "B<--connect> URI"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:110 ../cat/virt-cat.pod:85 ../cat/virt-filesystems.pod:129 ../cat/virt-ls.pod:295 ../clone/virt-sysprep.pod:63 ../df/virt-df.pod:82 ../edit/virt-edit.pod:99 ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:111 ../tools/virt-list-filesystems.pl:81 ../tools/virt-list-partitions.pl:82 ../tools/virt-tar.pl:131 ../tools/virt-win-reg.pl:132
+#: ../align/virt-alignment-scan.pod:110 ../cat/virt-cat.pod:85 ../cat/virt-filesystems.pod:129 ../cat/virt-ls.pod:295 ../clone/virt-sysprep.pod:63 ../df/virt-df.pod:82 ../edit/virt-edit.pod:99 ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:139 ../tools/virt-list-filesystems.pl:81 ../tools/virt-list-partitions.pl:82 ../tools/virt-tar.pl:131 ../tools/virt-win-reg.pl:132
 msgid ""
 "If using libvirt, connect to the given I<URI>.  If omitted, then we connect "
 "to the default libvirt hypervisor."
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:113 ../cat/virt-cat.pod:88 ../cat/virt-filesystems.pod:132 ../cat/virt-ls.pod:298 ../clone/virt-sysprep.pod:66 ../df/virt-df.pod:85 ../rescue/virt-rescue.pod:114
+#: ../align/virt-alignment-scan.pod:113 ../cat/virt-cat.pod:88 ../cat/virt-filesystems.pod:132 ../cat/virt-ls.pod:298 ../clone/virt-sysprep.pod:66 ../df/virt-df.pod:85 ../rescue/virt-rescue.pod:142
 msgid ""
 "If you specify guest block devices directly (I<-a>), then libvirt is not "
 "used at all."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:116 ../cat/virt-cat.pod:91 ../cat/virt-filesystems.pod:141 ../cat/virt-ls.pod:307 ../clone/virt-sysprep.pod:69 ../df/virt-df.pod:94 ../edit/virt-edit.pod:105 ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:117
+#: ../align/virt-alignment-scan.pod:116 ../cat/virt-cat.pod:91 ../cat/virt-filesystems.pod:141 ../cat/virt-ls.pod:307 ../clone/virt-sysprep.pod:69 ../df/virt-df.pod:94 ../edit/virt-edit.pod:105 ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:145
 msgid "B<-d> guest"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:118 ../cat/virt-cat.pod:93 ../cat/virt-filesystems.pod:143 ../cat/virt-ls.pod:309 ../clone/virt-sysprep.pod:71 ../df/virt-df.pod:96 ../edit/virt-edit.pod:107 ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:119
+#: ../align/virt-alignment-scan.pod:118 ../cat/virt-cat.pod:93 ../cat/virt-filesystems.pod:143 ../cat/virt-ls.pod:309 ../clone/virt-sysprep.pod:71 ../df/virt-df.pod:96 ../edit/virt-edit.pod:107 ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:147
 msgid "B<--domain> guest"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:120 ../cat/virt-cat.pod:95 ../cat/virt-filesystems.pod:145 ../cat/virt-ls.pod:311 ../clone/virt-sysprep.pod:73 ../df/virt-df.pod:98 ../edit/virt-edit.pod:109 ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:121
+#: ../align/virt-alignment-scan.pod:120 ../cat/virt-cat.pod:95 ../cat/virt-filesystems.pod:145 ../cat/virt-ls.pod:311 ../clone/virt-sysprep.pod:73 ../df/virt-df.pod:98 ../edit/virt-edit.pod:109 ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:149
 msgid ""
 "Add all the disks from the named libvirt guest.  Domain UUIDs can be used "
 "instead of names."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:123 ../cat/virt-cat.pod:105 ../cat/virt-filesystems.pod:170 ../cat/virt-ls.pod:328 ../clone/virt-sysprep.pod:95 ../df/virt-df.pod:101 ../fish/guestfish.pod:233 ../fuse/guestmount.pod:142 ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:124
+#: ../align/virt-alignment-scan.pod:123 ../cat/virt-cat.pod:105 ../cat/virt-filesystems.pod:170 ../cat/virt-ls.pod:328 ../clone/virt-sysprep.pod:95 ../df/virt-df.pod:101 ../fish/guestfish.pod:233 ../fuse/guestmount.pod:142 ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:152
 msgid "B<--format=raw|qcow2|..>"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:125 ../cat/virt-cat.pod:107 ../cat/virt-filesystems.pod:172 ../cat/virt-ls.pod:330 ../clone/virt-sysprep.pod:97 ../df/virt-df.pod:103 ../edit/virt-edit.pod:134 ../fish/guestfish.pod:235 ../fuse/guestmount.pod:144 ../inspector/virt-inspector.pod:101 ../rescue/virt-rescue.pod:126
+#: ../align/virt-alignment-scan.pod:125 ../cat/virt-cat.pod:107 ../cat/virt-filesystems.pod:172 ../cat/virt-ls.pod:330 ../clone/virt-sysprep.pod:97 ../df/virt-df.pod:103 ../edit/virt-edit.pod:134 ../fish/guestfish.pod:235 ../fuse/guestmount.pod:144 ../inspector/virt-inspector.pod:101 ../rescue/virt-rescue.pod:154
 msgid "B<--format>"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:127 ../cat/virt-cat.pod:109 ../cat/virt-filesystems.pod:174 ../cat/virt-ls.pod:332 ../clone/virt-sysprep.pod:99 ../df/virt-df.pod:105 ../edit/virt-edit.pod:136 ../fish/guestfish.pod:237 ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:128
+#: ../align/virt-alignment-scan.pod:127 ../cat/virt-cat.pod:109 ../cat/virt-filesystems.pod:174 ../cat/virt-ls.pod:332 ../clone/virt-sysprep.pod:99 ../df/virt-df.pod:105 ../edit/virt-edit.pod:136 ../fish/guestfish.pod:237 ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:156
 msgid ""
 "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 "
@@ -309,7 +309,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:132 ../cat/virt-cat.pod:114 ../cat/virt-filesystems.pod:179 ../cat/virt-ls.pod:337 ../clone/virt-sysprep.pod:104 ../df/virt-df.pod:110 ../edit/virt-edit.pod:141 ../fish/guestfish.pod:242 ../fish/guestfish.pod:673 ../inspector/virt-inspector.pod:336 ../rescue/virt-rescue.pod:133 ../src/guestfs.pod:2877
+#: ../align/virt-alignment-scan.pod:132 ../cat/virt-cat.pod:114 ../cat/virt-filesystems.pod:179 ../cat/virt-ls.pod:337 ../clone/virt-sysprep.pod:104 ../df/virt-df.pod:110 ../edit/virt-edit.pod:141 ../fish/guestfish.pod:242 ../fish/guestfish.pod:673 ../inspector/virt-inspector.pod:336 ../rescue/virt-rescue.pod:161 ../src/guestfs.pod:2877
 msgid "For example:"
 msgstr ""
 
@@ -322,7 +322,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:136 ../cat/virt-cat.pod:118 ../cat/virt-filesystems.pod:183 ../cat/virt-ls.pod:341 ../clone/virt-sysprep.pod:108 ../df/virt-df.pod:114 ../edit/virt-edit.pod:145 ../fish/guestfish.pod:246 ../rescue/virt-rescue.pod:137
+#: ../align/virt-alignment-scan.pod:136 ../cat/virt-cat.pod:118 ../cat/virt-filesystems.pod:183 ../cat/virt-ls.pod:341 ../clone/virt-sysprep.pod:108 ../df/virt-df.pod:114 ../edit/virt-edit.pod:145 ../fish/guestfish.pod:246 ../rescue/virt-rescue.pod:165
 msgid "forces raw format (no auto-detection) for C<disk.img>."
 msgstr ""
 
@@ -335,14 +335,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:140 ../cat/virt-cat.pod:122 ../cat/virt-filesystems.pod:187 ../cat/virt-ls.pod:345 ../clone/virt-sysprep.pod:112 ../df/virt-df.pod:118 ../edit/virt-edit.pod:149 ../fish/guestfish.pod:250 ../rescue/virt-rescue.pod:141
+#: ../align/virt-alignment-scan.pod:140 ../cat/virt-cat.pod:122 ../cat/virt-filesystems.pod:187 ../cat/virt-ls.pod:345 ../clone/virt-sysprep.pod:112 ../df/virt-df.pod:118 ../edit/virt-edit.pod:149 ../fish/guestfish.pod:250 ../rescue/virt-rescue.pod:169
 msgid ""
 "forces raw format (no auto-detection) for C<disk.img> and reverts to "
 "auto-detection for C<another.img>."
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:143 ../cat/virt-cat.pod:125 ../cat/virt-filesystems.pod:190 ../cat/virt-ls.pod:348 ../clone/virt-sysprep.pod:115 ../df/virt-df.pod:121 ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:144
+#: ../align/virt-alignment-scan.pod:143 ../cat/virt-cat.pod:125 ../cat/virt-filesystems.pod:190 ../cat/virt-ls.pod:348 ../clone/virt-sysprep.pod:115 ../df/virt-df.pod:121 ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:172
 msgid ""
 "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 "
@@ -367,42 +367,42 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:154 ../cat/virt-cat.pod:134 ../cat/virt-filesystems.pod:261 ../cat/virt-ls.pod:425 ../clone/virt-sysprep.pod:138 ../df/virt-df.pod:173 ../edit/virt-edit.pod:161 ../fish/guestfish.pod:390 ../fuse/guestmount.pod:266 ../inspector/virt-inspector.pod:119 ../rescue/virt-rescue.pod:182 ../sparsify/virt-sparsify.pod:159
+#: ../align/virt-alignment-scan.pod:154 ../cat/virt-cat.pod:134 ../cat/virt-filesystems.pod:261 ../cat/virt-ls.pod:425 ../clone/virt-sysprep.pod:138 ../df/virt-df.pod:173 ../edit/virt-edit.pod:161 ../fish/guestfish.pod:390 ../fuse/guestmount.pod:266 ../inspector/virt-inspector.pod:119 ../rescue/virt-rescue.pod:219 ../sparsify/virt-sparsify.pod:159
 msgid "B<-v>"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:156 ../cat/virt-cat.pod:136 ../cat/virt-filesystems.pod:263 ../cat/virt-ls.pod:427 ../clone/virt-sysprep.pod:140 ../df/virt-df.pod:175 ../edit/virt-edit.pod:163 ../fish/guestfish.pod:392 ../fuse/guestmount.pod:268 ../inspector/virt-inspector.pod:121 ../rescue/virt-rescue.pod:184 ../sparsify/virt-sparsify.pod:161
+#: ../align/virt-alignment-scan.pod:156 ../cat/virt-cat.pod:136 ../cat/virt-filesystems.pod:263 ../cat/virt-ls.pod:427 ../clone/virt-sysprep.pod:140 ../df/virt-df.pod:175 ../edit/virt-edit.pod:163 ../fish/guestfish.pod:392 ../fuse/guestmount.pod:268 ../inspector/virt-inspector.pod:121 ../rescue/virt-rescue.pod:221 ../sparsify/virt-sparsify.pod:161
 msgid "B<--verbose>"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:158 ../cat/virt-cat.pod:138 ../cat/virt-filesystems.pod:265 ../cat/virt-ls.pod:429 ../clone/virt-sysprep.pod:142 ../df/virt-df.pod:177 ../edit/virt-edit.pod:165 ../inspector/virt-inspector.pod:123 ../rescue/virt-rescue.pod:186 ../sparsify/virt-sparsify.pod:163
+#: ../align/virt-alignment-scan.pod:158 ../cat/virt-cat.pod:138 ../cat/virt-filesystems.pod:265 ../cat/virt-ls.pod:429 ../clone/virt-sysprep.pod:142 ../df/virt-df.pod:177 ../edit/virt-edit.pod:165 ../inspector/virt-inspector.pod:123 ../rescue/virt-rescue.pod:223 ../sparsify/virt-sparsify.pod:163
 msgid "Enable verbose messages for debugging."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:160 ../cat/virt-cat.pod:140 ../cat/virt-filesystems.pod:267 ../cat/virt-ls.pod:431 ../clone/virt-sysprep.pod:144 ../df/virt-df.pod:179 ../edit/virt-edit.pod:167 ../fish/guestfish.pod:397 ../fuse/guestmount.pod:272 ../inspector/virt-inspector.pod:125 ../rescue/virt-rescue.pod:188 ../resize/virt-resize.pod:561 ../sparsify/virt-sparsify.pod:165
+#: ../align/virt-alignment-scan.pod:160 ../cat/virt-cat.pod:140 ../cat/virt-filesystems.pod:267 ../cat/virt-ls.pod:431 ../clone/virt-sysprep.pod:144 ../df/virt-df.pod:179 ../edit/virt-edit.pod:167 ../fish/guestfish.pod:397 ../fuse/guestmount.pod:272 ../inspector/virt-inspector.pod:125 ../rescue/virt-rescue.pod:225 ../resize/virt-resize.pod:561 ../sparsify/virt-sparsify.pod:165
 msgid "B<-V>"
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:162 ../cat/virt-cat.pod:142 ../cat/virt-filesystems.pod:269 ../cat/virt-ls.pod:433 ../clone/virt-sysprep.pod:146 ../df/virt-df.pod:181 ../edit/virt-edit.pod:169 ../fish/guestfish.pod:399 ../fuse/guestmount.pod:274 ../inspector/virt-inspector.pod:127 ../rescue/virt-rescue.pod:190 ../resize/virt-resize.pod:563 ../sparsify/virt-sparsify.pod:167 ../tools/virt-list-filesystems.pl:69 ../tools/virt-list-partitions.pl:70 ../tools/virt-make-fs.pl:169 ../tools/v [...]
+#: ../align/virt-alignment-scan.pod:162 ../cat/virt-cat.pod:142 ../cat/virt-filesystems.pod:269 ../cat/virt-ls.pod:433 ../clone/virt-sysprep.pod:146 ../df/virt-df.pod:181 ../edit/virt-edit.pod:169 ../fish/guestfish.pod:399 ../fuse/guestmount.pod:274 ../inspector/virt-inspector.pod:127 ../rescue/virt-rescue.pod:227 ../resize/virt-resize.pod:563 ../sparsify/virt-sparsify.pod:167 ../tools/virt-list-filesystems.pl:69 ../tools/virt-list-partitions.pl:70 ../tools/virt-make-fs.pl:169 ../tools/v [...]
 msgid "B<--version>"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:164 ../cat/virt-cat.pod:144 ../cat/virt-filesystems.pod:271 ../cat/virt-ls.pod:435 ../clone/virt-sysprep.pod:148 ../df/virt-df.pod:183 ../edit/virt-edit.pod:171 ../inspector/virt-inspector.pod:129 ../rescue/virt-rescue.pod:192 ../resize/virt-resize.pod:565 ../sparsify/virt-sparsify.pod:169 ../tools/virt-list-filesystems.pl:71 ../tools/virt-list-partitions.pl:72 ../tools/virt-make-fs.pl:171 ../tools/virt-tar.pl:121 ../tools/virt-win-reg.pl:114
+#: ../align/virt-alignment-scan.pod:164 ../cat/virt-cat.pod:144 ../cat/virt-filesystems.pod:271 ../cat/virt-ls.pod:435 ../clone/virt-sysprep.pod:148 ../df/virt-df.pod:183 ../edit/virt-edit.pod:171 ../inspector/virt-inspector.pod:129 ../rescue/virt-rescue.pod:229 ../resize/virt-resize.pod:565 ../sparsify/virt-sparsify.pod:169 ../tools/virt-list-filesystems.pl:71 ../tools/virt-list-partitions.pl:72 ../tools/virt-make-fs.pl:171 ../tools/virt-tar.pl:121 ../tools/virt-win-reg.pl:114
 msgid "Display version number and exit."
 msgstr ""
 
 #. type: =item
-#: ../align/virt-alignment-scan.pod:166 ../cat/virt-cat.pod:146 ../cat/virt-filesystems.pod:281 ../cat/virt-ls.pod:437 ../clone/virt-sysprep.pod:150 ../df/virt-df.pod:185 ../edit/virt-edit.pod:173 ../fish/guestfish.pod:412 ../fuse/guestmount.pod:287 ../inspector/virt-inspector.pod:131 ../rescue/virt-rescue.pod:203 ../sparsify/virt-sparsify.pod:171 ../tools/virt-tar.pl:158
+#: ../align/virt-alignment-scan.pod:166 ../cat/virt-cat.pod:146 ../cat/virt-filesystems.pod:281 ../cat/virt-ls.pod:437 ../clone/virt-sysprep.pod:150 ../df/virt-df.pod:185 ../edit/virt-edit.pod:173 ../fish/guestfish.pod:412 ../fuse/guestmount.pod:287 ../inspector/virt-inspector.pod:131 ../rescue/virt-rescue.pod:240 ../sparsify/virt-sparsify.pod:171 ../tools/virt-tar.pl:158
 msgid "B<-x>"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:168 ../cat/virt-cat.pod:148 ../cat/virt-filesystems.pod:283 ../cat/virt-ls.pod:439 ../clone/virt-sysprep.pod:152 ../df/virt-df.pod:187 ../edit/virt-edit.pod:175 ../inspector/virt-inspector.pod:133 ../rescue/virt-rescue.pod:205 ../sparsify/virt-sparsify.pod:173
+#: ../align/virt-alignment-scan.pod:168 ../cat/virt-cat.pod:148 ../cat/virt-filesystems.pod:283 ../cat/virt-ls.pod:439 ../clone/virt-sysprep.pod:152 ../df/virt-df.pod:187 ../edit/virt-edit.pod:175 ../inspector/virt-inspector.pod:133 ../rescue/virt-rescue.pod:242 ../sparsify/virt-sparsify.pod:173
 msgid "Enable tracing of libguestfs API calls."
 msgstr ""
 
@@ -673,12 +673,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:311 ../cat/virt-cat.pod:231 ../cat/virt-filesystems.pod:373 ../cat/virt-ls.pod:483 ../clone/virt-sysprep.pod:475 ../df/virt-df.pod:215 ../edit/virt-edit.pod:342 ../inspector/virt-inspector.pod:352 ../rescue/virt-rescue.pod:266 ../resize/virt-resize.pod:676 ../tools/virt-list-filesystems.pl:188 ../tools/virt-list-partitions.pl:258 ../tools/virt-make-fs.pl:550 ../tools/virt-tar.pl:289 ../tools/virt-win-reg.pl:744
+#: ../align/virt-alignment-scan.pod:311 ../cat/virt-cat.pod:231 ../cat/virt-filesystems.pod:373 ../cat/virt-ls.pod:483 ../clone/virt-sysprep.pod:475 ../df/virt-df.pod:215 ../edit/virt-edit.pod:342 ../inspector/virt-inspector.pod:352 ../rescue/virt-rescue.pod:303 ../resize/virt-resize.pod:676 ../tools/virt-list-filesystems.pl:188 ../tools/virt-list-partitions.pl:258 ../tools/virt-make-fs.pl:550 ../tools/virt-tar.pl:289 ../tools/virt-win-reg.pl:744
 msgid "SHELL QUOTING"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:313 ../cat/virt-cat.pod:233 ../cat/virt-filesystems.pod:375 ../cat/virt-ls.pod:485 ../clone/virt-sysprep.pod:477 ../df/virt-df.pod:217 ../edit/virt-edit.pod:344 ../inspector/virt-inspector.pod:354 ../rescue/virt-rescue.pod:268 ../resize/virt-resize.pod:678 ../tools/virt-list-filesystems.pl:190 ../tools/virt-list-partitions.pl:260 ../tools/virt-make-fs.pl:552 ../tools/virt-tar.pl:291 ../tools/virt-win-reg.pl:752
+#: ../align/virt-alignment-scan.pod:313 ../cat/virt-cat.pod:233 ../cat/virt-filesystems.pod:375 ../cat/virt-ls.pod:485 ../clone/virt-sysprep.pod:477 ../df/virt-df.pod:217 ../edit/virt-edit.pod:344 ../inspector/virt-inspector.pod:354 ../rescue/virt-rescue.pod:305 ../resize/virt-resize.pod:678 ../tools/virt-list-filesystems.pl:190 ../tools/virt-list-partitions.pl:260 ../tools/virt-make-fs.pl:552 ../tools/virt-tar.pl:291 ../tools/virt-win-reg.pl:752
 msgid ""
 "Libvirt guest names can contain arbitrary characters, some of which have "
 "meaning to the shell such as C<#> and space.  You may need to quote or "
@@ -746,7 +746,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:352 ../cat/virt-cat.pod:243 ../cat/virt-filesystems.pod:385 ../cat/virt-ls.pod:495 ../clone/virt-sysprep.pod:486 ../df/virt-df.pod:227 ../edit/virt-edit.pod:354 ../erlang/examples/guestfs-erlang.pod:97 ../examples/guestfs-examples.pod:33 ../examples/guestfs-recipes.pod:384 ../fish/guestfish.pod:1268 ../fish/virt-copy-in.pod:50 ../fish/virt-copy-out.pod:39 ../fish/virt-tar-in.pod:47 ../fish/virt-tar-out.pod:41 ../fuse/guestmount.pod:317 ../inspector/vir [...]
+#: ../align/virt-alignment-scan.pod:352 ../cat/virt-cat.pod:243 ../cat/virt-filesystems.pod:385 ../cat/virt-ls.pod:495 ../clone/virt-sysprep.pod:486 ../df/virt-df.pod:227 ../edit/virt-edit.pod:354 ../erlang/examples/guestfs-erlang.pod:97 ../examples/guestfs-examples.pod:33 ../examples/guestfs-recipes.pod:384 ../fish/guestfish.pod:1268 ../fish/virt-copy-in.pod:50 ../fish/virt-copy-out.pod:39 ../fish/virt-tar-in.pod:47 ../fish/virt-tar-out.pod:41 ../fuse/guestmount.pod:317 ../inspector/vir [...]
 msgid "SEE ALSO"
 msgstr ""
 
@@ -758,17 +758,17 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:361 ../cat/virt-cat.pod:252 ../cat/virt-filesystems.pod:396 ../cat/virt-ls.pod:507 ../clone/virt-sysprep.pod:501 ../df/virt-df.pod:235 ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:296 ../resize/virt-resize.pod:711 ../sparsify/virt-sparsify.pod:264 ../tools/virt-list-filesystems.pl:208 ../tools/virt-list-partitions.pl:277 ../tools/virt-make-fs.pl:582 ../tools/virt-tar.pl:311 ../tools/virt-win-reg.pl:783
+#: ../align/virt-alignment-scan.pod:361 ../cat/virt-cat.pod:252 ../cat/virt-filesystems.pod:396 ../cat/virt-ls.pod:507 ../clone/virt-sysprep.pod:501 ../df/virt-df.pod:235 ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:334 ../resize/virt-resize.pod:711 ../sparsify/virt-sparsify.pod:264 ../tools/virt-list-filesystems.pl:208 ../tools/virt-list-partitions.pl:277 ../tools/virt-make-fs.pl:582 ../tools/virt-tar.pl:311 ../tools/virt-win-reg.pl:783
 msgid "AUTHOR"
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:363 ../cat/virt-cat.pod:254 ../cat/virt-filesystems.pod:398 ../cat/virt-ls.pod:509 ../clone/virt-sysprep.pod:503 ../df/virt-df.pod:237 ../edit/virt-edit.pod:370 ../inspector/virt-inspector.pod:395 ../rescue/virt-rescue.pod:298 ../resize/virt-resize.pod:713 ../sparsify/virt-sparsify.pod:266 ../tools/virt-list-filesystems.pl:210 ../tools/virt-list-partitions.pl:279 ../tools/virt-make-fs.pl:584 ../tools/virt-tar.pl:313 ../tools/virt-win-reg.pl:785
+#: ../align/virt-alignment-scan.pod:363 ../cat/virt-cat.pod:254 ../cat/virt-filesystems.pod:398 ../cat/virt-ls.pod:509 ../clone/virt-sysprep.pod:503 ../df/virt-df.pod:237 ../edit/virt-edit.pod:370 ../inspector/virt-inspector.pod:395 ../rescue/virt-rescue.pod:336 ../resize/virt-resize.pod:713 ../sparsify/virt-sparsify.pod:266 ../tools/virt-list-filesystems.pl:210 ../tools/virt-list-partitions.pl:279 ../tools/virt-make-fs.pl:584 ../tools/virt-tar.pl:313 ../tools/virt-win-reg.pl:785
 msgid "Richard W.M. Jones L<http://people.redhat.com/~rjones/>"
 msgstr ""
 
 #. type: =head1
-#: ../align/virt-alignment-scan.pod:365 ../cat/virt-cat.pod:256 ../cat/virt-filesystems.pod:400 ../cat/virt-ls.pod:511 ../clone/virt-sysprep.pod:505 ../df/virt-df.pod:239 ../edit/virt-edit.pod:372 ../erlang/examples/guestfs-erlang.pod:114 ../examples/guestfs-examples.pod:49 ../examples/guestfs-recipes.pod:401 ../fish/guestfish.pod:1300 ../fish/virt-copy-in.pod:64 ../fish/virt-copy-out.pod:53 ../fish/virt-tar-in.pod:62 ../fish/virt-tar-out.pod:55 ../fuse/guestmount.pod:332 ../inspector/vi [...]
+#: ../align/virt-alignment-scan.pod:365 ../cat/virt-cat.pod:256 ../cat/virt-filesystems.pod:400 ../cat/virt-ls.pod:511 ../clone/virt-sysprep.pod:505 ../df/virt-df.pod:239 ../edit/virt-edit.pod:372 ../erlang/examples/guestfs-erlang.pod:114 ../examples/guestfs-examples.pod:49 ../examples/guestfs-recipes.pod:401 ../fish/guestfish.pod:1300 ../fish/virt-copy-in.pod:64 ../fish/virt-copy-out.pod:53 ../fish/virt-tar-in.pod:62 ../fish/virt-tar-out.pod:55 ../fuse/guestmount.pod:332 ../inspector/vi [...]
 msgid "COPYRIGHT"
 msgstr ""
 
@@ -778,7 +778,7 @@ msgid "Copyright (C) 2011 Red Hat Inc."
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:369 ../cat/virt-cat.pod:260 ../cat/virt-filesystems.pod:404 ../cat/virt-ls.pod:515 ../clone/virt-sysprep.pod:509 ../df/virt-df.pod:243 ../edit/virt-edit.pod:376 ../fish/guestfish.pod:1305 ../fish/virt-copy-in.pod:69 ../fish/virt-copy-out.pod:58 ../fish/virt-tar-in.pod:67 ../fish/virt-tar-out.pod:60 ../fuse/guestmount.pod:337 ../inspector/virt-inspector.pod:407 ../rescue/virt-rescue.pod:304 ../resize/virt-resize.pod:719 ../sparsify/virt-sparsify.pod:272 [...]
+#: ../align/virt-alignment-scan.pod:369 ../cat/virt-cat.pod:260 ../cat/virt-filesystems.pod:404 ../cat/virt-ls.pod:515 ../clone/virt-sysprep.pod:509 ../df/virt-df.pod:243 ../edit/virt-edit.pod:376 ../fish/guestfish.pod:1305 ../fish/virt-copy-in.pod:69 ../fish/virt-copy-out.pod:58 ../fish/virt-tar-in.pod:67 ../fish/virt-tar-out.pod:60 ../fuse/guestmount.pod:337 ../inspector/virt-inspector.pod:407 ../rescue/virt-rescue.pod:342 ../resize/virt-resize.pod:719 ../sparsify/virt-sparsify.pod:272 [...]
 msgid ""
 "This program is free software; you can redistribute it and/or modify it "
 "under the terms of the GNU General Public License as published by the Free "
@@ -787,7 +787,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:374 ../cat/virt-cat.pod:265 ../cat/virt-filesystems.pod:409 ../cat/virt-ls.pod:520 ../clone/virt-sysprep.pod:514 ../df/virt-df.pod:248 ../edit/virt-edit.pod:381 ../fish/guestfish.pod:1310 ../fish/virt-copy-in.pod:74 ../fish/virt-copy-out.pod:63 ../fish/virt-tar-in.pod:72 ../fish/virt-tar-out.pod:65 ../fuse/guestmount.pod:342 ../inspector/virt-inspector.pod:412 ../rescue/virt-rescue.pod:309 ../resize/virt-resize.pod:724 ../sparsify/virt-sparsify.pod:277 [...]
+#: ../align/virt-alignment-scan.pod:374 ../cat/virt-cat.pod:265 ../cat/virt-filesystems.pod:409 ../cat/virt-ls.pod:520 ../clone/virt-sysprep.pod:514 ../df/virt-df.pod:248 ../edit/virt-edit.pod:381 ../fish/guestfish.pod:1310 ../fish/virt-copy-in.pod:74 ../fish/virt-copy-out.pod:63 ../fish/virt-tar-in.pod:72 ../fish/virt-tar-out.pod:65 ../fuse/guestmount.pod:342 ../inspector/virt-inspector.pod:412 ../rescue/virt-rescue.pod:347 ../resize/virt-resize.pod:724 ../sparsify/virt-sparsify.pod:277 [...]
 msgid ""
 "This program is distributed in the hope that it will be useful, but WITHOUT "
 "ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
@@ -796,7 +796,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../align/virt-alignment-scan.pod:379 ../cat/virt-cat.pod:270 ../cat/virt-filesystems.pod:414 ../cat/virt-ls.pod:525 ../clone/virt-sysprep.pod:519 ../df/virt-df.pod:253 ../edit/virt-edit.pod:386 ../fish/guestfish.pod:1315 ../fish/virt-copy-in.pod:79 ../fish/virt-copy-out.pod:68 ../fish/virt-tar-in.pod:77 ../fish/virt-tar-out.pod:70 ../fuse/guestmount.pod:347 ../inspector/virt-inspector.pod:417 ../rescue/virt-rescue.pod:314 ../resize/virt-resize.pod:729 ../sparsify/virt-sparsify.pod:282 [...]
+#: ../align/virt-alignment-scan.pod:379 ../cat/virt-cat.pod:270 ../cat/virt-filesystems.pod:414 ../cat/virt-ls.pod:525 ../clone/virt-sysprep.pod:519 ../df/virt-df.pod:253 ../edit/virt-edit.pod:386 ../fish/guestfish.pod:1315 ../fish/virt-copy-in.pod:79 ../fish/virt-copy-out.pod:68 ../fish/virt-tar-in.pod:77 ../fish/virt-tar-out.pod:70 ../fuse/guestmount.pod:347 ../inspector/virt-inspector.pod:417 ../rescue/virt-rescue.pod:352 ../resize/virt-resize.pod:729 ../sparsify/virt-sparsify.pod:282 [...]
 msgid ""
 "You should have received a copy of the GNU General Public License along with "
 "this program; if not, write to the Free Software Foundation, Inc., 675 Mass "
@@ -955,7 +955,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-cat.pod:74 ../cat/virt-filesystems.pod:103 ../cat/virt-ls.pod:273 ../df/virt-df.pod:71 ../edit/virt-edit.pod:74 ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:96
+#: ../cat/virt-cat.pod:74 ../cat/virt-filesystems.pod:103 ../cat/virt-ls.pod:273 ../df/virt-df.pod:71 ../edit/virt-edit.pod:74 ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:124
 msgid ""
 "Add I<file> which should be a disk image from a virtual machine.  If the "
 "virtual machine has multiple block devices, you must supply all of them with "
@@ -1005,7 +1005,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../cat/virt-cat.pod:152 ../cat/virt-ls.pod:443 ../edit/virt-edit.pod:179 ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:209
+#: ../cat/virt-cat.pod:152 ../cat/virt-ls.pod:443 ../edit/virt-edit.pod:179 ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:246
 msgid "OLD-STYLE COMMAND LINE ARGUMENTS"
 msgstr ""
 
@@ -1023,7 +1023,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-cat.pod:158 ../cat/virt-ls.pod:449 ../edit/virt-edit.pod:185 ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:215
+#: ../cat/virt-cat.pod:158 ../cat/virt-ls.pod:449 ../edit/virt-edit.pod:185 ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:252
 msgid "or"
 msgstr ""
 
@@ -1036,14 +1036,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-cat.pod:162 ../cat/virt-ls.pod:453 ../edit/virt-edit.pod:189 ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:219
+#: ../cat/virt-cat.pod:162 ../cat/virt-ls.pod:453 ../edit/virt-edit.pod:189 ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:256
 msgid ""
 "whereas in this version you should use I<-a> or I<-d> respectively to avoid "
 "the confusing case where a disk image might have the same name as a guest."
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-cat.pod:166 ../cat/virt-ls.pod:457 ../edit/virt-edit.pod:193 ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:223
+#: ../cat/virt-cat.pod:166 ../cat/virt-ls.pod:457 ../edit/virt-edit.pod:193 ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:260
 msgid "For compatibility the old style is still supported."
 msgstr ""
 
@@ -1854,7 +1854,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:13
+#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:15
 msgid "Old style:"
 msgstr ""
 
@@ -2578,7 +2578,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-ls.pod:513 ../df/virt-df.pod:241 ../edit/virt-edit.pod:374 ../rescue/virt-rescue.pod:302
+#: ../cat/virt-ls.pod:513 ../df/virt-df.pod:241 ../edit/virt-edit.pod:374 ../rescue/virt-rescue.pod:340
 msgid "Copyright (C) 2009-2011 Red Hat Inc."
 msgstr ""
 
@@ -3641,7 +3641,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../edit/virt-edit.pod:21 ../fish/guestfish.pod:23 ../fish/virt-copy-in.pod:13 ../fish/virt-tar-in.pod:15 ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:19 ../tools/virt-tar.pl:64 ../tools/virt-win-reg.pl:51
+#: ../edit/virt-edit.pod:21 ../fish/guestfish.pod:23 ../fish/virt-copy-in.pod:13 ../fish/virt-tar-in.pod:15 ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:21 ../tools/virt-tar.pl:64 ../tools/virt-win-reg.pl:51
 msgid "WARNING"
 msgstr ""
 
@@ -4100,7 +4100,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../edit/virt-edit.pod:329 ../fish/guestfish.pod:1119 ../rescue/virt-rescue.pod:261 ../sparsify/virt-sparsify.pod:232 ../src/guestfs.pod:3209 ../test-tool/libguestfs-test-tool.pod:95
+#: ../edit/virt-edit.pod:329 ../fish/guestfish.pod:1119 ../rescue/virt-rescue.pod:298 ../sparsify/virt-sparsify.pod:232 ../src/guestfs.pod:3209 ../test-tool/libguestfs-test-tool.pod:95
 msgid "ENVIRONMENT VARIABLES"
 msgstr ""
 
@@ -18164,12 +18164,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:369 ../fuse/guestmount.pod:248 ../rescue/virt-rescue.pod:161
+#: ../fish/guestfish.pod:369 ../fuse/guestmount.pod:248 ../rescue/virt-rescue.pod:189
 msgid "B<-r>"
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:371 ../fuse/guestmount.pod:250 ../rescue/virt-rescue.pod:163
+#: ../fish/guestfish.pod:371 ../fuse/guestmount.pod:250 ../rescue/virt-rescue.pod:191
 msgid "B<--ro>"
 msgstr ""
 
@@ -18181,7 +18181,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:167
+#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:195
 msgid ""
 "The option must always be used if the disk image or virtual machine might be "
 "running, and is generally recommended in cases where you don't need write "
@@ -18202,7 +18202,7 @@ msgid "See also L</OPENING DISKS FOR READ AND WRITE> below."
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:386 ../fuse/guestmount.pod:262 ../rescue/virt-rescue.pod:173
+#: ../fish/guestfish.pod:386 ../fuse/guestmount.pod:262 ../rescue/virt-rescue.pod:201
 msgid "B<--selinux>"
 msgstr ""
 
@@ -18224,12 +18224,12 @@ msgid "Display the guestfish / libguestfs version number and exit."
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:403 ../fuse/guestmount.pod:278 ../rescue/virt-rescue.pod:194
+#: ../fish/guestfish.pod:403 ../fuse/guestmount.pod:278 ../rescue/virt-rescue.pod:231
 msgid "B<-w>"
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:405 ../fuse/guestmount.pod:280 ../rescue/virt-rescue.pod:196
+#: ../fish/guestfish.pod:405 ../fuse/guestmount.pod:280 ../rescue/virt-rescue.pod:233
 msgid "B<--rw>"
 msgstr ""
 
@@ -20014,22 +20014,22 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../fish/guestfish.pod:1209 ../fuse/guestmount.pod:297 ../rescue/virt-rescue.pod:273
+#: ../fish/guestfish.pod:1209 ../fuse/guestmount.pod:297 ../rescue/virt-rescue.pod:310
 msgid "FILES"
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:1213 ../fuse/guestmount.pod:301 ../rescue/virt-rescue.pod:277
+#: ../fish/guestfish.pod:1213 ../fuse/guestmount.pod:301 ../rescue/virt-rescue.pod:314
 msgid "$HOME/.libguestfs-tools.rc"
 msgstr ""
 
 #. type: =item
-#: ../fish/guestfish.pod:1215 ../fuse/guestmount.pod:303 ../rescue/virt-rescue.pod:279
+#: ../fish/guestfish.pod:1215 ../fuse/guestmount.pod:303 ../rescue/virt-rescue.pod:316
 msgid "/etc/libguestfs-tools.conf"
 msgstr ""
 
 #. type: textblock
-#: ../fish/guestfish.pod:1217 ../fuse/guestmount.pod:305 ../rescue/virt-rescue.pod:281
+#: ../fish/guestfish.pod:1217 ../fuse/guestmount.pod:305 ../rescue/virt-rescue.pod:318
 msgid ""
 "This configuration file controls the default read-only or read-write mode "
 "(I<--ro> or I<--rw>)."
@@ -20628,7 +20628,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:68 ../resize/virt-resize.pod:621
+#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:96 ../resize/virt-resize.pod:621
 msgid "NOTES"
 msgstr ""
 
@@ -20845,7 +20845,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:171
+#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:199
 msgid "See also L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr ""
 
@@ -20865,7 +20865,7 @@ msgid "Display the program version and exit."
 msgstr ""
 
 #. type: textblock
-#: ../fuse/guestmount.pod:285 ../fuse/guestmount.pod:308 ../rescue/virt-rescue.pod:201 ../rescue/virt-rescue.pod:284
+#: ../fuse/guestmount.pod:285 ../fuse/guestmount.pod:308 ../rescue/virt-rescue.pod:238 ../rescue/virt-rescue.pod:321
 msgid "See L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr ""
 
@@ -21828,10 +21828,10 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:15
+#: ../rescue/virt-rescue.pod:13
 #, no-wrap
 msgid ""
-" virt-rescue [--options] domname\n"
+" virt-rescue --suggest (-d domname | -a disk.img ...)\n"
 "\n"
 msgstr ""
 
@@ -21839,12 +21839,20 @@ msgstr ""
 #: ../rescue/virt-rescue.pod:17
 #, no-wrap
 msgid ""
+" virt-rescue [--options] domname\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:19
+#, no-wrap
+msgid ""
 " virt-rescue [--options] disk.img [disk.img ...]\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:21
+#: ../rescue/virt-rescue.pod:23
 msgid ""
 "You must I<not> use C<virt-rescue> on live virtual machines.  Doing so will "
 "probably result in disk corruption in the VM.  C<virt-rescue> tries to stop "
@@ -21852,7 +21860,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:25
+#: ../rescue/virt-rescue.pod:27
 msgid ""
 "However if you use the I<--ro> (read only) option, then you can attach a "
 "shell to a live virtual machine.  The results might be strange or "
@@ -21860,7 +21868,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:31
+#: ../rescue/virt-rescue.pod:33
 msgid ""
 "virt-rescue is like a Rescue CD, but for virtual machines, and without the "
 "need for a CD.  virt-rescue gives you a rescue shell and some simple "
@@ -21869,14 +21877,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:36
+#: ../rescue/virt-rescue.pod:38
 msgid ""
 "You can run virt-rescue on any virtual machine known to libvirt, or directly "
 "on disk image(s):"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:39
+#: ../rescue/virt-rescue.pod:41
 #, no-wrap
 msgid ""
 " virt-rescue -d GuestName\n"
@@ -21884,7 +21892,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:41
+#: ../rescue/virt-rescue.pod:43
 #, no-wrap
 msgid ""
 " virt-rescue --ro -a /path/to/disk.img\n"
@@ -21892,7 +21900,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:43
+#: ../rescue/virt-rescue.pod:45
 #, no-wrap
 msgid ""
 " virt-rescue -a /dev/sdc\n"
@@ -21900,12 +21908,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:45
+#: ../rescue/virt-rescue.pod:47
 msgid "For live VMs you I<must> use the --ro option."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:47
+#: ../rescue/virt-rescue.pod:49
 msgid ""
 "When you run virt-rescue on a virtual machine or disk image, you are placed "
 "in an interactive bash shell where you can use many ordinary Linux "
@@ -21915,34 +21923,97 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:54
+#: ../rescue/virt-rescue.pod:56
 msgid ""
-"In the example below, we list logical volumes, then choose one to mount "
-"under C</sysroot>:"
+"You can get virt-rescue to suggest mount commands for you by using the "
+"I<--suggest> option (in another terminal):"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:57
+#: ../rescue/virt-rescue.pod:59
+#, no-wrap
+msgid ""
+" $ virt-rescue --suggest -d Fedora15\n"
+" Inspecting the virtual machine or disk image ...\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:62
+#, no-wrap
+msgid ""
+" This disk contains one or more operating systems.  You can use these\n"
+" mount commands in virt-rescue (at the ><rescue> prompt) to mount the\n"
+" filesystems.\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:66
+#, no-wrap
+msgid ""
+" # /dev/vg_f15x32/lv_root is the root of a linux operating system\n"
+" # type: linux, distro: fedora, version: 15.0\n"
+" # Fedora release 15 (Lovelock)\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:70
+#, no-wrap
+msgid ""
+" mount /dev/vg_f15x32/lv_root /sysroot/\n"
+" mount /dev/vda1 /sysroot/boot\n"
+" mount --bind /dev /sysroot/dev\n"
+" mount --bind /dev/pts /sysroot/dev/pts\n"
+" mount --bind /proc /sysroot/proc\n"
+" mount --bind /sys /sysroot/sys\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:77
+msgid ""
+"Another way is to list the logical volumes (with L<lvs(8)>) and partitions "
+"(with L<parted(8)>) and mount them by hand:"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:80
 #, no-wrap
 msgid ""
 " ><rescue> lvs\n"
 " LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert\n"
-" lv_root vg_f11x64 -wi-a-   8.83G\n"
-" lv_swap vg_f11x64 -wi-a- 992.00M\n"
-" ><rescue> mount /dev/vg_f11x64/lv_root /sysroot\n"
+" lv_root vg_f15x32 -wi-a-   8.83G\n"
+" lv_swap vg_f15x32 -wi-a- 992.00M\n"
+" ><rescue> mount /dev/vg_f15x32/lv_root /sysroot\n"
+" ><rescue> mount /dev/vda1 /sysroot/boot\n"
 " ><rescue> ls /sysroot\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:64
+#: ../rescue/virt-rescue.pod:88
+msgid "Another command to list available filesystems is L<virt-filesystems(1)>."
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:91
 msgid ""
-"If you don't know what filesystems are available on the virtual machine then "
-"you can use commands such as L<parted(8)> and L<lvs(8)> to find out."
+"To run commands in a Linux guest (for example, grub), you should chroot into "
+"the /sysroot directory first:"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:94
+#, no-wrap
+msgid ""
+" ><rescue> chroot /sysroot\n"
+"\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:70
+#: ../rescue/virt-rescue.pod:98
 msgid ""
 "Virt-rescue can be used on I<any> disk image file or device, not just a "
 "virtual machine.  For example you can use it on a blank file if you want to "
@@ -21952,14 +22023,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:76
+#: ../rescue/virt-rescue.pod:104
 msgid ""
 "Virt-rescue does not require root.  You only need to run it as root if you "
 "need root to open the disk image."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:79
+#: ../rescue/virt-rescue.pod:107
 msgid ""
 "This tool is just designed for quick interactive hacking on a virtual "
 "machine.  For more structured access to a virtual machine disk image, you "
@@ -21968,17 +22039,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:103
+#: ../rescue/virt-rescue.pod:131
 msgid "B<--append kernelopts>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:105
+#: ../rescue/virt-rescue.pod:133
 msgid "Pass additional options to the rescue kernel."
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:135
+#: ../rescue/virt-rescue.pod:163
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img\n"
@@ -21986,7 +22057,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:139
+#: ../rescue/virt-rescue.pod:167
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img --format -a another.img\n"
@@ -21994,17 +22065,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:148
+#: ../rescue/virt-rescue.pod:176
 msgid "B<-m MB>"
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:150
+#: ../rescue/virt-rescue.pod:178
 msgid "B<--memsize MB>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:152
+#: ../rescue/virt-rescue.pod:180
 msgid ""
 "Change the amount of memory allocated to the rescue system.  The default is "
 "set by libguestfs and is small but adequate for running system tools.  The "
@@ -22013,51 +22084,71 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:157
+#: ../rescue/virt-rescue.pod:185
 msgid "B<--network>"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:159
+#: ../rescue/virt-rescue.pod:187
 msgid "Enable QEMU user networking in the guest.  See L</NETWORK>."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:165
+#: ../rescue/virt-rescue.pod:193
 msgid "Open the image read-only."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:175
+#: ../rescue/virt-rescue.pod:203
 msgid ""
 "Enable SELinux in the rescue appliance.  You should read "
 "L<guestfs(3)/SELINUX> before using this option."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:178
+#: ../rescue/virt-rescue.pod:206
 msgid "B<--smp> N"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:180
+#: ../rescue/virt-rescue.pod:208
 msgid "Enable N E<ge> 2 virtual CPUs in the rescue appliance."
 msgstr ""
 
+#. type: =item
+#: ../rescue/virt-rescue.pod:210
+msgid "B<--suggest>"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:212
+msgid ""
+"Inspect the disk image and suggest what mount commands should be used to "
+"mount the disks.  You should use the I<--suggest> option in a second "
+"terminal, then paste the commands into another virt-rescue."
+msgstr ""
+
 #. type: textblock
-#: ../rescue/virt-rescue.pod:198
+#: ../rescue/virt-rescue.pod:216
+msgid ""
+"This option implies I<--ro> and is safe to use even if the guest is up or if "
+"another virt-rescue is running."
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:235
 msgid ""
 "This changes the I<-a> and I<-d> options so that disks are added and mounts "
 "are done read-write."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:211
+#: ../rescue/virt-rescue.pod:248
 msgid "Previous versions of virt-rescue allowed you to write either:"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:213
+#: ../rescue/virt-rescue.pod:250
 #, no-wrap
 msgid ""
 " virt-rescue disk.img [disk.img ...]\n"
@@ -22065,7 +22156,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:217
+#: ../rescue/virt-rescue.pod:254
 #, no-wrap
 msgid ""
 " virt-rescue guestname\n"
@@ -22073,12 +22164,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../rescue/virt-rescue.pod:225
+#: ../rescue/virt-rescue.pod:262
 msgid "NETWORK"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:227
+#: ../rescue/virt-rescue.pod:264
 msgid ""
 "Adding the I<--network> option enables QEMU user networking in the rescue "
 "appliance.  There are some differences between user networking and ordinary "
@@ -22086,12 +22177,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:233
+#: ../rescue/virt-rescue.pod:270
 msgid "ping does not work"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:235
+#: ../rescue/virt-rescue.pod:272
 msgid ""
 "Because the ICMP ECHO_REQUEST protocol generally requires root in order to "
 "send the ping packets, and because virt-rescue must be able to run as "
@@ -22102,22 +22193,22 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:242
+#: ../rescue/virt-rescue.pod:279
 msgid "cannot receive connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:244
+#: ../rescue/virt-rescue.pod:281
 msgid "QEMU user networking cannot receive incoming connections."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:246
+#: ../rescue/virt-rescue.pod:283
 msgid "making TCP connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:248
+#: ../rescue/virt-rescue.pod:285
 msgid ""
 "The virt-rescue appliance needs to be small and so does not include many "
 "network tools.  In particular there is no L<telnet(1)> command.  You can "
@@ -22126,7 +22217,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:253
+#: ../rescue/virt-rescue.pod:290
 #, no-wrap
 msgid ""
 " exec 3<>/dev/tcp/redhat.com/80\n"
@@ -22136,22 +22227,22 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:257
+#: ../rescue/virt-rescue.pod:294
 msgid "See L<bash(1)> for more details."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:263
+#: ../rescue/virt-rescue.pod:300
 msgid ""
 "Several environment variables affect virt-rescue.  See "
 "L<guestfs(3)/ENVIRONMENT VARIABLES> for the complete list."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:290
+#: ../rescue/virt-rescue.pod:327
 msgid ""
 "L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>, "
-"L<http://libguestfs.org/>."
+"L<virt-filesystems(1)>, L<http://libguestfs.org/>."
 msgstr ""
 
 #. type: textblock
diff --git a/po-docs/uk.po b/po-docs/uk.po
index a7f532c..279bcc7 100644
--- a/po-docs/uk.po
+++ b/po-docs/uk.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: libguestfs at redhat.com\n"
-"POT-Creation-Date: 2011-10-27 16:05+0200\n"
+"POT-Creation-Date: 2011-11-01 14:20+0000\n"
 "PO-Revision-Date: 2011-10-27 09:15+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Ukrainian <trans-uk at lists.fedoraproject.org>\n"
@@ -91,7 +91,7 @@ msgstr ""
 #: ../fish/virt-tar-out.pod:15 ../fuse/guestmount.pod:20
 #: ../inspector/virt-inspector.pod:19 ../java/examples/guestfs-java.pod:15
 #: ../ocaml/examples/guestfs-ocaml.pod:25 ../perl/examples/guestfs-perl.pod:18
-#: ../python/examples/guestfs-python.pod:14 ../rescue/virt-rescue.pod:29
+#: ../python/examples/guestfs-python.pod:14 ../rescue/virt-rescue.pod:31
 #: ../resize/virt-resize.pod:13 ../ruby/examples/guestfs-ruby.pod:15
 #: ../sparsify/virt-sparsify.pod:11 ../src/guestfs.pod:23
 #: ../test-tool/libguestfs-test-tool.pod:11
@@ -266,7 +266,7 @@ msgstr ""
 #: ../fish/guestfish.pod:148 ../fish/virt-copy-in.pod:45
 #: ../fish/virt-copy-out.pod:34 ../fish/virt-tar-in.pod:42
 #: ../fish/virt-tar-out.pod:36 ../fuse/guestmount.pod:92
-#: ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:84
+#: ../inspector/virt-inspector.pod:55 ../rescue/virt-rescue.pod:112
 #: ../resize/virt-resize.pod:262 ../sparsify/virt-sparsify.pod:99
 #: ../test-tool/libguestfs-test-tool.pod:36
 #: ../tools/virt-list-filesystems.pl:53 ../tools/virt-list-partitions.pl:54
@@ -280,7 +280,7 @@ msgstr "ПАРАМЕТРИ"
 #: ../cat/virt-filesystems.pod:95 ../cat/virt-ls.pod:265
 #: ../clone/virt-sysprep.pod:46 ../df/virt-df.pod:63 ../edit/virt-edit.pod:66
 #: ../fish/guestfish.pod:152 ../fuse/guestmount.pod:160
-#: ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:88
+#: ../inspector/virt-inspector.pod:59 ../rescue/virt-rescue.pod:116
 #: ../resize/virt-resize.pod:266 ../sparsify/virt-sparsify.pod:103
 #: ../test-tool/libguestfs-test-tool.pod:40
 #: ../tools/virt-list-filesystems.pl:61 ../tools/virt-list-partitions.pl:62
@@ -293,7 +293,7 @@ msgstr "B<--help>"
 #: ../align/virt-alignment-scan.pod:95 ../cat/virt-cat.pod:68
 #: ../cat/virt-filesystems.pod:97 ../cat/virt-ls.pod:267
 #: ../clone/virt-sysprep.pod:48 ../df/virt-df.pod:65 ../edit/virt-edit.pod:68
-#: ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:90
+#: ../inspector/virt-inspector.pod:61 ../rescue/virt-rescue.pod:118
 #: ../tools/virt-list-filesystems.pl:63 ../tools/virt-list-partitions.pl:64
 #: ../tools/virt-make-fs.pl:163 ../tools/virt-tar.pl:113
 #: ../tools/virt-win-reg.pl:106
@@ -304,7 +304,7 @@ msgstr "Показати коротку довідку."
 #: ../align/virt-alignment-scan.pod:97 ../cat/virt-cat.pod:70
 #: ../cat/virt-filesystems.pod:99 ../cat/virt-ls.pod:269
 #: ../clone/virt-sysprep.pod:50 ../df/virt-df.pod:67 ../edit/virt-edit.pod:70
-#: ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:92
+#: ../inspector/virt-inspector.pod:63 ../rescue/virt-rescue.pod:120
 msgid "B<-a> file"
 msgstr "B<-a> файл"
 
@@ -312,7 +312,7 @@ msgstr "B<-a> файл"
 #: ../align/virt-alignment-scan.pod:99 ../cat/virt-cat.pod:72
 #: ../cat/virt-filesystems.pod:101 ../cat/virt-ls.pod:271
 #: ../clone/virt-sysprep.pod:52 ../df/virt-df.pod:69 ../edit/virt-edit.pod:72
-#: ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:94
+#: ../inspector/virt-inspector.pod:65 ../rescue/virt-rescue.pod:122
 msgid "B<--add> file"
 msgstr "B<--add> файл"
 
@@ -326,7 +326,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:107 ../cat/virt-ls.pod:277
 #: ../clone/virt-sysprep.pod:56 ../df/virt-df.pod:75 ../edit/virt-edit.pod:78
 #: ../fish/guestfish.pod:174 ../fuse/guestmount.pod:102
-#: ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:100
+#: ../inspector/virt-inspector.pod:71 ../rescue/virt-rescue.pod:128
 msgid ""
 "The format of the disk image is auto-detected.  To override this and force a "
 "particular format use the I<--format=..> option."
@@ -336,7 +336,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:106 ../cat/virt-cat.pod:81
 #: ../cat/virt-filesystems.pod:125 ../cat/virt-ls.pod:291
 #: ../clone/virt-sysprep.pod:59 ../df/virt-df.pod:78
-#: ../rescue/virt-rescue.pod:107
+#: ../rescue/virt-rescue.pod:135
 msgid "B<-c> URI"
 msgstr "B<-c> адреса"
 
@@ -344,7 +344,7 @@ msgstr "B<-c> адреса"
 #: ../align/virt-alignment-scan.pod:108 ../cat/virt-cat.pod:83
 #: ../cat/virt-filesystems.pod:127 ../cat/virt-ls.pod:293
 #: ../clone/virt-sysprep.pod:61 ../df/virt-df.pod:80
-#: ../rescue/virt-rescue.pod:109
+#: ../rescue/virt-rescue.pod:137
 msgid "B<--connect> URI"
 msgstr "B<--connect> адреса"
 
@@ -352,7 +352,7 @@ msgstr "B<--connect> адреса"
 #: ../align/virt-alignment-scan.pod:110 ../cat/virt-cat.pod:85
 #: ../cat/virt-filesystems.pod:129 ../cat/virt-ls.pod:295
 #: ../clone/virt-sysprep.pod:63 ../df/virt-df.pod:82 ../edit/virt-edit.pod:99
-#: ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:111
+#: ../inspector/virt-inspector.pod:78 ../rescue/virt-rescue.pod:139
 #: ../tools/virt-list-filesystems.pl:81 ../tools/virt-list-partitions.pl:82
 #: ../tools/virt-tar.pl:131 ../tools/virt-win-reg.pl:132
 msgid ""
@@ -364,7 +364,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:113 ../cat/virt-cat.pod:88
 #: ../cat/virt-filesystems.pod:132 ../cat/virt-ls.pod:298
 #: ../clone/virt-sysprep.pod:66 ../df/virt-df.pod:85
-#: ../rescue/virt-rescue.pod:114
+#: ../rescue/virt-rescue.pod:142
 msgid ""
 "If you specify guest block devices directly (I<-a>), then libvirt is not "
 "used at all."
@@ -374,7 +374,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:116 ../cat/virt-cat.pod:91
 #: ../cat/virt-filesystems.pod:141 ../cat/virt-ls.pod:307
 #: ../clone/virt-sysprep.pod:69 ../df/virt-df.pod:94 ../edit/virt-edit.pod:105
-#: ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:117
+#: ../inspector/virt-inspector.pod:85 ../rescue/virt-rescue.pod:145
 msgid "B<-d> guest"
 msgstr "B<-d> гість"
 
@@ -382,7 +382,7 @@ msgstr "B<-d> гість"
 #: ../align/virt-alignment-scan.pod:118 ../cat/virt-cat.pod:93
 #: ../cat/virt-filesystems.pod:143 ../cat/virt-ls.pod:309
 #: ../clone/virt-sysprep.pod:71 ../df/virt-df.pod:96 ../edit/virt-edit.pod:107
-#: ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:119
+#: ../inspector/virt-inspector.pod:87 ../rescue/virt-rescue.pod:147
 msgid "B<--domain> guest"
 msgstr "B<--domain> гість"
 
@@ -390,7 +390,7 @@ msgstr "B<--domain> гість"
 #: ../align/virt-alignment-scan.pod:120 ../cat/virt-cat.pod:95
 #: ../cat/virt-filesystems.pod:145 ../cat/virt-ls.pod:311
 #: ../clone/virt-sysprep.pod:73 ../df/virt-df.pod:98 ../edit/virt-edit.pod:109
-#: ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:121
+#: ../inspector/virt-inspector.pod:89 ../rescue/virt-rescue.pod:149
 msgid ""
 "Add all the disks from the named libvirt guest.  Domain UUIDs can be used "
 "instead of names."
@@ -401,7 +401,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:170 ../cat/virt-ls.pod:328
 #: ../clone/virt-sysprep.pod:95 ../df/virt-df.pod:101
 #: ../fish/guestfish.pod:233 ../fuse/guestmount.pod:142
-#: ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:124
+#: ../inspector/virt-inspector.pod:99 ../rescue/virt-rescue.pod:152
 msgid "B<--format=raw|qcow2|..>"
 msgstr "B<--format=raw|qcow2|..>"
 
@@ -411,7 +411,7 @@ msgstr "B<--format=raw|qcow2|..>"
 #: ../clone/virt-sysprep.pod:97 ../df/virt-df.pod:103
 #: ../edit/virt-edit.pod:134 ../fish/guestfish.pod:235
 #: ../fuse/guestmount.pod:144 ../inspector/virt-inspector.pod:101
-#: ../rescue/virt-rescue.pod:126
+#: ../rescue/virt-rescue.pod:154
 msgid "B<--format>"
 msgstr "B<--format>"
 
@@ -420,7 +420,7 @@ msgstr "B<--format>"
 #: ../cat/virt-filesystems.pod:174 ../cat/virt-ls.pod:332
 #: ../clone/virt-sysprep.pod:99 ../df/virt-df.pod:105
 #: ../edit/virt-edit.pod:136 ../fish/guestfish.pod:237
-#: ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:128
+#: ../fuse/guestmount.pod:146 ../rescue/virt-rescue.pod:156
 msgid ""
 "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 "
@@ -434,7 +434,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:104 ../df/virt-df.pod:110
 #: ../edit/virt-edit.pod:141 ../fish/guestfish.pod:242
 #: ../fish/guestfish.pod:673 ../inspector/virt-inspector.pod:336
-#: ../rescue/virt-rescue.pod:133 ../src/guestfs.pod:2877
+#: ../rescue/virt-rescue.pod:161 ../src/guestfs.pod:2877
 msgid "For example:"
 msgstr "Приклад:"
 
@@ -451,7 +451,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:183 ../cat/virt-ls.pod:341
 #: ../clone/virt-sysprep.pod:108 ../df/virt-df.pod:114
 #: ../edit/virt-edit.pod:145 ../fish/guestfish.pod:246
-#: ../rescue/virt-rescue.pod:137
+#: ../rescue/virt-rescue.pod:165
 msgid "forces raw format (no auto-detection) for C<disk.img>."
 msgstr ""
 
@@ -468,7 +468,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:187 ../cat/virt-ls.pod:345
 #: ../clone/virt-sysprep.pod:112 ../df/virt-df.pod:118
 #: ../edit/virt-edit.pod:149 ../fish/guestfish.pod:250
-#: ../rescue/virt-rescue.pod:141
+#: ../rescue/virt-rescue.pod:169
 msgid ""
 "forces raw format (no auto-detection) for C<disk.img> and reverts to auto-"
 "detection for C<another.img>."
@@ -478,7 +478,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:143 ../cat/virt-cat.pod:125
 #: ../cat/virt-filesystems.pod:190 ../cat/virt-ls.pod:348
 #: ../clone/virt-sysprep.pod:115 ../df/virt-df.pod:121
-#: ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:144
+#: ../edit/virt-edit.pod:152 ../rescue/virt-rescue.pod:172
 msgid ""
 "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 "
@@ -510,7 +510,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:138 ../df/virt-df.pod:173
 #: ../edit/virt-edit.pod:161 ../fish/guestfish.pod:390
 #: ../fuse/guestmount.pod:266 ../inspector/virt-inspector.pod:119
-#: ../rescue/virt-rescue.pod:182 ../sparsify/virt-sparsify.pod:159
+#: ../rescue/virt-rescue.pod:219 ../sparsify/virt-sparsify.pod:159
 msgid "B<-v>"
 msgstr "B<-v>"
 
@@ -520,7 +520,7 @@ msgstr "B<-v>"
 #: ../clone/virt-sysprep.pod:140 ../df/virt-df.pod:175
 #: ../edit/virt-edit.pod:163 ../fish/guestfish.pod:392
 #: ../fuse/guestmount.pod:268 ../inspector/virt-inspector.pod:121
-#: ../rescue/virt-rescue.pod:184 ../sparsify/virt-sparsify.pod:161
+#: ../rescue/virt-rescue.pod:221 ../sparsify/virt-sparsify.pod:161
 msgid "B<--verbose>"
 msgstr "B<--verbose>"
 
@@ -529,7 +529,7 @@ msgstr "B<--verbose>"
 #: ../cat/virt-filesystems.pod:265 ../cat/virt-ls.pod:429
 #: ../clone/virt-sysprep.pod:142 ../df/virt-df.pod:177
 #: ../edit/virt-edit.pod:165 ../inspector/virt-inspector.pod:123
-#: ../rescue/virt-rescue.pod:186 ../sparsify/virt-sparsify.pod:163
+#: ../rescue/virt-rescue.pod:223 ../sparsify/virt-sparsify.pod:163
 msgid "Enable verbose messages for debugging."
 msgstr ""
 
@@ -539,7 +539,7 @@ msgstr ""
 #: ../clone/virt-sysprep.pod:144 ../df/virt-df.pod:179
 #: ../edit/virt-edit.pod:167 ../fish/guestfish.pod:397
 #: ../fuse/guestmount.pod:272 ../inspector/virt-inspector.pod:125
-#: ../rescue/virt-rescue.pod:188 ../resize/virt-resize.pod:561
+#: ../rescue/virt-rescue.pod:225 ../resize/virt-resize.pod:561
 #: ../sparsify/virt-sparsify.pod:165
 msgid "B<-V>"
 msgstr "B<-V>"
@@ -550,7 +550,7 @@ msgstr "B<-V>"
 #: ../clone/virt-sysprep.pod:146 ../df/virt-df.pod:181
 #: ../edit/virt-edit.pod:169 ../fish/guestfish.pod:399
 #: ../fuse/guestmount.pod:274 ../inspector/virt-inspector.pod:127
-#: ../rescue/virt-rescue.pod:190 ../resize/virt-resize.pod:563
+#: ../rescue/virt-rescue.pod:227 ../resize/virt-resize.pod:563
 #: ../sparsify/virt-sparsify.pod:167 ../tools/virt-list-filesystems.pl:69
 #: ../tools/virt-list-partitions.pl:70 ../tools/virt-make-fs.pl:169
 #: ../tools/virt-tar.pl:119 ../tools/virt-win-reg.pl:112
@@ -562,7 +562,7 @@ msgstr "B<--version>"
 #: ../cat/virt-filesystems.pod:271 ../cat/virt-ls.pod:435
 #: ../clone/virt-sysprep.pod:148 ../df/virt-df.pod:183
 #: ../edit/virt-edit.pod:171 ../inspector/virt-inspector.pod:129
-#: ../rescue/virt-rescue.pod:192 ../resize/virt-resize.pod:565
+#: ../rescue/virt-rescue.pod:229 ../resize/virt-resize.pod:565
 #: ../sparsify/virt-sparsify.pod:169 ../tools/virt-list-filesystems.pl:71
 #: ../tools/virt-list-partitions.pl:72 ../tools/virt-make-fs.pl:171
 #: ../tools/virt-tar.pl:121 ../tools/virt-win-reg.pl:114
@@ -575,7 +575,7 @@ msgstr "Показати дані щодо версії і завершити р
 #: ../clone/virt-sysprep.pod:150 ../df/virt-df.pod:185
 #: ../edit/virt-edit.pod:173 ../fish/guestfish.pod:412
 #: ../fuse/guestmount.pod:287 ../inspector/virt-inspector.pod:131
-#: ../rescue/virt-rescue.pod:203 ../sparsify/virt-sparsify.pod:171
+#: ../rescue/virt-rescue.pod:240 ../sparsify/virt-sparsify.pod:171
 #: ../tools/virt-tar.pl:158
 msgid "B<-x>"
 msgstr "B<-x>"
@@ -585,7 +585,7 @@ msgstr "B<-x>"
 #: ../cat/virt-filesystems.pod:283 ../cat/virt-ls.pod:439
 #: ../clone/virt-sysprep.pod:152 ../df/virt-df.pod:187
 #: ../edit/virt-edit.pod:175 ../inspector/virt-inspector.pod:133
-#: ../rescue/virt-rescue.pod:205 ../sparsify/virt-sparsify.pod:173
+#: ../rescue/virt-rescue.pod:242 ../sparsify/virt-sparsify.pod:173
 msgid "Enable tracing of libguestfs API calls."
 msgstr ""
 
@@ -861,7 +861,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:373 ../cat/virt-ls.pod:483
 #: ../clone/virt-sysprep.pod:475 ../df/virt-df.pod:215
 #: ../edit/virt-edit.pod:342 ../inspector/virt-inspector.pod:352
-#: ../rescue/virt-rescue.pod:266 ../resize/virt-resize.pod:676
+#: ../rescue/virt-rescue.pod:303 ../resize/virt-resize.pod:676
 #: ../tools/virt-list-filesystems.pl:188 ../tools/virt-list-partitions.pl:258
 #: ../tools/virt-make-fs.pl:550 ../tools/virt-tar.pl:289
 #: ../tools/virt-win-reg.pl:744
@@ -873,7 +873,7 @@ msgstr ""
 #: ../cat/virt-filesystems.pod:375 ../cat/virt-ls.pod:485
 #: ../clone/virt-sysprep.pod:477 ../df/virt-df.pod:217
 #: ../edit/virt-edit.pod:344 ../inspector/virt-inspector.pod:354
-#: ../rescue/virt-rescue.pod:268 ../resize/virt-resize.pod:678
+#: ../rescue/virt-rescue.pod:305 ../resize/virt-resize.pod:678
 #: ../tools/virt-list-filesystems.pl:190 ../tools/virt-list-partitions.pl:260
 #: ../tools/virt-make-fs.pl:552 ../tools/virt-tar.pl:291
 #: ../tools/virt-win-reg.pl:752
@@ -1037,7 +1037,7 @@ msgstr ""
 #: ../fish/virt-tar-out.pod:41 ../fuse/guestmount.pod:317
 #: ../inspector/virt-inspector.pod:380 ../java/examples/guestfs-java.pod:45
 #: ../ocaml/examples/guestfs-ocaml.pod:78 ../perl/examples/guestfs-perl.pod:39
-#: ../python/examples/guestfs-python.pod:42 ../rescue/virt-rescue.pod:288
+#: ../python/examples/guestfs-python.pod:42 ../rescue/virt-rescue.pod:325
 #: ../resize/virt-resize.pod:688 ../ruby/examples/guestfs-ruby.pod:36
 #: ../sparsify/virt-sparsify.pod:251 ../src/guestfs.pod:3270
 #: ../test-tool/libguestfs-test-tool.pod:100
@@ -1058,7 +1058,7 @@ msgstr ""
 #: ../align/virt-alignment-scan.pod:361 ../cat/virt-cat.pod:252
 #: ../cat/virt-filesystems.pod:396 ../cat/virt-ls.pod:507
 #: ../clone/virt-sysprep.pod:501 ../df/virt-df.pod:235
-#: ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:296
+#: ../edit/virt-edit.pod:368 ../rescue/virt-rescue.pod:334
 #: ../resize/virt-resize.pod:711 ../sparsify/virt-sparsify.pod:264
 #: ../tools/virt-list-filesystems.pl:208 ../tools/virt-list-partitions.pl:277
 #: ../tools/virt-make-fs.pl:582 ../tools/virt-tar.pl:311
@@ -1071,7 +1071,7 @@ msgstr "АВТОР"
 #: ../cat/virt-filesystems.pod:398 ../cat/virt-ls.pod:509
 #: ../clone/virt-sysprep.pod:503 ../df/virt-df.pod:237
 #: ../edit/virt-edit.pod:370 ../inspector/virt-inspector.pod:395
-#: ../rescue/virt-rescue.pod:298 ../resize/virt-resize.pod:713
+#: ../rescue/virt-rescue.pod:336 ../resize/virt-resize.pod:713
 #: ../sparsify/virt-sparsify.pod:266 ../tools/virt-list-filesystems.pl:210
 #: ../tools/virt-list-partitions.pl:279 ../tools/virt-make-fs.pl:584
 #: ../tools/virt-tar.pl:313 ../tools/virt-win-reg.pl:785
@@ -1089,7 +1089,7 @@ msgstr "Richard W.M. Jones L<http://people.redhat.com/~rjones/>"
 #: ../fish/virt-tar-out.pod:55 ../fuse/guestmount.pod:332
 #: ../inspector/virt-inspector.pod:403 ../java/examples/guestfs-java.pod:62
 #: ../ocaml/examples/guestfs-ocaml.pod:95 ../perl/examples/guestfs-perl.pod:56
-#: ../python/examples/guestfs-python.pod:58 ../rescue/virt-rescue.pod:300
+#: ../python/examples/guestfs-python.pod:58 ../rescue/virt-rescue.pod:338
 #: ../resize/virt-resize.pod:715 ../ruby/examples/guestfs-ruby.pod:52
 #: ../sparsify/virt-sparsify.pod:268 ../src/guestfs.pod:3352
 #: ../test-tool/libguestfs-test-tool.pod:110
@@ -1113,7 +1113,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:69 ../fish/virt-copy-out.pod:58
 #: ../fish/virt-tar-in.pod:67 ../fish/virt-tar-out.pod:60
 #: ../fuse/guestmount.pod:337 ../inspector/virt-inspector.pod:407
-#: ../rescue/virt-rescue.pod:304 ../resize/virt-resize.pod:719
+#: ../rescue/virt-rescue.pod:342 ../resize/virt-resize.pod:719
 #: ../sparsify/virt-sparsify.pod:272 ../test-tool/libguestfs-test-tool.pod:115
 #: ../tools/virt-list-filesystems.pl:216 ../tools/virt-list-partitions.pl:285
 #: ../tools/virt-make-fs.pl:590 ../tools/virt-tar.pl:319
@@ -1133,7 +1133,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:74 ../fish/virt-copy-out.pod:63
 #: ../fish/virt-tar-in.pod:72 ../fish/virt-tar-out.pod:65
 #: ../fuse/guestmount.pod:342 ../inspector/virt-inspector.pod:412
-#: ../rescue/virt-rescue.pod:309 ../resize/virt-resize.pod:724
+#: ../rescue/virt-rescue.pod:347 ../resize/virt-resize.pod:724
 #: ../sparsify/virt-sparsify.pod:277 ../test-tool/libguestfs-test-tool.pod:120
 #: ../tools/virt-list-filesystems.pl:221 ../tools/virt-list-partitions.pl:290
 #: ../tools/virt-make-fs.pl:595 ../tools/virt-tar.pl:324
@@ -1157,7 +1157,7 @@ msgstr ""
 #: ../fish/virt-copy-in.pod:79 ../fish/virt-copy-out.pod:68
 #: ../fish/virt-tar-in.pod:77 ../fish/virt-tar-out.pod:70
 #: ../fuse/guestmount.pod:347 ../inspector/virt-inspector.pod:417
-#: ../rescue/virt-rescue.pod:314 ../resize/virt-resize.pod:729
+#: ../rescue/virt-rescue.pod:352 ../resize/virt-resize.pod:729
 #: ../sparsify/virt-sparsify.pod:282 ../test-tool/libguestfs-test-tool.pod:125
 #: ../tools/virt-list-filesystems.pl:226 ../tools/virt-list-partitions.pl:295
 #: ../tools/virt-make-fs.pl:600 ../tools/virt-tar.pl:329
@@ -1367,7 +1367,7 @@ msgstr ""
 #. type: textblock
 #: ../cat/virt-cat.pod:74 ../cat/virt-filesystems.pod:103
 #: ../cat/virt-ls.pod:273 ../df/virt-df.pod:71 ../edit/virt-edit.pod:74
-#: ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:96
+#: ../inspector/virt-inspector.pod:67 ../rescue/virt-rescue.pod:124
 msgid ""
 "Add I<file> which should be a disk image from a virtual machine.  If the "
 "virtual machine has multiple block devices, you must supply all of them with "
@@ -1428,7 +1428,7 @@ msgstr ""
 
 #. type: =head1
 #: ../cat/virt-cat.pod:152 ../cat/virt-ls.pod:443 ../edit/virt-edit.pod:179
-#: ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:209
+#: ../inspector/virt-inspector.pod:137 ../rescue/virt-rescue.pod:246
 msgid "OLD-STYLE COMMAND LINE ARGUMENTS"
 msgstr ""
 
@@ -1447,7 +1447,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:158 ../cat/virt-ls.pod:449 ../edit/virt-edit.pod:185
-#: ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:215
+#: ../inspector/virt-inspector.pod:143 ../rescue/virt-rescue.pod:252
 msgid "or"
 msgstr "або"
 
@@ -1461,7 +1461,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:162 ../cat/virt-ls.pod:453 ../edit/virt-edit.pod:189
-#: ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:219
+#: ../inspector/virt-inspector.pod:147 ../rescue/virt-rescue.pod:256
 msgid ""
 "whereas in this version you should use I<-a> or I<-d> respectively to avoid "
 "the confusing case where a disk image might have the same name as a guest."
@@ -1469,7 +1469,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-cat.pod:166 ../cat/virt-ls.pod:457 ../edit/virt-edit.pod:193
-#: ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:223
+#: ../inspector/virt-inspector.pod:151 ../rescue/virt-rescue.pod:260
 msgid "For compatibility the old style is still supported."
 msgstr ""
 
@@ -2328,7 +2328,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:13
+#: ../cat/virt-ls.pod:13 ../df/virt-df.pod:15 ../rescue/virt-rescue.pod:15
 msgid "Old style:"
 msgstr "Старий стиль:"
 
@@ -3084,7 +3084,7 @@ msgstr ""
 
 #. type: textblock
 #: ../cat/virt-ls.pod:513 ../df/virt-df.pod:241 ../edit/virt-edit.pod:374
-#: ../rescue/virt-rescue.pod:302
+#: ../rescue/virt-rescue.pod:340
 msgid "Copyright (C) 2009-2011 Red Hat Inc."
 msgstr "©Red Hat Inc., 2009–2011"
 
@@ -4150,7 +4150,7 @@ msgstr ""
 #. type: =head1
 #: ../edit/virt-edit.pod:21 ../fish/guestfish.pod:23
 #: ../fish/virt-copy-in.pod:13 ../fish/virt-tar-in.pod:15
-#: ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:19
+#: ../fuse/guestmount.pod:15 ../rescue/virt-rescue.pod:21
 #: ../tools/virt-tar.pl:64 ../tools/virt-win-reg.pl:51
 msgid "WARNING"
 msgstr "ПОПЕРЕДЖЕННЯ"
@@ -4626,7 +4626,7 @@ msgstr ""
 
 #. type: =head1
 #: ../edit/virt-edit.pod:329 ../fish/guestfish.pod:1119
-#: ../rescue/virt-rescue.pod:261 ../sparsify/virt-sparsify.pod:232
+#: ../rescue/virt-rescue.pod:298 ../sparsify/virt-sparsify.pod:232
 #: ../src/guestfs.pod:3209 ../test-tool/libguestfs-test-tool.pod:95
 msgid "ENVIRONMENT VARIABLES"
 msgstr "ЗМІННІ СЕРЕДОВИЩА"
@@ -19440,13 +19440,13 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:369 ../fuse/guestmount.pod:248
-#: ../rescue/virt-rescue.pod:161
+#: ../rescue/virt-rescue.pod:189
 msgid "B<-r>"
 msgstr "B<-r>"
 
 #. type: =item
 #: ../fish/guestfish.pod:371 ../fuse/guestmount.pod:250
-#: ../rescue/virt-rescue.pod:163
+#: ../rescue/virt-rescue.pod:191
 msgid "B<--ro>"
 msgstr "B<--ro>"
 
@@ -19458,7 +19458,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:167
+#: ../fish/guestfish.pod:376 ../rescue/virt-rescue.pod:195
 msgid ""
 "The option must always be used if the disk image or virtual machine might be "
 "running, and is generally recommended in cases where you don't need write "
@@ -19480,7 +19480,7 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:386 ../fuse/guestmount.pod:262
-#: ../rescue/virt-rescue.pod:173
+#: ../rescue/virt-rescue.pod:201
 msgid "B<--selinux>"
 msgstr "B<--selinux>"
 
@@ -19502,13 +19502,13 @@ msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:403 ../fuse/guestmount.pod:278
-#: ../rescue/virt-rescue.pod:194
+#: ../rescue/virt-rescue.pod:231
 msgid "B<-w>"
 msgstr "B<-w>"
 
 #. type: =item
 #: ../fish/guestfish.pod:405 ../fuse/guestmount.pod:280
-#: ../rescue/virt-rescue.pod:196
+#: ../rescue/virt-rescue.pod:233
 msgid "B<--rw>"
 msgstr "B<--rw>"
 
@@ -21304,25 +21304,25 @@ msgstr ""
 
 #. type: =head1
 #: ../fish/guestfish.pod:1209 ../fuse/guestmount.pod:297
-#: ../rescue/virt-rescue.pod:273
+#: ../rescue/virt-rescue.pod:310
 msgid "FILES"
 msgstr "ФАЙЛИ"
 
 #. type: =item
 #: ../fish/guestfish.pod:1213 ../fuse/guestmount.pod:301
-#: ../rescue/virt-rescue.pod:277
+#: ../rescue/virt-rescue.pod:314
 msgid "$HOME/.libguestfs-tools.rc"
 msgstr ""
 
 #. type: =item
 #: ../fish/guestfish.pod:1215 ../fuse/guestmount.pod:303
-#: ../rescue/virt-rescue.pod:279
+#: ../rescue/virt-rescue.pod:316
 msgid "/etc/libguestfs-tools.conf"
 msgstr ""
 
 #. type: textblock
 #: ../fish/guestfish.pod:1217 ../fuse/guestmount.pod:305
-#: ../rescue/virt-rescue.pod:281
+#: ../rescue/virt-rescue.pod:318
 msgid ""
 "This configuration file controls the default read-only or read-write mode "
 "(I<--ro> or I<--rw>)."
@@ -21928,7 +21928,7 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:68
+#: ../fuse/guestmount.pod:73 ../rescue/virt-rescue.pod:96
 #: ../resize/virt-resize.pod:621
 msgid "NOTES"
 msgstr "ПРИМІТКИ"
@@ -22146,7 +22146,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:171
+#: ../fuse/guestmount.pod:260 ../rescue/virt-rescue.pod:199
 msgid "See also L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr "Див. також L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 
@@ -22167,7 +22167,7 @@ msgstr ""
 
 #. type: textblock
 #: ../fuse/guestmount.pod:285 ../fuse/guestmount.pod:308
-#: ../rescue/virt-rescue.pod:201 ../rescue/virt-rescue.pod:284
+#: ../rescue/virt-rescue.pod:238 ../rescue/virt-rescue.pod:321
 msgid "See L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 msgstr "Див. L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>."
 
@@ -23137,7 +23137,20 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:15
+#: ../rescue/virt-rescue.pod:13
+#, fuzzy, no-wrap
+#| msgid ""
+#| " virt-filesystems --format=raw -a disk.img\n"
+#| "\n"
+msgid ""
+" virt-rescue --suggest (-d domname | -a disk.img ...)\n"
+"\n"
+msgstr ""
+" virt-filesystems --format=raw -a диск.img\n"
+"\n"
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:17
 #, no-wrap
 msgid ""
 " virt-rescue [--options] domname\n"
@@ -23145,7 +23158,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:17
+#: ../rescue/virt-rescue.pod:19
 #, no-wrap
 msgid ""
 " virt-rescue [--options] disk.img [disk.img ...]\n"
@@ -23153,7 +23166,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:21
+#: ../rescue/virt-rescue.pod:23
 msgid ""
 "You must I<not> use C<virt-rescue> on live virtual machines.  Doing so will "
 "probably result in disk corruption in the VM.  C<virt-rescue> tries to stop "
@@ -23161,7 +23174,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:25
+#: ../rescue/virt-rescue.pod:27
 msgid ""
 "However if you use the I<--ro> (read only) option, then you can attach a "
 "shell to a live virtual machine.  The results might be strange or "
@@ -23169,7 +23182,7 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:31
+#: ../rescue/virt-rescue.pod:33
 msgid ""
 "virt-rescue is like a Rescue CD, but for virtual machines, and without the "
 "need for a CD.  virt-rescue gives you a rescue shell and some simple "
@@ -23178,14 +23191,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:36
+#: ../rescue/virt-rescue.pod:38
 msgid ""
 "You can run virt-rescue on any virtual machine known to libvirt, or directly "
 "on disk image(s):"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:39
+#: ../rescue/virt-rescue.pod:41
 #, no-wrap
 msgid ""
 " virt-rescue -d GuestName\n"
@@ -23193,7 +23206,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:41
+#: ../rescue/virt-rescue.pod:43
 #, no-wrap
 msgid ""
 " virt-rescue --ro -a /path/to/disk.img\n"
@@ -23201,7 +23214,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:43
+#: ../rescue/virt-rescue.pod:45
 #, no-wrap
 msgid ""
 " virt-rescue -a /dev/sdc\n"
@@ -23209,12 +23222,12 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:45
+#: ../rescue/virt-rescue.pod:47
 msgid "For live VMs you I<must> use the --ro option."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:47
+#: ../rescue/virt-rescue.pod:49
 msgid ""
 "When you run virt-rescue on a virtual machine or disk image, you are placed "
 "in an interactive bash shell where you can use many ordinary Linux "
@@ -23224,34 +23237,98 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:54
+#: ../rescue/virt-rescue.pod:56
 msgid ""
-"In the example below, we list logical volumes, then choose one to mount "
-"under C</sysroot>:"
+"You can get virt-rescue to suggest mount commands for you by using the I<--"
+"suggest> option (in another terminal):"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:59
+#, no-wrap
+msgid ""
+" $ virt-rescue --suggest -d Fedora15\n"
+" Inspecting the virtual machine or disk image ...\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:62
+#, no-wrap
+msgid ""
+" This disk contains one or more operating systems.  You can use these\n"
+" mount commands in virt-rescue (at the ><rescue> prompt) to mount the\n"
+" filesystems.\n"
+" \n"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:57
+#: ../rescue/virt-rescue.pod:66
+#, no-wrap
+msgid ""
+" # /dev/vg_f15x32/lv_root is the root of a linux operating system\n"
+" # type: linux, distro: fedora, version: 15.0\n"
+" # Fedora release 15 (Lovelock)\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:70
+#, no-wrap
+msgid ""
+" mount /dev/vg_f15x32/lv_root /sysroot/\n"
+" mount /dev/vda1 /sysroot/boot\n"
+" mount --bind /dev /sysroot/dev\n"
+" mount --bind /dev/pts /sysroot/dev/pts\n"
+" mount --bind /proc /sysroot/proc\n"
+" mount --bind /sys /sysroot/sys\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:77
+msgid ""
+"Another way is to list the logical volumes (with L<lvs(8)>) and partitions "
+"(with L<parted(8)>) and mount them by hand:"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:80
 #, no-wrap
 msgid ""
 " ><rescue> lvs\n"
 " LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert\n"
-" lv_root vg_f11x64 -wi-a-   8.83G\n"
-" lv_swap vg_f11x64 -wi-a- 992.00M\n"
-" ><rescue> mount /dev/vg_f11x64/lv_root /sysroot\n"
+" lv_root vg_f15x32 -wi-a-   8.83G\n"
+" lv_swap vg_f15x32 -wi-a- 992.00M\n"
+" ><rescue> mount /dev/vg_f15x32/lv_root /sysroot\n"
+" ><rescue> mount /dev/vda1 /sysroot/boot\n"
 " ><rescue> ls /sysroot\n"
 "\n"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:64
+#: ../rescue/virt-rescue.pod:88
 msgid ""
-"If you don't know what filesystems are available on the virtual machine then "
-"you can use commands such as L<parted(8)> and L<lvs(8)> to find out."
+"Another command to list available filesystems is L<virt-filesystems(1)>."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:70
+#: ../rescue/virt-rescue.pod:91
+msgid ""
+"To run commands in a Linux guest (for example, grub), you should chroot into "
+"the /sysroot directory first:"
+msgstr ""
+
+#. type: verbatim
+#: ../rescue/virt-rescue.pod:94
+#, no-wrap
+msgid ""
+" ><rescue> chroot /sysroot\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:98
 msgid ""
 "Virt-rescue can be used on I<any> disk image file or device, not just a "
 "virtual machine.  For example you can use it on a blank file if you want to "
@@ -23261,14 +23338,14 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:76
+#: ../rescue/virt-rescue.pod:104
 msgid ""
 "Virt-rescue does not require root.  You only need to run it as root if you "
 "need root to open the disk image."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:79
+#: ../rescue/virt-rescue.pod:107
 msgid ""
 "This tool is just designed for quick interactive hacking on a virtual "
 "machine.  For more structured access to a virtual machine disk image, you "
@@ -23277,17 +23354,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:103
+#: ../rescue/virt-rescue.pod:131
 msgid "B<--append kernelopts>"
 msgstr "B<--append параметри_ядра>"
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:105
+#: ../rescue/virt-rescue.pod:133
 msgid "Pass additional options to the rescue kernel."
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:135
+#: ../rescue/virt-rescue.pod:163
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img\n"
@@ -23295,7 +23372,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:139
+#: ../rescue/virt-rescue.pod:167
 #, no-wrap
 msgid ""
 " virt-rescue --format=raw -a disk.img --format -a another.img\n"
@@ -23303,17 +23380,17 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:148
+#: ../rescue/virt-rescue.pod:176
 msgid "B<-m MB>"
 msgstr "B<-m МБ>"
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:150
+#: ../rescue/virt-rescue.pod:178
 msgid "B<--memsize MB>"
 msgstr "B<--memsize МБ>"
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:152
+#: ../rescue/virt-rescue.pod:180
 msgid ""
 "Change the amount of memory allocated to the rescue system.  The default is "
 "set by libguestfs and is small but adequate for running system tools.  The "
@@ -23322,51 +23399,73 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:157
+#: ../rescue/virt-rescue.pod:185
 msgid "B<--network>"
 msgstr "B<--network>"
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:159
+#: ../rescue/virt-rescue.pod:187
 msgid "Enable QEMU user networking in the guest.  See L</NETWORK>."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:165
+#: ../rescue/virt-rescue.pod:193
 msgid "Open the image read-only."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:175
+#: ../rescue/virt-rescue.pod:203
 msgid ""
 "Enable SELinux in the rescue appliance.  You should read L<guestfs(3)/"
 "SELINUX> before using this option."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:178
+#: ../rescue/virt-rescue.pod:206
 msgid "B<--smp> N"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:180
+#: ../rescue/virt-rescue.pod:208
 msgid "Enable N E<ge> 2 virtual CPUs in the rescue appliance."
 msgstr ""
 
+#. type: =item
+#: ../rescue/virt-rescue.pod:210
+#, fuzzy
+#| msgid "B<--quiet>"
+msgid "B<--suggest>"
+msgstr "B<--quiet>"
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:212
+msgid ""
+"Inspect the disk image and suggest what mount commands should be used to "
+"mount the disks.  You should use the I<--suggest> option in a second "
+"terminal, then paste the commands into another virt-rescue."
+msgstr ""
+
+#. type: textblock
+#: ../rescue/virt-rescue.pod:216
+msgid ""
+"This option implies I<--ro> and is safe to use even if the guest is up or if "
+"another virt-rescue is running."
+msgstr ""
+
 #. type: textblock
-#: ../rescue/virt-rescue.pod:198
+#: ../rescue/virt-rescue.pod:235
 msgid ""
 "This changes the I<-a> and I<-d> options so that disks are added and mounts "
 "are done read-write."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:211
+#: ../rescue/virt-rescue.pod:248
 msgid "Previous versions of virt-rescue allowed you to write either:"
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:213
+#: ../rescue/virt-rescue.pod:250
 #, no-wrap
 msgid ""
 " virt-rescue disk.img [disk.img ...]\n"
@@ -23374,7 +23473,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:217
+#: ../rescue/virt-rescue.pod:254
 #, no-wrap
 msgid ""
 " virt-rescue guestname\n"
@@ -23382,12 +23481,12 @@ msgid ""
 msgstr ""
 
 #. type: =head1
-#: ../rescue/virt-rescue.pod:225
+#: ../rescue/virt-rescue.pod:262
 msgid "NETWORK"
 msgstr "МЕРЕЖА"
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:227
+#: ../rescue/virt-rescue.pod:264
 msgid ""
 "Adding the I<--network> option enables QEMU user networking in the rescue "
 "appliance.  There are some differences between user networking and ordinary "
@@ -23395,12 +23494,12 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:233
+#: ../rescue/virt-rescue.pod:270
 msgid "ping does not work"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:235
+#: ../rescue/virt-rescue.pod:272
 msgid ""
 "Because the ICMP ECHO_REQUEST protocol generally requires root in order to "
 "send the ping packets, and because virt-rescue must be able to run as non-"
@@ -23411,22 +23510,22 @@ msgid ""
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:242
+#: ../rescue/virt-rescue.pod:279
 msgid "cannot receive connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:244
+#: ../rescue/virt-rescue.pod:281
 msgid "QEMU user networking cannot receive incoming connections."
 msgstr ""
 
 #. type: =item
-#: ../rescue/virt-rescue.pod:246
+#: ../rescue/virt-rescue.pod:283
 msgid "making TCP connections"
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:248
+#: ../rescue/virt-rescue.pod:285
 msgid ""
 "The virt-rescue appliance needs to be small and so does not include many "
 "network tools.  In particular there is no L<telnet(1)> command.  You can "
@@ -23435,7 +23534,7 @@ msgid ""
 msgstr ""
 
 #. type: verbatim
-#: ../rescue/virt-rescue.pod:253
+#: ../rescue/virt-rescue.pod:290
 #, no-wrap
 msgid ""
 " exec 3<>/dev/tcp/redhat.com/80\n"
@@ -23445,23 +23544,29 @@ msgid ""
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:257
+#: ../rescue/virt-rescue.pod:294
 msgid "See L<bash(1)> for more details."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:263
+#: ../rescue/virt-rescue.pod:300
 msgid ""
 "Several environment variables affect virt-rescue.  See L<guestfs(3)/"
 "ENVIRONMENT VARIABLES> for the complete list."
 msgstr ""
 
 #. type: textblock
-#: ../rescue/virt-rescue.pod:290
+#: ../rescue/virt-rescue.pod:327
+#, fuzzy
+#| msgid ""
+#| "L<guestfs(3)>, L<guestfish(1)>, L<virt-copy-out(1)>, L<virt-edit(1)>, "
+#| "L<virt-tar-out(1)>, L<http://libguestfs.org/>."
 msgid ""
-"L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>, L<http://"
-"libguestfs.org/>."
+"L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>, L<virt-"
+"filesystems(1)>, L<http://libguestfs.org/>."
 msgstr ""
+"L<guestfs(3)>, L<guestfish(1)>, L<virt-copy-out(1)>, L<virt-edit(1)>, L<virt-"
+"tar-out(1)>, L<http://libguestfs.org/>."
 
 #. type: textblock
 #: ../resize/virt-resize.pod:5
diff --git a/po-docs/uk/guestfish.1 b/po-docs/uk/guestfish.1
index c739f44..a15a1bb 100644
--- a/po-docs/uk/guestfish.1
+++ b/po-docs/uk/guestfish.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestfish 1"
-.TH guestfish 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestfish 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/guestfs.3 b/po-docs/uk/guestfs.3
index ab9a3a3..16d83d2 100644
--- a/po-docs/uk/guestfs.3
+++ b/po-docs/uk/guestfs.3
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestfs 3"
-.TH guestfs 3 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestfs 3 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/guestmount.1 b/po-docs/uk/guestmount.1
index aa38a3f..cd5c2ef 100644
--- a/po-docs/uk/guestmount.1
+++ b/po-docs/uk/guestmount.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "guestmount 1"
-.TH guestmount 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH guestmount 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/libguestfs-test-tool.1 b/po-docs/uk/libguestfs-test-tool.1
index fe7b53a..7a44587 100644
--- a/po-docs/uk/libguestfs-test-tool.1
+++ b/po-docs/uk/libguestfs-test-tool.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "libguestfs-test-tool 1"
-.TH libguestfs-test-tool 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH libguestfs-test-tool 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-alignment-scan.1 b/po-docs/uk/virt-alignment-scan.1
index fb3d1df..3d6f05c 100644
--- a/po-docs/uk/virt-alignment-scan.1
+++ b/po-docs/uk/virt-alignment-scan.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-alignment-scan 1"
-.TH virt-alignment-scan 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-alignment-scan 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-cat.1 b/po-docs/uk/virt-cat.1
index cac2586..76d1539 100644
--- a/po-docs/uk/virt-cat.1
+++ b/po-docs/uk/virt-cat.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-cat 1"
-.TH virt-cat 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-cat 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-copy-in.1 b/po-docs/uk/virt-copy-in.1
index b22be93..e01b605 100644
--- a/po-docs/uk/virt-copy-in.1
+++ b/po-docs/uk/virt-copy-in.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-copy-in 1"
-.TH virt-copy-in 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-copy-in 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-copy-out.1 b/po-docs/uk/virt-copy-out.1
index b6b0f39..d21163b 100644
--- a/po-docs/uk/virt-copy-out.1
+++ b/po-docs/uk/virt-copy-out.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-copy-out 1"
-.TH virt-copy-out 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-copy-out 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-df.1 b/po-docs/uk/virt-df.1
index 1c7245e..4c798d4 100644
--- a/po-docs/uk/virt-df.1
+++ b/po-docs/uk/virt-df.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-df 1"
-.TH virt-df 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-df 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-edit.1 b/po-docs/uk/virt-edit.1
index 5db87d0..6c623c8 100644
--- a/po-docs/uk/virt-edit.1
+++ b/po-docs/uk/virt-edit.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-edit 1"
-.TH virt-edit 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-edit 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-filesystems.1 b/po-docs/uk/virt-filesystems.1
index a6bcb4a..14922cd 100644
--- a/po-docs/uk/virt-filesystems.1
+++ b/po-docs/uk/virt-filesystems.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-filesystems 1"
-.TH virt-filesystems 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-filesystems 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-inspector.1 b/po-docs/uk/virt-inspector.1
index ad36ae3..81db61f 100644
--- a/po-docs/uk/virt-inspector.1
+++ b/po-docs/uk/virt-inspector.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-inspector 1"
-.TH virt-inspector 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-inspector 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-list-filesystems.1 b/po-docs/uk/virt-list-filesystems.1
index 657ab8d..6641d38 100644
--- a/po-docs/uk/virt-list-filesystems.1
+++ b/po-docs/uk/virt-list-filesystems.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-list-filesystems.pl 1"
-.TH virt-list-filesystems.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-list-filesystems.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-list-partitions.1 b/po-docs/uk/virt-list-partitions.1
index de4d2e4..0e1c568 100644
--- a/po-docs/uk/virt-list-partitions.1
+++ b/po-docs/uk/virt-list-partitions.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-list-partitions.pl 1"
-.TH virt-list-partitions.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-list-partitions.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-ls.1 b/po-docs/uk/virt-ls.1
index 1f05d9e..7ec3fc7 100644
--- a/po-docs/uk/virt-ls.1
+++ b/po-docs/uk/virt-ls.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-ls 1"
-.TH virt-ls 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-ls 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-make-fs.1 b/po-docs/uk/virt-make-fs.1
index ae64402..e4bfbb2 100644
--- a/po-docs/uk/virt-make-fs.1
+++ b/po-docs/uk/virt-make-fs.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-make-fs.pl 1"
-.TH virt-make-fs.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-make-fs.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-rescue.1 b/po-docs/uk/virt-rescue.1
index bc0cfb3..f592969 100644
--- a/po-docs/uk/virt-rescue.1
+++ b/po-docs/uk/virt-rescue.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-rescue 1"
-.TH virt-rescue 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-rescue 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -76,6 +76,8 @@ virt-rescue \- Run a rescue shell on a virtual machine
 \& virt\-rescue [\-\-options] \-d domname
 \&
 \& virt\-rescue [\-\-options] \-a disk.img [\-a disk.img ...]
+\&
+\& virt\-rescue \-\-suggest (\-d domname | \-a disk.img ...)
 .Ve
 .PP
 Старий стиль:
@@ -120,20 +122,50 @@ commands.  What you see in \f(CW\*(C`/\*(C'\fR (\f(CW\*(C`/bin\*(C'\fR, \f(CW\*(
 appliance.  You must mount the virtual machine's filesystems by hand.  There
 is an empty directory called \f(CW\*(C`/sysroot\*(C'\fR where you can mount filesystems.
 .PP
-In the example below, we list logical volumes, then choose one to mount
-under \f(CW\*(C`/sysroot\*(C'\fR:
+You can get virt-rescue to suggest mount commands for you by using the
+\&\fI\-\-suggest\fR option (in another terminal):
+.PP
+.Vb 2
+\& $ virt\-rescue \-\-suggest \-d Fedora15
+\& Inspecting the virtual machine or disk image ...
+\& 
+\& This disk contains one or more operating systems.  You can use these
+\& mount commands in virt\-rescue (at the ><rescue> prompt) to mount the
+\& filesystems.
+\& 
+\& # /dev/vg_f15x32/lv_root is the root of a linux operating system
+\& # type: linux, distro: fedora, version: 15.0
+\& # Fedora release 15 (Lovelock)
+\& 
+\& mount /dev/vg_f15x32/lv_root /sysroot/
+\& mount /dev/vda1 /sysroot/boot
+\& mount \-\-bind /dev /sysroot/dev
+\& mount \-\-bind /dev/pts /sysroot/dev/pts
+\& mount \-\-bind /proc /sysroot/proc
+\& mount \-\-bind /sys /sysroot/sys
+.Ve
 .PP
-.Vb 6
+Another way is to list the logical volumes (with \fIlvs\fR\|(8)) and partitions
+(with \fIparted\fR\|(8)) and mount them by hand:
+.PP
+.Vb 7
 \& ><rescue> lvs
 \& LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
-\& lv_root vg_f11x64 \-wi\-a\-   8.83G
-\& lv_swap vg_f11x64 \-wi\-a\- 992.00M
-\& ><rescue> mount /dev/vg_f11x64/lv_root /sysroot
+\& lv_root vg_f15x32 \-wi\-a\-   8.83G
+\& lv_swap vg_f15x32 \-wi\-a\- 992.00M
+\& ><rescue> mount /dev/vg_f15x32/lv_root /sysroot
+\& ><rescue> mount /dev/vda1 /sysroot/boot
 \& ><rescue> ls /sysroot
 .Ve
 .PP
-If you don't know what filesystems are available on the virtual machine then
-you can use commands such as \fIparted\fR\|(8) and \fIlvs\fR\|(8) to find out.
+Another command to list available filesystems is \fIvirt\-filesystems\fR\|(1).
+.PP
+To run commands in a Linux guest (for example, grub), you should chroot into
+the /sysroot directory first:
+.PP
+.Vb 1
+\& ><rescue> chroot /sysroot
+.Ve
 .SS "ПРИМІТКИ"
 .IX Subsection "ПРИМІТКИ"
 Virt-rescue can be used on \fIany\fR disk image file or device, not just a
@@ -250,6 +282,14 @@ Enable SELinux in the rescue appliance.  You should read
 .IP "\fB\-\-smp\fR N" 4
 .IX Item "--smp N"
 Enable N ≥ 2 virtual CPUs in the rescue appliance.
+.IP "\fB\-\-suggest\fR" 4
+.IX Item "--suggest"
+Inspect the disk image and suggest what mount commands should be used to
+mount the disks.  You should use the \fI\-\-suggest\fR option in a second
+terminal, then paste the commands into another virt-rescue.
+.Sp
+This option implies \fI\-\-ro\fR and is safe to use even if the guest is up or if
+another virt-rescue is running.
 .IP "\fB\-v\fR" 4
 .IX Item "-v"
 .PD 0
@@ -351,7 +391,7 @@ This configuration file controls the default read-only or read-write mode
 .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 \&\fIguestfs\fR\|(3), \fIguestfish\fR\|(1), \fIvirt\-cat\fR\|(1), \fIvirt\-edit\fR\|(1),
-<http://libguestfs.org/>.
+\&\fIvirt\-filesystems\fR\|(1), <http://libguestfs.org/>.
 .SH "АВТОР"
 .IX Header "АВТОР"
 Richard W.M. Jones <http://people.redhat.com/~rjones/>
diff --git a/po-docs/uk/virt-rescue.pod b/po-docs/uk/virt-rescue.pod
index 592092c..b82a2e1 100644
--- a/po-docs/uk/virt-rescue.pod
+++ b/po-docs/uk/virt-rescue.pod
@@ -10,6 +10,8 @@ virt-rescue - Run a rescue shell on a virtual machine
 
  virt-rescue [--options] -a disk.img [-a disk.img ...]
 
+ virt-rescue --suggest (-d domname | -a disk.img ...)
+
 Старий стиль:
 
  virt-rescue [--options] domname
@@ -50,18 +52,44 @@ commands.  What you see in C</> (C</bin>, C</lib> etc) is the rescue
 appliance.  You must mount the virtual machine's filesystems by hand.  There
 is an empty directory called C</sysroot> where you can mount filesystems.
 
-In the example below, we list logical volumes, then choose one to mount
-under C</sysroot>:
+You can get virt-rescue to suggest mount commands for you by using the
+I<--suggest> option (in another terminal):
+
+ $ virt-rescue --suggest -d Fedora15
+ Inspecting the virtual machine or disk image ...
+ 
+ This disk contains one or more operating systems.  You can use these
+ mount commands in virt-rescue (at the ><rescue> prompt) to mount the
+ filesystems.
+ 
+ # /dev/vg_f15x32/lv_root is the root of a linux operating system
+ # type: linux, distro: fedora, version: 15.0
+ # Fedora release 15 (Lovelock)
+ 
+ mount /dev/vg_f15x32/lv_root /sysroot/
+ mount /dev/vda1 /sysroot/boot
+ mount --bind /dev /sysroot/dev
+ mount --bind /dev/pts /sysroot/dev/pts
+ mount --bind /proc /sysroot/proc
+ mount --bind /sys /sysroot/sys
+
+Another way is to list the logical volumes (with L<lvs(8)>) and partitions
+(with L<parted(8)>) and mount them by hand:
 
  ><rescue> lvs
  LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
- lv_root vg_f11x64 -wi-a-   8.83G
- lv_swap vg_f11x64 -wi-a- 992.00M
- ><rescue> mount /dev/vg_f11x64/lv_root /sysroot
+ lv_root vg_f15x32 -wi-a-   8.83G
+ lv_swap vg_f15x32 -wi-a- 992.00M
+ ><rescue> mount /dev/vg_f15x32/lv_root /sysroot
+ ><rescue> mount /dev/vda1 /sysroot/boot
  ><rescue> ls /sysroot
 
-If you don't know what filesystems are available on the virtual machine then
-you can use commands such as L<parted(8)> and L<lvs(8)> to find out.
+Another command to list available filesystems is L<virt-filesystems(1)>.
+
+To run commands in a Linux guest (for example, grub), you should chroot into
+the /sysroot directory first:
+
+ ><rescue> chroot /sysroot
 
 =head2 ПРИМІТКИ
 
@@ -177,6 +205,15 @@ L<guestfs(3)/SELINUX> before using this option.
 
 Enable N E<ge> 2 virtual CPUs in the rescue appliance.
 
+=item B<--suggest>
+
+Inspect the disk image and suggest what mount commands should be used to
+mount the disks.  You should use the I<--suggest> option in a second
+terminal, then paste the commands into another virt-rescue.
+
+This option implies I<--ro> and is safe to use even if the guest is up or if
+another virt-rescue is running.
+
 =item B<-v>
 
 =item B<--verbose>
@@ -285,7 +322,7 @@ This configuration file controls the default read-only or read-write mode
 =head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
 
 L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-edit(1)>,
-L<http://libguestfs.org/>.
+L<virt-filesystems(1)>, L<http://libguestfs.org/>.
 
 =head1 АВТОР
 
diff --git a/po-docs/uk/virt-resize.1 b/po-docs/uk/virt-resize.1
index 21e58e5..b4e1db2 100644
--- a/po-docs/uk/virt-resize.1
+++ b/po-docs/uk/virt-resize.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-resize 1"
-.TH virt-resize 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-resize 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-sparsify.1 b/po-docs/uk/virt-sparsify.1
index 20b1ac2..2e975f1 100644
--- a/po-docs/uk/virt-sparsify.1
+++ b/po-docs/uk/virt-sparsify.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sparsify 1"
-.TH virt-sparsify 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-sparsify 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-sysprep.1 b/po-docs/uk/virt-sysprep.1
index 1a39ce8..056ba67 100644
--- a/po-docs/uk/virt-sysprep.1
+++ b/po-docs/uk/virt-sysprep.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sysprep 1"
-.TH virt-sysprep 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-sysprep 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-tar-in.1 b/po-docs/uk/virt-tar-in.1
index 17e3a75..3a07049 100644
--- a/po-docs/uk/virt-tar-in.1
+++ b/po-docs/uk/virt-tar-in.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar-in 1"
-.TH virt-tar-in 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar-in 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-tar-out.1 b/po-docs/uk/virt-tar-out.1
index 4cb4690..2a1a7db 100644
--- a/po-docs/uk/virt-tar-out.1
+++ b/po-docs/uk/virt-tar-out.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar-out 1"
-.TH virt-tar-out 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar-out 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-tar.1 b/po-docs/uk/virt-tar.1
index dc1f862..b3e8cec 100644
--- a/po-docs/uk/virt-tar.1
+++ b/po-docs/uk/virt-tar.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-tar.pl 1"
-.TH virt-tar.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-tar.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po-docs/uk/virt-win-reg.1 b/po-docs/uk/virt-win-reg.1
index d8828fc..5bc7963 100644
--- a/po-docs/uk/virt-win-reg.1
+++ b/po-docs/uk/virt-win-reg.1
@@ -62,7 +62,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-win-reg.pl 1"
-.TH virt-win-reg.pl 1 "2011-10-27" "libguestfs-1.15.0" "Virtualization Support"
+.TH virt-win-reg.pl 1 "2011-11-01" "libguestfs-1.15.1" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
diff --git a/po/en_GB.gmo b/po/en_GB.gmo
index 5a4af7c..fbdd780 100644
Binary files a/po/en_GB.gmo and b/po/en_GB.gmo differ
diff --git a/po/en_GB.po b/po/en_GB.po
index 12bf361..6aa4ce3 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: English (United Kingdom) (http://www.transifex.net/projects/p/"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Try `%s --help' for more information.\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: failed to create handle\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: failed to create handle\n"
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: unknown long option: %s (%d)\n"
@@ -2886,8 +2886,8 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -2906,29 +2906,98 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
 "  -x                   Trace libguestfs API calls\n"
 "For more information, see the manpage %s(1).\n"
 msgstr ""
+"%s: display free space on virtual filesystems\n"
+"Copyright (C) 2010 Red Hat Inc.\n"
+"Usage:\n"
+"  %s [--options] -d domname\n"
+"  %s [--options] -a disc.img [-a disc.img ...]\n"
+"Options:\n"
+"  -a|--add image       Add image\n"
+"  -c|--connect uri     Specify libvirt URI for -d option\n"
+"  --csv                Output as Comma-Separated Values\n"
+"  -d|--domain guest    Add discs from libvirt guest\n"
+"  --format[=raw|..]    Force disc format for -a option\n"
+"  -h|--human-readable  Human-readable sizes in --long output\n"
+"  --help               Display brief help\n"
+"  -i|--inodes          Display inodes\n"
+"  --one-per-guest      Separate appliance per guest\n"
+"  --uuid               Add UUIDs to --long output\n"
+"  -v|--verbose         Verbose messages\n"
+"  -V|--version         Display version and exit\n"
+"  -x                   Trace libguestfs API calls\n"
+"For more information, see the manpage %s(1).\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/es.gmo b/po/es.gmo
index 029ee60..1e77757 100644
Binary files a/po/es.gmo and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
index 932df57..4f6ec79 100644
--- a/po/es.po
+++ b/po/es.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Spanish (Castilian) <trans-es at lists.fedoraproject.org>\n"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Intente con `%s --help' para más información.\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: falló al crear manipulador\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: falló al crear manipulador\n"
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: opción extensa desconocida: %s (%d)\n"
@@ -3192,8 +3192,8 @@ msgstr "{path} no coincide con el patrón augeas"
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: no es posible leer formato initrd"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -3212,29 +3212,99 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
 "  -x                   Trace libguestfs API calls\n"
 "For more information, see the manpage %s(1).\n"
 msgstr ""
+"%s: muestra el espacio disponible en el sistema de archivos virtual\n"
+"Copyright (C) 2010 Red Hat Inc.\n"
+"Usage:\n"
+"  %s [--opciones] -d domname\n"
+"  %s [--opciones] -a disk.img [-a disk.img ...]\n"
+"Opciones:\n"
+"  -a|--add image       Agrega una imagen\n"
+"  -c|--connect uri     Especifica URI de libvirt para la opción -d\n"
+"  --csv                Ofrece el resultado en valores separados por comas\n"
+"  -d|--domain guest    Agrega discos de huéspedes libvirt\n"
+"  --format[=raw|..]    Obliga al formateo de disco para la opción -a\n"
+"  -h|--human-readable  Ofrece el resultado de --long en un tamaño posible de "
+"ser leído por humanos\n"
+"  --help               Muestra una pequeña asistencia\n"
+"  -i|--inodes          Muestra los inodos\n"
+"  --one-per-guest      Distingue los dispositivos de cada huésped\n"
+"  --uuid               Agrega UUIDs a los resultados --long\n"
+"  -v|--verbose         Mensajes detallados\n"
+"  -V|--version         Muestra la versión y finaliza\n"
+"  -x                   Rastrea llamadas API de libguestfs\n"
+"Para obtener mayor información, consulte la página man %s(1).\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s: no se pudo analizar el tamaño '%s' de la memoria\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "no se ha ofrecido un nombre de dominio, o una imagen de disco\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr "%s: estado de salida de proceso hijo desconocido (%d)\n"
diff --git a/po/gu.gmo b/po/gu.gmo
index 1af3115..3f70664 100644
Binary files a/po/gu.gmo and b/po/gu.gmo differ
diff --git a/po/gu.po b/po/gu.po
index a495fd6..3feeb96 100644
--- a/po/gu.po
+++ b/po/gu.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Gujarati <trans-gu at lists.fedoraproject.org>\n"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "વધારે જાણકારી માટે `%s --help' નો પ્રયત્ન કરો.\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: હેન્ડલ ને બનાવવાનું નિષ્ફળ\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: હેન્ડલ ને બનાવવાનું 
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: અજ્ઞાત લાંબો વિકલ્પ: %s (%d)\n"
@@ -2825,7 +2825,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2845,6 +2845,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2852,22 +2853,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/hi.gmo b/po/hi.gmo
index 76c4080..0fa3303 100644
Binary files a/po/hi.gmo and b/po/hi.gmo differ
diff --git a/po/hi.po b/po/hi.po
index 08a39ab..0f7bb1a 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Hindi <indlinux-hindi at lists.sourceforge.net>\n"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "अधिक सूचना के लिए `%s --help' आजमाएँ.\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: नियंत्रण बनाने में विफल\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: नियंत्रण बनाने में व
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: unknown long option: %s (%d)\n"
@@ -2823,7 +2823,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2843,6 +2843,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2850,22 +2851,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/kn.gmo b/po/kn.gmo
index c8cdf3e..534e673 100644
Binary files a/po/kn.gmo and b/po/kn.gmo differ
diff --git a/po/kn.po b/po/kn.po
index 957034e..2397219 100644
--- a/po/kn.po
+++ b/po/kn.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Kannada (http://www.transifex.net/projects/p/fedora/team/"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ `%s -help' ಅನ್ನು ಪ್ರಯತ್ನಿಸಿ .\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: ಹ್ಯಾಂಡಲ್ ಅನ್ನು ನಿರ್ಮಿಸುವಲ್ಲಿ ವಿಫಲಗೊಂಡಿದೆ\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: ಹ್ಯಾಂಡಲ್ ಅನ್ನು ನಿರ್ಮ
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: ಗೊತ್ತಿರದ ಉದ್ದನೆಯ ಆಯ್ಕೆ: %s (%d)\n"
@@ -2830,7 +2830,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2850,6 +2850,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2857,22 +2858,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/libguestfs.pot b/po/libguestfs.pot
index 0fe7325..401a109 100644
--- a/po/libguestfs.pot
+++ b/po/libguestfs.pot
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: libguestfs 1.15.0\n"
+"Project-Id-Version: libguestfs 1.15.1\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -20,7 +20,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr ""
@@ -49,7 +49,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr ""
@@ -57,7 +57,7 @@ msgstr ""
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr ""
@@ -2813,7 +2813,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2833,6 +2833,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2840,22 +2841,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/ml.gmo b/po/ml.gmo
index 04385ec..323edba 100644
Binary files a/po/ml.gmo and b/po/ml.gmo differ
diff --git a/po/ml.po b/po/ml.po
index 3f39294..236721f 100644
--- a/po/ml.po
+++ b/po/ml.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Malayalam <discuss at lists.smc.org.in>\n"
@@ -21,7 +21,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "കൂടുതല്‍ വിവരങ്ങള്‍ക്കായി `%s --help' ശ്രമിക്കുക.\n"
@@ -50,7 +50,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: ഹാന്‍ഡില്‍ ഉണ്ടാക്കുന്നതില്‍ പരാജയപ്പെട്ടു\n"
@@ -58,7 +58,7 @@ msgstr "guestfs_create: ഹാന്‍ഡില്‍ ഉണ്ടാക്ക
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: അപരിചിതമായ ലോങ് ഉപാധി: %s (%d)\n"
@@ -2825,7 +2825,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2845,6 +2845,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2852,22 +2853,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/mr.gmo b/po/mr.gmo
index 1c7c3b1..079962c 100644
Binary files a/po/mr.gmo and b/po/mr.gmo differ
diff --git a/po/mr.po b/po/mr.po
index de4afa4..4a03cf9 100644
--- a/po/mr.po
+++ b/po/mr.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Marathi (http://www.transifex.net/projects/p/fedora/team/"
@@ -23,7 +23,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "अधिक माहितीसाठी `%s --help' वापरून पहा.\n"
@@ -52,7 +52,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: हँडल निर्माण करण्यास अशक्य\n"
@@ -60,7 +60,7 @@ msgstr "guestfs_create: हँडल निर्माण करण्यास
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: अपरिचीत लाँग पर्याय: %s (%d)\n"
@@ -2971,8 +2971,8 @@ msgstr "{path} augeas नमुनाशी जुळत नाही"
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: initrd स्वरूप वाचणे अशक्य"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -2991,29 +2991,98 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
 "  -x                   Trace libguestfs API calls\n"
 "For more information, see the manpage %s(1).\n"
 msgstr ""
+"%s: वर्च्युअल फाइलप्रणालीवरील मोकळी जागा दाखवा\n"
+"सर्वहक्कस्वाधीन (C) 2010 Red Hat Inc.\n"
+"वापर:\n"
+"  %s [--options] -d domname\n"
+"  %s [--options] -a disk.img [-a disk.img ...]\n"
+"पर्याय:\n"
+"  -a|--add image       प्रतिमा समाविष्ट करा\n"
+"  -c|--connect uri     -d पर्यायकरीता libvirt URI निर्देशीत करा\n"
+"  --csv                कॉमा-सेपरेटेड् वॅल्यूज प्रमाणे आऊटपुटमध्ये जमा करा\n"
+"  -d|--domain guest    libvirt अतिथीपासून डिस्क्स् समाविष्ट करा\n"
+"  --format[=raw|..]    -a पर्यायकरीता डिस्क रूपण जबरनरित्या लागू करा\n"
+"  -h|--human-readable  --long आऊटपुट स्वरूपातील वाचनजोगी आकार\n"
+"  --help               संक्षिप्त मदत दाखवा\n"
+"  -i|--inodes          inodes दाखवा\n"
+"  --one-per-guest      प्रत्येक अतिथीकरीता वेगळे अप्लायंस्\n"
+"  --uuid               --long आऊटपुटमध्ये UUIDs समाविष्ट करा\n"
+"  -v|--verbose         वर्बोस संदेश\n"
+"  -V|--version         आवृत्ती दाखवा व बाहेर पडा\n"
+"  -x                   libguestfs API कॉल्स् ट्रेस् करा\n"
+"अधिक माहितीकरीता, manpage %s(1) पहा.\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s: मेमरी आकार '%s' वाचणे अशक्य\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "libvirt डोमेन नाव किंवा डिस्क प्रतिमा दिले नाही\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr "%s: अपरिचीत चाइल्ड एक्जिट स्टेटस् (%d)\n"
diff --git a/po/nl.gmo b/po/nl.gmo
index 27126c1..77b3c2e 100644
Binary files a/po/nl.gmo and b/po/nl.gmo differ
diff --git a/po/nl.po b/po/nl.po
index cab1173..0465082 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -11,7 +11,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Dutch (http://www.transifex.net/projects/p/fedora/team/nl/)\n"
@@ -23,7 +23,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Probeer `%s --help' voor meer informatie\n"
@@ -68,7 +68,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: hendel aanmaken mislukte\n"
@@ -76,7 +76,7 @@ msgstr "guestfs_create: hendel aanmaken mislukte\n"
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: onbekende lange optie: %s (%d)\n"
@@ -3151,8 +3151,8 @@ msgstr "{path} komt niet overeen met augeas patroon"
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: kon initrd formaat niet lezen"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -3171,6 +3171,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -3200,22 +3201,70 @@ msgstr ""
 "  -x                   Traceer libguestfs API aanroepen\n"
 "Voor meer informatie, zie de manpagina %s(1).\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr "%s: kon --smp parameter '%s' niet ontleden\n"
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr "%s: --smp parameter '%s' moet >= 1 zijn\n"
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s:kon geheugen grootte niet ontleden '%s'\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "geen libvirt domein naam of schijf image gegeven\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr "%s: onbekende kind exit status (%d)\n"
diff --git a/po/or.gmo b/po/or.gmo
index 58548ba..c0e5f8a 100644
Binary files a/po/or.gmo and b/po/or.gmo differ
diff --git a/po/or.po b/po/or.po
index 76a99d1..9223dfe 100644
--- a/po/or.po
+++ b/po/or.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Oriya (http://www.transifex.net/projects/p/fedora/team/or/)\n"
@@ -21,7 +21,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "ଅଧିକ ସୂଚନା ପାଇଁ `%s --help' କୁ ଚେଷ୍ଟା କରନ୍ତୁ।\n"
@@ -50,7 +50,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: ନିୟନ୍ତ୍ରଣ ପ୍ରସ୍ତୁତ କରିବାରେ ବିଫଳ ହୋଇଛି\n"
@@ -58,7 +58,7 @@ msgstr "guestfs_create: ନିୟନ୍ତ୍ରଣ ପ୍ରସ୍ତୁତ କ
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: ଅଜଣା ଲମ୍ବା ବିକଳ୍ପ: %s (%d)\n"
@@ -2823,7 +2823,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2843,6 +2843,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2850,22 +2851,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/pa.gmo b/po/pa.gmo
index 4455220..e758aac 100644
Binary files a/po/pa.gmo and b/po/pa.gmo differ
diff --git a/po/pa.po b/po/pa.po
index d85c1c9..54773f9 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Panjabi (Punjabi) <punjabi-users at lists.sf.net>\n"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ `%s --help' ਵਰਤੋ।\n"
@@ -51,7 +51,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: ਹੈਂਡਲ ਬਣਾਉਣ ਵਿੱਚ ਫੇਲ\n"
@@ -59,7 +59,7 @@ msgstr "guestfs_create: ਹੈਂਡਲ ਬਣਾਉਣ ਵਿੱਚ ਫੇਲ\n
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: unknown long option: %s (%d)\n"
@@ -2968,8 +2968,8 @@ msgstr "{path} ਦਾ ਮੇਲ augeas ਪੈਟਰਨ ਨਾਲ ਨਹੀਂ 
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: initrd ਫਾਰਮੈਟ ਪੜ ਨਹੀਂ ਸਕਿਆ"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -2988,29 +2988,98 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
 "  -x                   Trace libguestfs API calls\n"
 "For more information, see the manpage %s(1).\n"
 msgstr ""
+"%s: display free space on virtual filesystems\n"
+"Copyright (C) 2010 Red Hat Inc।\n"
+"Usage:\n"
+"  %s [--options] -d domname\n"
+"  %s [--options] -a disk.img [-a disk.img ...]\n"
+"Options:\n"
+"  -a|--add image       Add image\n"
+"  -c|--connect uri     Specify libvirt URI for -d option\n"
+"  --csv                Output as Comma-Separated Values\n"
+"  -d|--domain guest    Add disks from libvirt guest\n"
+"  --format[=raw|..]    Force disk format for -a option\n"
+"  -h|--human-readable  Human-readable sizes in --long output\n"
+"  --help               Display brief help\n"
+"  -i|--inodes          Display inodes\n"
+"  --one-per-guest      Separate appliance per guest\n"
+"  --uuid               Add UUIDs to --long output\n"
+"  -v|--verbose         Verbose messages\n"
+"  -V|--version         Display version and exit\n"
+"  -x                   Trace libguestfs API calls\n"
+"For more information, see the manpage %s(1)।\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s: ਮੈਮੋਰੀ ਅਕਾਰ ਪਾਰਸ ਨਹੀਂ ਕਰ ਸਕਿਆ '%s'\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "ਕੋਈ libvirt ਡੋਮੇਨ ਨਾਂ ਜਾਂ ਡਿਸਕ ਈਮੇਜ਼ ਨਹੀਂ ਦਿੱਤਾ\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr "%s: ਅਣਜਾਣ ਲੰਬਾ ਚੋਣ:  (%d)\n"
diff --git a/po/pl.gmo b/po/pl.gmo
index 77a3a4e..29acb06 100644
Binary files a/po/pl.gmo and b/po/pl.gmo differ
diff --git a/po/pl.po b/po/pl.po
index 46a2694..4a75c54 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Polish (http://www.transifex.net/projects/p/fedora/team/pl/)\n"
@@ -23,7 +23,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Należy spróbować \"%s --help\", aby uzyskać więcej informacji.\n"
@@ -68,7 +68,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: utworzenie programu obsługi nie powiodło się\n"
@@ -76,7 +76,7 @@ msgstr "guestfs_create: utworzenie programu obsługi nie powiodło się\n"
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: nieznana długa opcja: %s (%d)\n"
@@ -3170,8 +3170,8 @@ msgstr "{path} nie zgadza się ze wzorem Augeas"
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: nie można odczytać formatu initrd"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -3190,6 +3190,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -3219,22 +3220,70 @@ msgstr ""
 "  -x                   Śledzi wywołania API biblioteki libguestfs\n"
 "Aby dowiedzieć się więcej, należy zobaczyć stronę podręcznika %s(1).\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr "%s: nie można przetworzyć parametru \"%s\" opcji --smp\n"
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr "%s: parametr \"%s\" opcji --smp powinien wynosić >= 1\n"
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s: nie można przetworzyć rozmiaru pamięci \"%s\"\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "nie podano nazwy domeny libvirt lub obrazu dysku\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr "%s: nieznany stan wyjścia potomka (%d)\n"
diff --git a/po/ta.gmo b/po/ta.gmo
index ddc2bc0..680ad1e 100644
Binary files a/po/ta.gmo and b/po/ta.gmo differ
diff --git a/po/ta.po b/po/ta.po
index b17d714..d4693dd 100644
--- a/po/ta.po
+++ b/po/ta.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Tamil <tamil-users at lists.fedoraproject.org>\n"
@@ -21,7 +21,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "`%s --help' க்கான கூடுதல் தகவலுக்கு முயற்சிக்கவும்.\n"
@@ -50,7 +50,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: ஹாண்டிலை உருவாக்க முடியவில்லை\n"
@@ -58,7 +58,7 @@ msgstr "guestfs_create: ஹாண்டிலை உருவாக்க மு
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: தெரியாத நீண்ட விருப்பம்: %s (%d)\n"
@@ -2824,7 +2824,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2844,6 +2844,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2851,22 +2852,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/te.gmo b/po/te.gmo
index 5f866a5..dbd4a89 100644
Binary files a/po/te.gmo and b/po/te.gmo differ
diff --git a/po/te.po b/po/te.po
index 9e5ba51..20e23a1 100644
--- a/po/te.po
+++ b/po/te.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Telugu (http://www.transifex.net/projects/p/fedora/team/te/)\n"
@@ -21,7 +21,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "అధిక సమాచారము కొరకు `%s --help' ప్రయత్నించండి\n"
@@ -50,7 +50,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: సంభాలికను సృష్టించుటకు విఫలమైంది\n"
@@ -58,7 +58,7 @@ msgstr "guestfs_create: సంభాలికను సృష్టించు
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: తెలియని long ఐచ్చికము: %s (%d)\n"
@@ -2821,7 +2821,7 @@ msgstr ""
 msgid "{filename}: could not read initrd format"
 msgstr ""
 
-#: rescue/virt-rescue.c:64
+#: rescue/virt-rescue.c:66
 #, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
@@ -2841,6 +2841,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -2848,22 +2849,70 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr ""
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/po/uk.gmo b/po/uk.gmo
index 2f1dba8..5081bc4 100644
Binary files a/po/uk.gmo and b/po/uk.gmo differ
diff --git a/po/uk.po b/po/uk.po
index 845b70e..514f0aa 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -9,7 +9,7 @@ msgstr ""
 "Project-Id-Version: libguestfs\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2011-10-27 16:05+0100\n"
+"POT-Creation-Date: 2011-11-01 14:19+0000\n"
 "PO-Revision-Date: 2011-10-27 09:11+0000\n"
 "Last-Translator: rjones <rjones at redhat.com>\n"
 "Language-Team: Ukrainian <trans-uk at lists.fedoraproject.org>\n"
@@ -22,7 +22,7 @@ msgstr ""
 
 #: align/scan.c:68 cat/virt-cat.c:61 cat/virt-filesystems.c:100
 #: cat/virt-ls.c:99 df/main.c:70 edit/virt-edit.c:73 fish/fish.c:101
-#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:60
+#: fuse/guestmount.c:908 inspector/virt-inspector.c:72 rescue/virt-rescue.c:62
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "Щоб дізнатися більше, віддайте команду «%s --help».\n"
@@ -67,7 +67,7 @@ msgstr ""
 #: align/scan.c:127 cat/virt-cat.c:121 cat/virt-filesystems.c:203
 #: cat/virt-ls.c:192 df/domains.c:429 df/main.c:136 edit/virt-edit.c:141
 #: fish/fish.c:222 fuse/guestmount.c:1024 inspector/virt-inspector.c:132
-#: rescue/virt-rescue.c:137
+#: rescue/virt-rescue.c:142
 #, c-format
 msgid "guestfs_create: failed to create handle\n"
 msgstr "guestfs_create: не вдалося створити елемент керування\n"
@@ -75,7 +75,7 @@ msgstr "guestfs_create: не вдалося створити елемент ке
 #: align/scan.c:145 cat/virt-cat.c:143 cat/virt-filesystems.c:257
 #: cat/virt-ls.c:242 df/main.c:160 edit/virt-edit.c:163 fish/fish.c:279
 #: fuse/guestmount.c:1061 inspector/virt-inspector.c:154
-#: rescue/virt-rescue.c:172
+#: rescue/virt-rescue.c:179
 #, c-format
 msgid "%s: unknown long option: %s (%d)\n"
 msgstr "%s: невідомий довгий запис параметра: %s (%d)\n"
@@ -3214,8 +3214,8 @@ msgstr "{path} не відповідає шаблону augeas"
 msgid "{filename}: could not read initrd format"
 msgstr "{filename}: не вдалося прочитати формат initrd"
 
-#: rescue/virt-rescue.c:64
-#, c-format
+#: rescue/virt-rescue.c:66
+#, fuzzy, c-format
 msgid ""
 "%s: Run a rescue shell on a virtual machine\n"
 "Copyright (C) 2009-2010 Red Hat Inc.\n"
@@ -3234,6 +3234,7 @@ msgid ""
 "  -r|--ro              Access read-only\n"
 "  --selinux            Enable SELinux\n"
 "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+"  --suggest            Suggest mount commands for this guest\n"
 "  -v|--verbose         Verbose messages\n"
 "  -V|--version         Display version and exit\n"
 "  -w|--rw              Mount read-write\n"
@@ -3263,22 +3264,70 @@ msgstr ""
 "  -x                   Трасувати виклики програмного інтерфейсу libguestfs\n"
 "Щоб дізнатися більше, ознайомтеся зі сторінкою довідника (man) %s(1).\n"
 
-#: rescue/virt-rescue.c:162
+#: rescue/virt-rescue.c:167
 #, c-format
 msgid "%s: could not parse --smp parameter '%s'\n"
 msgstr "%s: не вдалося обробити параметр --smp «%s»\n"
 
-#: rescue/virt-rescue.c:167
+#: rescue/virt-rescue.c:172
 #, c-format
 msgid "%s: --smp parameter '%s' should be >= 1\n"
 msgstr "%s: значенням параметра --smp «%s» має бути число >= 1\n"
 
-#: rescue/virt-rescue.c:195
+#: rescue/virt-rescue.c:202
 #, c-format
 msgid "%s: could not parse memory size '%s'\n"
 msgstr "%s: не вдалося обробити запис об’єму пам’яті «%s»\n"
 
-#: rescue/virt-rescue.c:428
+#: rescue/virt-rescue.c:372
+#, fuzzy, c-format
+msgid ""
+"Inspecting the virtual machine or disk image ...\n"
+"\n"
+msgstr "не вказано назви домену або образу диска libvirt\n"
+
+#: rescue/virt-rescue.c:391
+#, c-format
+msgid ""
+"This disk contains one or more operating systems.  You can use these mount\n"
+"commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:401
+#, c-format
+msgid ""
+"# %s is the root of a %s operating system\n"
+"# type: %s, distro: %s, version: %d.%d\n"
+"# %s\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:458
+#, c-format
+msgid ""
+"This disk contains no filesystems that we recognize.\n"
+"\n"
+"However you can still use virt-rescue on the disk image, to try to mount\n"
+"filesystems that are not recognized by libguestfs, or to create partitions,\n"
+"logical volumes and filesystems on a blank disk.\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:465
+#, c-format
+msgid ""
+"This disk contains one or more filesystems, but we don't recognize any\n"
+"operating system.  You can use these mount commands in virt-rescue (at the\n"
+"><rescue> prompt) to mount these filesystems.\n"
+"\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:470
+#, c-format
+msgid "# %s has type '%s'\n"
+msgstr ""
+
+#: rescue/virt-rescue.c:594
 #, c-format
 msgid "%s: unknown child exit status (%d)\n"
 msgstr ""
diff --git a/rescue/virt-rescue.c b/rescue/virt-rescue.c
index 7ad39b5..0c00364 100644
--- a/rescue/virt-rescue.c
+++ b/rescue/virt-rescue.c
@@ -36,6 +36,8 @@
 #include "guestfs.h"
 #include "options.h"
 
+static void do_suggestion (struct drv *drvs);
+
 /* Currently open libguestfs handle. */
 guestfs_h *g;
 
@@ -78,6 +80,7 @@ usage (int status)
              "  -r|--ro              Access read-only\n"
              "  --selinux            Enable SELinux\n"
              "  --smp N              Enable SMP with N >= 2 virtual CPUs\n"
+             "  --suggest            Suggest mount commands for this guest\n"
              "  -v|--verbose         Verbose messages\n"
              "  -V|--version         Display version and exit\n"
              "  -w|--rw              Mount read-write\n"
@@ -117,6 +120,7 @@ main (int argc, char *argv[])
     { "rw", 0, 0, 'w' },
     { "selinux", 0, 0, 0 },
     { "smp", 1, 0, 0 },
+    { "suggest", 0, 0, 0 },
     { "verbose", 0, 0, 'v' },
     { "version", 0, 0, 'V' },
     { 0, 0, 0, 0 }
@@ -131,6 +135,7 @@ main (int argc, char *argv[])
   char *append_full;
   int memsize = 0;
   int smp = 0;
+  int suggest = 0;
 
   g = guestfs_create ();
   if (g == NULL) {
@@ -168,6 +173,8 @@ main (int argc, char *argv[])
                    program_name, optarg);
           exit (EXIT_FAILURE);
         }
+      } else if (STREQ (long_options[option_index].name, "suggest")) {
+        suggest = 1;
       } else {
         fprintf (stderr, _("%s: unknown long option: %s (%d)\n"),
                  program_name, long_options[option_index].name, option_index);
@@ -259,6 +266,12 @@ main (int argc, char *argv[])
     }
   }
 
+  /* --suggest flag */
+  if (suggest) {
+    do_suggestion (drvs);
+    exit (EXIT_SUCCESS);
+  }
+
   /* These are really constants, but they have to be variables for the
    * options parsing code.  Assert here that they have known-good
    * values.
@@ -315,6 +328,159 @@ main (int argc, char *argv[])
   exit (EXIT_SUCCESS);
 }
 
+static void suggest_filesystems (void);
+
+static int
+compare_keys_len (const void *p1, const void *p2)
+{
+  const char *key1 = * (char * const *) p1;
+  const char *key2 = * (char * const *) p2;
+  return strlen (key1) - strlen (key2);
+}
+
+static size_t
+count_strings (char *const *argv)
+{
+  size_t i;
+
+  for (i = 0; argv[i]; ++i)
+    ;
+  return i;
+}
+
+/* virt-rescue --suggest flag does a kind of inspection on the
+ * drives and suggests mount commands that you should use.
+ */
+static void
+do_suggestion (struct drv *drvs)
+{
+  char **roots;
+  size_t i, j;
+  char *type, *distro, *product_name;
+  int major, minor;
+  char **mps;
+
+  /* For inspection, force add_drives to add the drives read-only. */
+  read_only = 1;
+
+  /* Add drives. */
+  add_drives (drvs, 'a');
+
+  /* Free up data structures, no longer needed after this point. */
+  free_drives (drvs);
+
+  printf (_("Inspecting the virtual machine or disk image ...\n\n"));
+  fflush (stdout);
+
+  if (guestfs_launch (g) == -1)
+    exit (EXIT_FAILURE);
+
+  /* Don't use inspect_mount, since for virt-rescue we should allow
+   * arbitrary disks and disks with more than one OS on them.  Let's
+   * do this using the basic API instead.
+   */
+  roots = guestfs_inspect_os (g);
+  if (roots == NULL)
+    exit (EXIT_FAILURE);
+
+  if (roots[0] == NULL) {
+    suggest_filesystems ();
+    return;
+  }
+
+  printf (_("This disk contains one or more operating systems.  You can use these mount\n"
+            "commands in virt-rescue (at the ><rescue> prompt) to mount the filesystems.\n\n"));
+
+  for (i = 0; roots[i] != NULL; ++i) {
+    type = guestfs_inspect_get_type (g, roots[i]);
+    distro = guestfs_inspect_get_distro (g, roots[i]);
+    product_name = guestfs_inspect_get_product_name (g, roots[i]);
+    major = guestfs_inspect_get_major_version (g, roots[i]);
+    minor = guestfs_inspect_get_minor_version (g, roots[i]);
+
+    printf (_("# %s is the root of a %s operating system\n"
+              "# type: %s, distro: %s, version: %d.%d\n"
+              "# %s\n\n"),
+            roots[i], type ? : "unknown",
+            type ? : "unknown", distro ? : "unknown", major, minor,
+            product_name ? : "");
+
+    mps = guestfs_inspect_get_mountpoints (g, roots[i]);
+    if (mps == NULL)
+      exit (EXIT_FAILURE);
+
+    /* Sort by key length, shortest key first, so that we end up
+     * mounting the filesystems in the correct order.
+     */
+    qsort (mps, count_strings (mps) / 2, 2 * sizeof (char *),
+           compare_keys_len);
+
+    for (j = 0; mps[j] != NULL; j += 2) {
+      printf ("mount %s /sysroot%s\n", mps[j+1], mps[j]);
+      free (mps[j]);
+      free (mps[j+1]);
+    }
+
+    /* If it's Linux, print the bind-mounts. */
+    if (type && STREQ (type, "linux")) {
+      printf ("mount --bind /dev /sysroot/dev\n");
+      printf ("mount --bind /dev/pts /sysroot/dev/pts\n");
+      printf ("mount --bind /proc /sysroot/proc\n");
+      printf ("mount --bind /sys /sysroot/sys\n");
+    }
+
+    printf ("\n");
+
+    free (type);
+    free (distro);
+    free (product_name);
+    free (roots[i]);
+  }
+
+  free (roots);
+}
+
+/* Inspection failed, so it doesn't contain any OS that we recognise.
+ * However there might still be filesystems so print some suggestions
+ * for those.
+ */
+static void
+suggest_filesystems (void)
+{
+  char **fses;
+  size_t i;
+
+  fses = guestfs_list_filesystems (g);
+  if (fses == NULL)
+    exit (EXIT_FAILURE);
+
+  if (fses[0] == NULL) {
+    printf (_("This disk contains no filesystems that we recognize.\n\n"
+              "However you can still use virt-rescue on the disk image, to try to mount\n"
+              "filesystems that are not recognized by libguestfs, or to create partitions,\n"
+              "logical volumes and filesystems on a blank disk.\n"));
+    return;
+  }
+
+  printf (_("This disk contains one or more filesystems, but we don't recognize any\n"
+            "operating system.  You can use these mount commands in virt-rescue (at the\n"
+            "><rescue> prompt) to mount these filesystems.\n\n"));
+
+  for (i = 0; fses[i] != NULL; i += 2) {
+    printf (_("# %s has type '%s'\n"), fses[i], fses[i+1]);
+
+    if (STRNEQ (fses[i+1], "swap") && STRNEQ (fses[i+1], "unknown"))
+      printf ("mount %s /sysroot\n", fses[i]);
+
+    printf ("\n");
+
+    free (fses[i]);
+    free (fses[i+1]);
+  }
+  free (fses);
+}
+
+
 /* The following was a nice idea, but in fact it doesn't work.  This is
  * because qemu has some (broken) pty emulation itself.
  */
diff --git a/rescue/virt-rescue.pod b/rescue/virt-rescue.pod
index e25b6ed..dc139dc 100755
--- a/rescue/virt-rescue.pod
+++ b/rescue/virt-rescue.pod
@@ -10,6 +10,8 @@ virt-rescue - Run a rescue shell on a virtual machine
 
  virt-rescue [--options] -a disk.img [-a disk.img ...]
 
+ virt-rescue --suggest (-d domname | -a disk.img ...)
+
 Old style:
 
  virt-rescue [--options] domname
@@ -51,19 +53,45 @@ rescue appliance.  You must mount the virtual machine's filesystems by
 hand.  There is an empty directory called C</sysroot> where you can
 mount filesystems.
 
-In the example below, we list logical volumes, then choose one to
-mount under C</sysroot>:
+You can get virt-rescue to suggest mount commands for you by using the
+I<--suggest> option (in another terminal):
+
+ $ virt-rescue --suggest -d Fedora15
+ Inspecting the virtual machine or disk image ...
+ 
+ This disk contains one or more operating systems.  You can use these
+ mount commands in virt-rescue (at the ><rescue> prompt) to mount the
+ filesystems.
+ 
+ # /dev/vg_f15x32/lv_root is the root of a linux operating system
+ # type: linux, distro: fedora, version: 15.0
+ # Fedora release 15 (Lovelock)
+ 
+ mount /dev/vg_f15x32/lv_root /sysroot/
+ mount /dev/vda1 /sysroot/boot
+ mount --bind /dev /sysroot/dev
+ mount --bind /dev/pts /sysroot/dev/pts
+ mount --bind /proc /sysroot/proc
+ mount --bind /sys /sysroot/sys
+
+Another way is to list the logical volumes (with L<lvs(8)>) and
+partitions (with L<parted(8)>) and mount them by hand:
 
  ><rescue> lvs
  LV      VG        Attr   LSize   Origin Snap%  Move Log Copy%  Convert
- lv_root vg_f11x64 -wi-a-   8.83G
- lv_swap vg_f11x64 -wi-a- 992.00M
- ><rescue> mount /dev/vg_f11x64/lv_root /sysroot
+ lv_root vg_f15x32 -wi-a-   8.83G
+ lv_swap vg_f15x32 -wi-a- 992.00M
+ ><rescue> mount /dev/vg_f15x32/lv_root /sysroot
+ ><rescue> mount /dev/vda1 /sysroot/boot
  ><rescue> ls /sysroot
 
-If you don't know what filesystems are available on the virtual
-machine then you can use commands such as L<parted(8)> and L<lvs(8)>
-to find out.
+Another command to list available filesystems is
+L<virt-filesystems(1)>.
+
+To run commands in a Linux guest (for example, grub), you should
+chroot into the /sysroot directory first:
+
+ ><rescue> chroot /sysroot
 
 =head2 NOTES
 
@@ -179,6 +207,15 @@ L<guestfs(3)/SELINUX> before using this option.
 
 Enable N E<ge> 2 virtual CPUs in the rescue appliance.
 
+=item B<--suggest>
+
+Inspect the disk image and suggest what mount commands should be used
+to mount the disks.  You should use the I<--suggest> option in a
+second terminal, then paste the commands into another virt-rescue.
+
+This option implies I<--ro> and is safe to use even if the guest is up
+or if another virt-rescue is running.
+
 =item B<-v>
 
 =item B<--verbose>
@@ -291,6 +328,7 @@ L<guestfs(3)>,
 L<guestfish(1)>,
 L<virt-cat(1)>,
 L<virt-edit(1)>,
+L<virt-filesystems(1)>,
 L<http://libguestfs.org/>.
 
 =head1 AUTHOR

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-libvirt/libguestfs.git



More information about the Pkg-libvirt-commits mailing list