=head1 DESCRIPTION
+This tool is obsolete. Use L<virt-filesystems(1)> as a more
+flexible replacement.
+
C<virt-list-partitions> 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
=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>
=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
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) {
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";
}
$_;
}
}
+=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<sh(1)> for details.
+
=head1 SEE ALSO
L<guestfs(3)>,
L<guestfish(1)>,
+L<virt-filesystems(1)>,
L<virt-list-filesystems(1)>,
L<virt-resize(1)>,
L<Sys::Guestfs(3)>,
=head1 AUTHOR
-Richard W.M. Jones L<http://et.redhat.com/~rjones/>
+Richard W.M. Jones L<http://people.redhat.com/~rjones/>
=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