summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2010-04-10 13:21:33 +0100
committerRichard Jones <rjones@redhat.com>2010-04-10 13:43:35 +0100
commite6bdd66fa6bdfa4e762f3c67ec1bac83a1d6643b (patch)
treec0a294ede0acab05b0ef99bc43652036b0804c83
parentadd5e22563972210f5c8baf9e8cf651fc1a7bbd8 (diff)
downloadlibguestfs-e6bdd66fa6bdfa4e762f3c67ec1bac83a1d6643b.tar.gz
libguestfs-e6bdd66fa6bdfa4e762f3c67ec1bac83a1d6643b.tar.xz
libguestfs-e6bdd66fa6bdfa4e762f3c67ec1bac83a1d6643b.zip
virt-list-partitions: Add -t / --total option.
This option lists out block devices separately: $ virt-list-partitions -lht /tmp/WindowsResized.img /dev/sda1 ntfs 100.0M /dev/sda2 ntfs 11.9G /dev/sda device 12.0G
-rwxr-xr-xtools/virt-list-partitions76
1 files changed, 56 insertions, 20 deletions
diff --git a/tools/virt-list-partitions b/tools/virt-list-partitions
index b8bc0cc1..0fec8723 100755
--- a/tools/virt-list-partitions
+++ b/tools/virt-list-partitions
@@ -82,6 +82,14 @@ at all.
=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 +99,12 @@ and size of each partition too (where "type" means C<ext3>, C<pv> 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 +116,9 @@ Getopt::Long::Configure ("bundling");
GetOptions ("help|?" => \$help,
"version" => \$version,
"connect|c=s" => \$uri,
- "long|l" => \$long,
"human-readable|h" => \$human,
+ "long|l" => \$long,
+ "total|t" => \$total,
) or pod2usage (2);
pod2usage (1) if $help;
if ($version) {
@@ -131,44 +141,70 @@ if ($uri) {
$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";
}
$_;