X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=tools%2Fvirt-list-partitions;h=53059b48ea9d18a6306ee206087ab5506ecaca20;hp=b8bc0cc1641e0533aef443dbea388b3c79512313;hb=a0f85ba643990da25b6afe6a2bbd2407cf312c73;hpb=def627e4daf2d32cebf91f5e01f44a0b7e512129 diff --git a/tools/virt-list-partitions b/tools/virt-list-partitions index b8bc0cc..53059b4 100755 --- a/tools/virt-list-partitions +++ b/tools/virt-list-partitions @@ -82,6 +82,31 @@ 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> | B<--human-readable> + +Show sizes in human-readable form (eg. "1G"). + +=cut + my $long; =item B<-l> | B<--long> @@ -91,11 +116,12 @@ 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> | B<--total> -Show sizes in human-readable form (eg. "1G"). +Display the total size of each block device (as a separate row or +rows). =back @@ -107,8 +133,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 +151,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,6 +244,13 @@ 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, @@ -203,11 +264,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