LVM(3pm)

πŸ“¦
version 0.17 Β· 3 versions
, in ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

okay so bestie, this is LVM(3pm) from the User Contributed Perl Documentation, and the module is Linux::LVM β€” a Perl extension for accessing Logical Volume Manager(LVM) data structures on Linux. that's it, that's the whole vibe. it's giving "let me peek inside your volume groups" πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

use Linux::LVM;
Linux::LVM->units('G');

literally two lines and you're in. iconic.


✨ ABSTRACT ✨

just so you know, the live data used in the examples is included in the DESCRIPTION area for your convenience and reference. so when you see real-looking numbers down there? that's on purpose, bestie, it's a gift πŸŽ€


πŸ‘‘ DESCRIPTION πŸ‘‘

this is the main character section, so buckle up. every one of these routines is listed out for you, no skips, no skimming, periodt.

  • units() β€” get or set the units used to report sizes of LVs, PVs, etc. legal values: hbskmgtpeHBSKMGTPE. and yeah, if you wanna know how these work, see the man lvm documentation of --units. 🫢
  • get_volume_group_list() β€” this routine will return an array that contains the names of the volume groups.

so like:

@vgs = get_volume_group_list(); print "@vgs \n";

Would yield the following: vg00. one vg, living her best life.

  • get_volume_group_information($) β€” this routine will return all of the volume group information about the specified volume group.
%vg = get_volume_group_information("vg00");
foreach(sort keys %vg) {
   print "$_ = $vg{$_}\n";
}

Would yield the following:

access = read/write
act_pv = 2
alloc_pe = 3840
alloc_pe_size = 15
alloc_pe_size_unit = GB
cur_lv = 3
cur_pv = 2
free_pe = 864
free_pe_size = 3.38
free_pe_size_unit = GB
max_lv = 256
max_lv_size = 255.99
max_lv_size_unit = GB
max_pv = 256
open_lv = 0
pe_size = 4
pe_size_unit = MB
status = available/resizable
total_pe = 4704
uuid = BBq8si-NyRR-9ZNW-3J5e-DoRO-RBHK-ckrszi
vg_number = 0
vg_size = 18.38
vg_size_unit = GB
vgname = vg00

look at that uuid. she's gorgeous. πŸ”₯

  • get_logical_volume_information($) β€” this routine will return all of the logical volume information associated with the specified volume group.
%lv = get_logical_volume_information("vg00");
foreach $lvname (sort keys %lv) {
    foreach(sort keys %{$lv{$lvname}}) {
        print "$_ = $lv{$lvname}->{$_}\n";
    }
    print "\n";
}

Would yield the following results:

alloc_le = 1024
allocation = next free
cur_le = 1024
device = 58:0
lv_number = 1
lv_size = 4
lv_size_unit = GB
name = /dev/vg00/lvol1
open_lv = 0
read_ahead = 1024
status = available
write_access = read/write

alloc_le = 1280
allocation = next free
cur_le = 1280
device = 58:1
lv_number = 2
lv_size = 5
lv_size_unit = GB
name = /dev/vg00/lvol2
open_lv = 0
read_ahead = 1024
status = available
write_access = read/write

alloc_le = 1536
allocation = next free
cur_le = 1536
device = 58:2
lv_number = 3
lv_size = 6
lv_size_unit = GB
name = /dev/vg00/lvol3
open_lv = 0
read_ahead = 1024
status = available
write_access = read/write

three whole logical volumes. the way that they're all "next free" and "available"… we love a consistent queen. πŸ’œ

  • get_physical_volume_information($) β€” this routine will return all of the information information about the physical volumes assigned to the specified volume group. (yes, "information information". the original said it twice and honestly? relatable. keeping it.)
%pv = get_physical_volume_information("vg00");
foreach $pvname (sort keys %pv) {
    foreach(sort keys %{$pv{$pvname}}) {
        print "$_ = $pv{$pvname}->{$_}\n";
    }
    print "\n";
}

Would yield the following results:

device = /dev/hda3
free_pe = 0
pv_number = 1
status = available / allocatable
total_pe = 2160

device = /dev/hda4
free_pe = 864
pv_number = 2
status = available / allocatable
total_pe = 2544
  • get_lv_info($) β€” this routine will return all of the information about the specified logical volume. the information will be returned in a hash.
get_lv_info
%lv = get_lv_info("/dev/vg00/lvol1");
foreach (sort keys %lv) {
    print "$_ = $lv{$_} \n";
}

Would yield the following results:

access = read/write
alloc_le = 1024
allocation = next free
block_device = 58:0
current_le = 1024
lv_name = /dev/vg00/lvol1
lv_number = 1
lv_open = 0
read_ahead = 1024
size = 4
size_unit = GB
status = available
vg_name = vg00
  • get_pv_info($) β€” this routine will return all of the information about the specified physical volume. the information will be returned in a hash.
%pv = get_pv_info("/dev/hda3");
foreach (sort keys %pv) {
    print "$_ = $pv{$_} \n";
}

Would yield the following results:

alloc_pe = 2160
allocatable = yes (but full)
free_pe = 0
num_lvols = 2
pe_size = 4096
pe_size_unit = KByte
pv_name = /dev/hda3
pv_number = 1
sectors = 17703630
size = 8.44
size_info = NOT usable 4.19 MB [LVM: 136 KB]
size_unit = GB
status = available
total_pe = 2160
uuid = 2c5ADu-oEdt-ovCe-rqp0-MWpF-I5u1-8XigH4
vg_name = vg00

🌸 Command Output Used In The Above Examples: /sbin/vgdisplay -v 🌸

this is the raw source material for everything above, bestie. no cap, this is where the numbers came from. keep it, love it, it's canon:

--- Volume group ---
VG Name               vg00
VG Access             read/write
VG Status             available/resizable
VG #                  0
MAX LV                256
Cur LV                3
Open LV               0
MAX LV Size           255.99 GB
Max PV                256
Cur PV                2
Act PV                2
VG Size               18.38 GB
PE Size               4 MB
Total PE              4704
Alloc PE / Size       3840 / 15 GB
Free  PE / Size       864 / 3.38 GB
VG UUID               BBq8si-NyRR-9ZNW-3J5e-DoRO-RBHK-ckrszi

--- Logical volume ---
LV Name                /dev/vg00/lvol1
VG Name                vg00
LV Write Access        read/write
LV Status              available
LV #                   1
# open                 0
LV Size                4 GB
Current LE             1024
Allocated LE           1024
Allocation             next free
Read ahead sectors     1024
Block device           58:0

--- Logical volume ---
LV Name                /dev/vg00/lvol2
VG Name                vg00
LV Write Access        read/write
LV Status              available
LV #                   2
# open                 0
LV Size                5 GB
Current LE             1280
Allocated LE           1280
Allocation             next free
Read ahead sectors     1024
Block device           58:1

--- Logical volume ---
LV Name                /dev/vg00/lvol3
VG Name                vg00
LV Write Access        read/write
LV Status              available
LV #                   3
# open                 0
LV Size                6 GB
Current LE             1536
Allocated LE           1536
Allocation             next free
Read ahead sectors     1024
Block device           58:2

--- Physical volumes ---
PV Name (#)           /dev/hda3 (1)
PV Status             available / allocatable
Total PE / Free PE    2160 / 0

PV Name (#)           /dev/hda4 (2)
PV Status             available / allocatable
Total PE / Free PE    2544 / 864

🌈 SEE ALSO 🌈

go read these next, bestie, they're the whole friend group:

  • vgdisplay(1M)
  • lvdisplay(1M)
  • pvdisplay(1M)

🫢 AUTHOR 🫢

Chad Kerner, <chadkerner@yahoo.com> β€” thank you for your service, king. πŸ‘‘


Copyright 2003 by Chad Kerner

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

fr fr, that's the license, don't skip it, it's important πŸ’–

and that's the whole page, babes. this one was written for perl v5.36.0 and dates all the way back to 2022-10-13 β€” so yes, it's vintage, and yes, it still ate. go forth and vgdisplay -v responsibly. πŸ’…βœ¨

πŸ“¦ where this page comes from