[linux-lvm] Re: Clean up /proc/lvm/global formatting

Andreas Dilger adilger at turbolabs.com
Fri Oct 26 13:43:01 UTC 2001


"Heinz J . Mauelshagen" <mauelshagen at sistina.com> writes:
> The only objection which comes to my mind is related to potential parsers
> out there.  Please request on the linux-lvm, if soembody complains about
> changing the output format (to the better one you come up with :-)
> because of potential parser breaks.

So, the question is - does anyone parse the output of /proc/lvm/global for
scripts?  I would hope not, since it is quite a mess, and you are better
off reading from /proc/VGs/<vg>/{LVs,PVs}/* for your information.

Cheers, Andreas

> On Wed, Oct 24, 2001 at 10:41:48PM -0600, Andreas Dilger wrote:
> > Heinz,
> > I'm wondering if you have any objection to me committing a change to
> > lvm-fs.c which cleans up the output formatting of /proc/lvm/global?  It is a
> > rather large patch line-wise (it includes some code formatting changes),
> > but does some other things as well.
> > 
> > It removes the third pass through the VG/LV/PV structs when collecting the
> > {vg,lv,pv}_counts values*, and also ensures that we do not have a buffer
> > overrun if a VG/LV/PV is added at the same time we are reading from
> > /proc/lvm/global** (which could easily happen if the LVM config is changed
> > between the first and second passes).
> > 
> > (*) Since the first time through we don't actually care about the actual
> >     values of {vg,lv,pv}_counts (we are only counting string lengths) it
> >     doesn't matter what these values are.  As a result, we can use the
> >     first pass to do find {vg,lv,pv}_counts and add a small margin onto
> >     the total string length to accomodate the final number of digits.
> > (**)We use snprintf() when printing into the buffer, to avoid any buffer
> >     overflows when generating the output.  If we run out of buffer space
> >     because a VG/LV/PV was added while we were writing in the second pass
> >     we restart with a larger buffer.
> > 
> > The output format goes from (old and new samples):
> > 
> > =========================== old format =====================================
> > LVM driver version 0.9.1_beta2 (18/01/2001)
> > 
> > Total:  2 VG  3 PV  6 LV (2 LVs open)
> > Global: 31944 bytes malloced   IOP version: 10   5 days 21:18:14 active
> > 
> > VG:  vgboot  [1 PV, 1 LV/0 open 0 times]  PE Size: 1024 KB
> >   Usage [KB/PE]:    7168 /7 total     7168 /7 used       0 /0  free
> >   PV:  [AA] hda2                      7168 /7           7168 /7              0 /0    
> >     LV:  [AWDL  ] lvboot                        7168 /7        close
> > 
> > VG:  vgtest  [2 PVs, 5 LVs/2 open 2 times]  PE Size: 4096 KB
> >   Usage [KB/PE]: 6152192 /1502 total  5935104 /1449 used  217088 /53 free
> >   PVs: [AA] hda6                   3076096 /751      3076096 /751            0 /0    
> >        [AA] hda8                   3076096 /751      2859008 /698        217088 /53    
> >     LVs: [AWDL  ] lvtest                     5124096 /1251     1x open
> >          [AWDL  ] lvjournal                   131072 /32       close
> >          [AWDL  ] lvreiser                    102400 /25       close
> >          [AWDL  ] lvjbd                        65536 /16       close
> >          [AWDL  ] lvswap                      512000 /125      1x open
> > =========================== new format =====================================
> > LVM module LVM version 1.0.1-rc4(03/10/2001)
> > 
> > Total:  2 VG  3 PV  6 LV (2 LV open)         
> > Global: 31944 bytes allocated  IOP version: 10  Active: 8d12:12:13
> > 
> > VG:  vgboot  [1 PV, 1 LV/0 open]  PE Size: 1024 kB
> >   Total Used Free [kB/PE]:         7168/7           7168/7              0/0
> >   PV: [AA] hda2                    7168/7           7168/7              0/0
> >   LV: [AWDL  ] lvboot                               7168/7     (closed)
> > 
> > VG:  vgtest  [2 PV, 5 LV/2 open]  PE Size: 4096 kB
> >   Total Used Free [kB/PE]:      6152192/1502     5935104/1449      217088/53
> >   PV: [AA] hda6                 3076096/751      3076096/751            0/0
> >   PV: [AA] hda8                 3076096/751      2859008/698       217088/53
> >   LV: [AWDL  ] lvtest                            5124096/1251    1x open
> >   LV: [AWDL  ] lvjournal                          131072/32     (closed)
> >   LV: [AWDL  ] lvreiser                           102400/25     (closed)
> >   LV: [AWDL  ] lvjbd                               65536/16     (closed)
> >   LV: [AWDL  ] lvswap                             512000/125     1x open
> > ============================================================================
> > 
> > Notable differences:
> > 1) all of the total, used, free columns are aligned so it is easy to compare
> >    PV/VG/LV usage of each in either kB or PE sizes
> > 2) all of the PV and LV rows are marked as such
> > 3) only show "open x times" if the number of opens is different than the
> >    number of open LVs 
> > 4) remove "plurals" from names (not very important anyways)
> > 5) remove annoying line wrap problems from PV output
> > 6) more space to hold LV names
> > 
> > I kept the order and number of all the columns (mostly) consistent with the
> > original output, in case it is parsed by scripts (shouldn't be very common
> > in any case).
> > 
> > I _was_ going to make all of the size outputs in MB instead of kB (only
> > very strange setups would have PE size < 1MB, and it would give us more
> > room for large LVs), but then I decided against it.  It would really
> > confuse scripts, and all other disk values are in kB also (like
> > /proc/partitions, df, du, etc).
> >
> > As it is, I have left room for 9.99TB values.
--
Andreas Dilger  \ "If a man ate a pound of pasta and a pound of antipasto,
                 \  would they cancel out, leaving him still hungry?"
http://www-mddsp.enel.ucalgary.ca/People/adilger/               -- Dogbert





More information about the linux-lvm mailing list