|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
From 6be1ba8a63f53b4167262250be1c122c7c08f61d Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
From: Richard Jones <rjones@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
Date: Fri, 16 Jul 2010 18:11:56 +0100
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
Subject: [PATCH] df: Minimize the number of times we launch the libguestfs appliance.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
This commit greatly improves the performance of the 'virt-df'
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
command by batching as many disks as possible onto a single appliance.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
In many situations this means the appliance is launched only once,
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
versus one launch per domain as before.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
However doing it this way is a lot more complex:
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
(1) Because of limits in Linux and virtio-blk, we can only attach
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
26 disks maximum at a time to the appliance.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
(2) We have to use LVM filters (lvm-set-filter) to confine LVM to
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
the disks of a single guest.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
(cherry picked from commit 45a4cd79215752234c4a5a47fb4c9c6741b1594c)
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
---
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
tools/virt-df | 217 ++++++++++++++++++++++++++++++++++++++++++++++-----------
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
1 files changed, 177 insertions(+), 40 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
diff --git a/tools/virt-df b/tools/virt-df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
index 45b7869..790dd6a 100755
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
--- a/tools/virt-df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+++ b/tools/virt-df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
@@ -20,12 +20,11 @@ use warnings;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use strict;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use Sys::Guestfs;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-use Sys::Guestfs::Lib qw(open_guest get_partitions);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+use Sys::Guestfs::Lib qw(feature_available);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use Pod::Usage;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use Getopt::Long;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-use Data::Dumper;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-use XML::Writer;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+use File::Basename qw(basename);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use POSIX qw(ceil);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
use Locale::TextDomain 'libguestfs';
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
@@ -151,9 +150,22 @@ if ($version) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
# RHBZ#600977
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
die __"virt-df: cannot use -h and --csv options together\n" if $human && $csv;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-# Open the guest handle.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# Get the list of domains and block devices.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+#
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# We can't use Sys::Guestfs::Lib::open_guest here because we want to
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# create the libguestfs handle/appliance as few times as possible.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+#
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# If virt-df is called with no parameters, then run the libvirt
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# equivalent of "virsh list --all", get the XML for each domain, and
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# get the disk devices.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+#
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# If virt-df is called with parameters, assume it must either be a
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# single disk image filename, a list of disk image filenames, or a
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# single libvirt guest name. Construct disk devices accordingly.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-if (@ARGV == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+my @domains = ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+if (@ARGV == 0) { # No params, use libvirt.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
my $conn;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
if ($uri) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
@@ -168,61 +180,186 @@ if (@ARGV == 0) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
# https://bugzilla.redhat.com/show_bug.cgi?id=538041
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
@doms = grep { $_->get_id () != 0 } @doms;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my @domnames = sort (map { $_->get_name () } @doms);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ exit 0 unless @doms;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach my $dom (@doms) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @disks = get_disks_from_libvirt ($dom);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @domains, { dom => $dom,
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ name => $dom->get_name (),
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ disks => \@disks }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+} elsif (@ARGV == 1) { # One param, could be disk image or domname.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ if (-e $ARGV[0]) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @domains, { name => basename ($ARGV[0]),
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ disks => [ $ARGV[0] ] }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $conn;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- if (@domnames) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- print_title ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- foreach (@domnames) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- eval { do_df ($_); };
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- warn $@ if $@;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ if ($uri) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $conn = Sys::Virt->new (readonly => 1, address => $uri);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ } else {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $conn = Sys::Virt->new (readonly => 1);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $dom = $conn->get_domain_by_name ($ARGV[0])
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ or die __x("{name} is not the name of a libvirt domain\n",
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ name => $ARGV[0]);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @disks = get_disks_from_libvirt ($dom);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @domains, { dom => $dom,
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ name => $dom->get_name (),
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ disks => \@disks }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-} else {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- print_title ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- do_df (@ARGV);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+} else { # >= 2 params, all disk images.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @domains, { name => basename ($ARGV[0]),
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ disks => \@ARGV }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-sub do_df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+sub get_disks_from_libvirt
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my $g;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $dom = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $xml = $dom->get_xml_description ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- if ($uri) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- $g = open_guest (\@_, address => $uri);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- } else {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- $g = open_guest (\@_);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $p = XML::XPath->new (xml => $xml);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @disks = $p->findnodes ('//devices/disk/source/@dev');
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push (@disks, $p->findnodes ('//devices/disk/source/@file'));
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ # Code in Sys::Guestfs::Lib dies here if there are no disks at all.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ return map { $_->getData } @disks;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# Sort the domains by name for display.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+@domains = sort { $a->{name} cmp $b->{name} } @domains;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# Since we got this far, we're somewhat sure we're going to
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# get to print the result, so display the title.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+print_title ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# To minimize the number of times we have to launch the appliance,
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# shuffle as many domains together as we can, but not exceeding 26
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# disks per request. (26 = # of letters in the English alphabet, and
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# we are only confident that /dev/sd[a-z] will work because of various
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# limits).
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+my $n = 0;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+my @request = ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+while (@domains) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ while (@domains) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $c = @{$domains[0]->{disks}};
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ last if $n + $c > 26;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @request, shift @domains;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ multi_df (@request);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+sub multi_df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ local $_;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $g = Sys::Guestfs->new ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my ($d, $disk);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach $d (@_) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach $disk (@{$d->{disks}}) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $g->add_drive_ro ($disk);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
$g->launch ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $has_lvm2 = feature_available ($g, "lvm2");
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my @partitions = get_partitions ($g);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- # Think of a printable name for this domain. Just choose the
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- # first parameter passed to this function, which will work for
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- # most cases (it'll either be the domain name or the first disk
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- # image name).
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my $domname = $_[0];
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
-
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- # Mount each partition in turn, and if mountable, do a statvfs on it.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- foreach my $partition (@partitions) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my %stat;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- eval {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- $g->mount_ro ($partition, "/");
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- %stat = $g->statvfs ("/");
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- };
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- if (!$@) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- print_stat ($domname, $partition, \%stat);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @devices = $g->list_devices ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @partitions = $g->list_partitions ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $n = 0;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach $d (@_) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $name = $d->{name};
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $nr_disks = @{$d->{disks}};
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ # Filter LVM to only the devices applying to the original domain.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @devs = @devices[$n .. $n+$nr_disks-1];
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $g->lvm_set_filter (\@devs) if $has_lvm2;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ # Find which whole devices (RHBZ#590167), partitions and LVs
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ # contain mountable filesystems. Stat those which are
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ # mountable, and ignore the others.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach (@devs) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ try_df ($name, $g, $_, canonical_dev ($_, $n));
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach (filter_partitions (\@devs, @partitions)) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ try_df ($name, $g, $_, canonical_dev ($_, $n));
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ if ($has_lvm2) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach ($g->lvs ()) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ try_df ($name, $g, $_);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $n += $nr_disks;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+sub filter_partitions
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $devs = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @devs = @$devs;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @r;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach my $p (@_) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ foreach my $d (@devs) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ if ($p =~ /^$d\d/) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ push @r, $p;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ last;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- $g->umount_all ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ return @r;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# Calculate the canonical name for a device.
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# eg: /dev/vdb1 when offset = 1
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+# => canonical name is /dev/sda1
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+sub canonical_dev
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ local $_;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $dev = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $offset = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ return $dev unless $dev =~ m{^/dev/.d([a-z])(\d*)$};
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $disk = $1;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $partnum = $2;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $disk = chr (ord ($disk) - $offset);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ return "/dev/sd$disk$partnum"
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+sub try_df
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ local $_;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $domname = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $g = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $dev = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $display = shift || $dev;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my %stat;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ eval {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $g->mount_ro ($dev, "/");
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ %stat = $g->statvfs ("/");
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ };
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ if (!$@) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ print_stat ($domname, $display, \%stat);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ }
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ $g->umount_all ();
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
}
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
sub print_stat
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
{
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
my $domname = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my $partition = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my $dev = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
my $stat = shift;
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
- my @cols = ($domname, $partition);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
+ my @cols = ($domname, $dev);
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
if (!$inodes) {
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
my $bsize = $stat->{bsize}; # block size
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
--
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
1.7.1
|
|
![](https://seccdn.libravatar.org/avatar/2b144df64913845151df534542e1c73358afff4b3b67d9228c548513b08c6d02?s=16&d=retro) |
0882396 |
|