X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=tools%2Fvirt-list-partitions;h=496116f823835ae43f12afde004974a55070244a;hb=025dba7f803419f510fd8f085ce693838af82878;hp=b8bc0cc1641e0533aef443dbea388b3c79512313;hpb=def627e4daf2d32cebf91f5e01f44a0b7e512129;p=libguestfs.git diff --git a/tools/virt-list-partitions b/tools/virt-list-partitions index b8bc0cc..496116f 100755 --- a/tools/virt-list-partitions +++ b/tools/virt-list-partitions @@ -39,6 +39,9 @@ virt-list-partitions - List partitions 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 partitions that are contained in a virtual machine or disk image. It is mainly useful as a first step to using @@ -72,7 +75,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. @@ -82,20 +87,52 @@ 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 $human; + +=item B<-h> + +=item B<--human-readable> + +Show sizes in human-readable form (eg. "1G"). + +=cut + my $long; -=item B<-l> | B<--long> +=item B<-l> + +=item B<--long> With this option, C displays the type and size of each partition too (where "type" means C, C etc.) =cut -my $human; +my $total; -=item B<-h> | B<--human-readable> +=item B<-t> -Show sizes in human-readable form (eg. "1G"). +=item B<--total> + +Display the total size of each block device (as a separate row or +rows). =back @@ -107,8 +144,10 @@ Getopt::Long::Configure ("bundling"); GetOptions ("help|?" => \$help, "version" => \$version, "connect|c=s" => \$uri, - "long|l" => \$long, + "format=s" => \$format, "human-readable|h" => \$human, + "long|l" => \$long, + "total|t" => \$total, ) or pod2usage (2); pod2usage (1) if $help; if ($version) { @@ -123,52 +162,78 @@ pod2usage (__"virt-list-partitions: 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 and sizes. -my @partitions; -my @devices = $g->list_devices (); -foreach my $dev (@devices) { - my @p = $g->part_list ($dev); - foreach (@p) { - $_->{name} = canonicalize ("$dev" . $_->{part_num}); - push @partitions, $_; - } -} +my @partitions = $g->list_partitions (); +foreach my $name (@partitions) { + $name = canonicalize ($name); -# Print them. -foreach my $part (@partitions) { - print $part->{name}; + print $name; if ($long) { my $type; eval { - $type = $g->vfs_type ($part->{name}); + $type = $g->vfs_type ($name); }; $type ||= "unknown"; $type = "pv" if $type eq "LVM2_member"; print " $type "; + + my $size; + eval { + $size = $g->blockdev_getsize64 ($name); + }; + $size ||= "unknown"; + if ($human) { - print (human_size($part->{part_size})); + print (human_size($size)); } else { - print $part->{part_size}; + print $size; } } print "\n"; } +if ($total) { + # List of devices and sizes. + my @devices = $g->list_devices (); + foreach my $name (@devices) { + $name = canonicalize ($name); + + print $name; + + if ($long) { + print " device "; + + my $size; + eval { + $size = $g->blockdev_getsize64 ($name); + }; + $size ||= "unknown"; + + if ($human) { + print (human_size($size)); + } else { + print $size; + } + } + print "\n"; + } +} + # The reverse of device name translation, see # BLOCK DEVICE NAMING in guestfs(3). sub canonicalize { local $_ = shift; - if (m{^/dev/[hv]d([a-z]\d)$}) { + if (m{^/dev/[hv]d([a-z]+\d*)$}) { return "/dev/sd$1"; } $_; @@ -190,10 +255,18 @@ sub human_size } } +=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, @@ -203,11 +276,11 @@ L. =head1 AUTHOR -Richard W.M. Jones L +Richard W.M. Jones L =head1 COPYRIGHT -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