[linux-lvm] perl modules dealing with LVM, and a small request.
Terje Kvernes
terjekv at math.uio.no
Mon Apr 9 23:43:31 UTC 2001
hi. :)
I'm currently writing a set of perl modules to interact with LVM.
the basic difference from what has been done earlier is that these
modules are purely a library. they're not at all dedicated to a GUI
or any such thing. the hope is that these modules might some day be
useful in several different contexts, all sharing the same modules
and the same codebase. the code will be (is) GPL, but it's currently
not really able to do anything, except read data from /proc and
extend LV's.
the structure so far is rather simple, this example code shows the
use of the main module, which is all the caller ever sees.
,----[ sample usage of LVM.pm ]
| use LVM;
|
| print "Module version: $LVM::VERSION\n";
|
| my $lvm = new LVM; # defaults to reading /proc/lvm/globals
|
| print <<"EOT";
| version: $lvm->{'version'} from $lvm->{'date'} (IOP $lvm->{'iop'})
|
| size: $lvm->{'size'}
| active: $lvm->{'time'}
|
| VGs: $lvm->{'vgcount'}. PVs: $lvm->{'pvcount'}.
| LVs: $lvm->{'lvcount'}. (open LVs: $lvm->{'lvopencount'})
|
| EOT
|
| for my $vg (@{$lvm->{'vglist'}}) { # each scalar in the vglist is a LVM::VG object.
| printf " \"$vg->{'name'}\": %s total space, %s free.\n",
| $vg->{'totalkb'},
| $vg->{'freekb'};
|
| print "\n LVs:\n";
|
| for my $lv (@{$vg->{'lvlist'}}) { # each scalar in the lvlist is LVM::LV object
| printf " %10s: %s (%d)\n", $lv->{'name'}, $lv->{'totalkb'},$lv->{'totalpe'};
|
| if ($lv->{'name'} eq 'logs') { # let's resize the 'logs' LV
| $lv->resize(24, 'pe'); # to 24 PE's. kb / mb etc are also valid units
| }
|
| }
| $vg->store(); # not implicit store of changes, must be called explicitly
| }
`----
(I'm guessing people will find it rather straightforward what this
does and what its output is...)
$vg->store() (or even $lvm->store()) propagates the store()-call to
all objects, you could also call $lv->store() manually, if you'd
like. only objects that are changed from their original settings are
altered.
there are no real reasons for not calling store() implicitly, it's
just that I (at least currently :) like to test the modules before
saying "ok". besides, you can always say: "$lv->resize(25, 'pe');
$lv->store();" which will make the change happen there and then.
anyhow, for the request. I'd like a few /proc/lvm/globals to see
what it looks like with a lot of different VG's and such. I
currently have limited possibilities in making major changes to my
LVM-structure. :/
if people want to see the early stuff, I'll make it available upon
request.
--
Terje
More information about the linux-lvm
mailing list