Wie kann ich den freien Speicherplatz auf einem LVM-PV in einem für Menschen lesbaren Format ermitteln?

9

Ich suche nach einer Möglichkeit, den freien Speicherplatz auf einem physischen LVM-Volume zu erhalten, ohne einen Taschenrechner verwenden zu müssen.

Ich weiß, dass der pvdisplayBefehl mir die Größe einer PE-Größe sowie die freie PE anzeigt. Durch Multiplizieren der PE-Größe mit der freien PE kenne ich den freien Speicherplatz in KB. Aber ich hätte gerne einen Befehl, der mir den freien Speicherplatz in Megabyte, Gigabyte usw. angibt.

Die Ausgabe von pvdisplayist:

[root@df02 mysql]# pvdisplay
  /dev/cdrom: open failed: No medium found
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               MMB
  PV Size               29.71 GB / not usable 19.77 MB
  Allocatable           yes 
  PE Size (KByte)       32768
  Total PE              950
  Free PE               221
  Allocated PE          729
  PV UUID               QfZGfn-a3VV-IRkw-bV9g-6iqm-zXjN-y5e6gr

Der freie Speicherplatz in diesem Fall beträgt also 32768 KByte * 221 Free PE = 7241728 KiB oder 6,90625 GiB. Aber das ist viel Mathe ohne Taschenrechner ;-)

Gibt es einen Befehl, der mir den freien Speicherplatz auf einem physischen LVM-Volume in Megabyte / Gigabyte zur Verfügung stellt?

Josh
quelle
Ich bin sicher, ein Perl-Meister könnte einen Oneliner zaubern. Ich arbeite an einem Rubin, aber meine Rubin-Online-Fähigkeiten sind etwas verrostet ...
Josh
Die Mathematik könnte auch in Bash durchgeführt werden, obwohl Sie wahrscheinlich nach einem Wechsel zu einem der 1/2 Dutzend LVM-bezogenen Tools suchen.
slm
1
@terdon - einige Ausgabe hinzugefügt
slm
Danke @sim! Ich habe es bearbeitet, um meine tatsächliche Ausgabe plus die Formel anzuzeigen, nur weil meine PV tatsächlich ~ 7 GiB frei hat.
Josh

Antworten:

13

Das Tool pvszeigt die Ausgabe in beliebigen Einheiten an.

$ pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  MMB  lvm2 a--  29.69G 6.91G

Ich habe diese Erwähnung in der Manpage bemerkt:

--units hHbBsSkKmMgGtTpPeE
       All  sizes  are  output in these units: (h)uman-readable, (b)ytes, 
       (s)ectors, (k)ilobytes, (m)egabytes, (g)igabytes,(t)erabytes, 
       (p)etabytes, (e)xabytes.  Capitalise to use multiples of 1000 (S.I.) 
       instead of 1024.  Can also specify custom units e.g. --units 3M

Beispiel

Sie können die Einheiten wie folgt überschreiben:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m
slm
quelle
perfekt und rettet mich vor dem schrecklichen Oneliner, den ich erschaffen wollte!
Josh
3

Nun, ich sagte, ich würde dir einen Einzeiler geben, also hier ist es, aber es ist wirklich nicht sehr gut. Die Antwort von @ slm ist offensichtlich der richtige Weg. Wie auch immer, der folgende Einzeiler geht davon aus, dass die PV-Größe in KByte ausgedrückt wird (was nicht immer der Fall ist) und druckt standardmäßig GiB.

$ pvdisplay | perl -plne '$f=$1 if /Free PE\s*(\d+)/; 
                        $s=$1 if /PE Size.*?(\d+)/; 
                        print "  Free Space\t\t",($s*$f)/1048576," GiB" if /UUID/'
  /dev/cdrom: open failed: No medium found
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               MMB
  PV Size               29.71 GB / not usable 19.77 MB
  Allocatable           yes 
  PE Size (KByte)       32768
  Total PE              950
  Free PE               221
  Allocated PE          729
  Free Space            6.90625 GiB
  PV UUID               QfZGfn-a3VV-IRkw-bV9g-6iqm-zXjN-y5e6gr
terdon
quelle
1

Ich weiß, dass ich etwas spät dran bin, um zu antworten, aber ich denke, der einfachste Weg ist nur: (Gleiche Optionen funktionieren auch für VGS),

$ pvs -o name,free --units g --noheadings

/dev/sda2      0g
/dev/sdb   18.40g
/dev/sdc    5.00g
/dev/sdd   14.00g
Walid Ferras
quelle