¿Cómo puedo encontrar el espacio libre en un PV LVM en formato legible para humanos?


9

Estoy buscando una manera de obtener el espacio libre en un volumen físico LVM sin tener que usar una calculadora.

Sé que el pvdisplaycomando me mostrará el tamaño de un PE, así como el PE libre, y por lo tanto, al multiplicar el tamaño de PE por el PE libre, conozco el espacio libre en KB. Pero me gustaría un comando que me diga el espacio libre en megabytes, gigabytes, etc.

La salida de pvdisplayes:

[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

Entonces, el espacio libre en este caso es 32768 KByte * 221 Free PE = 7241728 KiB, o 6.90625 GiB. Pero eso es mucho matemático sin una calculadora ;-)

¿Hay un comando que me puede dar el espacio libre en un volumen físico LVM en megabytes / gigabytes?


Estoy seguro de que un maestro de Perl podría preparar una línea. Estoy trabajando en uno de rubí, pero mis habilidades en línea de rubí están un poco oxidadas ...
Josh

Las matemáticas también se pueden hacer en Bash, aunque probablemente esté buscando un cambio a una de las 1/2 docenas de herramientas relacionadas con LVM.
slm

1
@terdon - agregó algo de salida
slm

Gracias @sim! Lo edité para mostrar mi salida real más la fórmula, solo porque mi PV realmente tiene ~ 7 GiB gratis.
Josh

Respuestas:


13

La herramienta pvsmuestra la salida en las unidades que desee.

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

Noté esta mención en la página del manual:

--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

Ejemplo

Puede anular las unidades de esta manera:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m

¡perfecto y me salva del horrible trazador de líneas que intentaba crear!
Josh

3

Bueno, dije que te daría un trazador de líneas, así que aquí está, pero realmente no es muy bueno. La respuesta de @ slm es obviamente el camino a seguir. De todos modos, la línea de abajo supone que el tamaño de PV se expresa en KBytes (que no siempre es el caso) e imprime GiB por defecto.

$ 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

1

Sé que llego un poco tarde para responder, pero creo que la forma más fácil es simplemente: (Las mismas opciones también funcionan para vgs),

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

/dev/sda2      0g
/dev/sdb   18.40g
/dev/sdc    5.00g
/dev/sdd   14.00g
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.