X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=tools%2Fvirt-list-filesystems;h=50f95f25589958228d3ccec288259b1210939f17;hp=99480958a76df9e481f0630dc29adad0b3f96626;hb=35900223df1d05d0b8f4da79c854bee9899f81be;hpb=abe54abdd2a51f8fc6da26d4e5d4773f68da695e diff --git a/tools/virt-list-filesystems b/tools/virt-list-filesystems index 9948095..50f95f2 100755 --- a/tools/virt-list-filesystems +++ b/tools/virt-list-filesystems @@ -1,6 +1,6 @@ #!/usr/bin/perl -w # virt-list-filesystems -# Copyright (C) 2009 Red Hat Inc. +# Copyright (C) 2009-2010 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 @@ -20,7 +20,7 @@ use warnings; use strict; use Sys::Guestfs; -use Sys::Guestfs::Lib qw(open_guest get_partitions); +use Sys::Guestfs::Lib qw(open_guest); use Pod::Usage; use Getopt::Long; use Locale::TextDomain 'libguestfs'; @@ -39,6 +39,9 @@ virt-list-filesystems - List filesystems in a virtual machine or disk image =head1 DESCRIPTION +This tool is obsolete. Use L as a more +flexible replacement. + C is a command line tool to list the filesystems that are contained in a virtual machine or disk image. @@ -71,7 +74,9 @@ Display version number and exit. my $uri; -=item B<--connect URI> | B<-c URI> +=item B<-c URI> + +=item B<--connect URI> If using libvirt, connect to the given I. If omitted, then we connect to the default libvirt hypervisor. @@ -81,9 +86,28 @@ at all. =cut +my $format; + +=item B<--format> raw + +Specify the format of disk images given on the command line. If this +is omitted then the format is autodetected from the content of the +disk image. + +If disk images are requested from libvirt, then this program asks +libvirt for this information. In this case, the value of the format +parameter is ignored. + +If working with untrusted raw-format guest disk images, you should +ensure the format is always specified. + +=cut + my $long; -=item B<-l> | B<--long> +=item B<-l> + +=item B<--long> With this option, C displays the type of each filesystem too (where "type" means C, C etc.) @@ -92,7 +116,9 @@ each filesystem too (where "type" means C, C etc.) my $all; -=item B<-a> | B<--all> +=item B<-a> + +=item B<--all> Normally we only show mountable filesystems. If this option is given then swap devices are shown too. @@ -107,6 +133,7 @@ Getopt::Long::Configure ("bundling"); GetOptions ("help|?" => \$help, "version" => \$version, "connect|c=s" => \$uri, + "format=s" => \$format, "long|l" => \$long, "all|a" => \$all, ) or pod2usage (2); @@ -123,56 +150,26 @@ pod2usage (__"virt-list-filesystems: no image or VM name given") my $g; if ($uri) { - $g = open_guest (\@ARGV, address => $uri); + $g = open_guest (\@ARGV, address => $uri, format => $format); } else { - $g = open_guest (\@ARGV); + $g = open_guest (\@ARGV, format => $format); } $g->launch (); -# List of partitions, LVs etc. -my @partitions = get_partitions ($g); - -my @fses; -my @not_mountable; -my $dev; - -# Try and mount each one, to see what's mountable. -foreach $dev (@partitions) { - eval { $g->mount_ro ($dev, "/"); }; - my $mountable = $@ ? 0 : 1; - $g->umount_all (); - if ($mountable) { - push @fses, $dev; - } else { - push @not_mountable, $dev; - } -} +# List of filesystems. +my %fses = $g->list_filesystems (); -foreach $dev (@fses) { - print canonicalize($dev); - if ($long) { - my $fstype; - eval { $fstype = $g->vfs_type ($dev); }; - if ($fstype) { - print " $fstype"; - } else { - print " unknown"; - } - } - print "\n"; -} +my ($dev, $fstype); +foreach $dev (sort keys %fses) { + $fstype = $fses{$dev}; -# If asked, look in the not_mountable list for potential swap devices. -if ($all) { - foreach $dev (@not_mountable) { - my $file; - eval { $file = $g->file ($dev); }; - if ($file && $file =~ /\bswap\b/) { - print canonicalize($dev); - print " swap" if $long; - print "\n" - } + if ($all || ($fstype ne "swap" && $fstype ne "unknown")) { + print canonicalize($dev); + if ($long) { + print " $fstype"; + } + print "\n"; } } @@ -183,17 +180,26 @@ sub canonicalize local $_ = shift; if (m{^/dev/[hv]d([a-z]\d)$}) { - return "/dev/sd$1"; + return "/dev/sd$1"; } $_; } +=head1 SHELL QUOTING + +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 escape these characters on the command line. See the shell +manual page L for details. + =head1 SEE ALSO L, L, L, L, +L, +L, L, L, L, @@ -201,7 +207,7 @@ L. =head1 AUTHOR -Richard W.M. Jones L +Richard W.M. Jones L =head1 COPYRIGHT