Como posso descobrir o espaço livre em um PV LVM em formato legível por humanos?

9

Estou procurando uma maneira de obter espaço livre em um volume físico LVM sem precisar usar uma calculadora.

Eu sei que o pvdisplaycomando me mostrará o tamanho de um tamanho do PE e do PE livre e, multiplicando o tamanho do PE pelo PE livre, conheço o espaço livre em KB. Mas eu gostaria de um comando que me diga o espaço livre em megabytes, gigabytes, etc.

A saída de pvdisplayé:

[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

Portanto, o espaço livre nesse caso é 32768 KByte * 221 PE livre = 7241728 KiB ou 6.90625 GiB. Mas isso é muita matemática para se fazer sem uma calculadora ;-)

Existe um comando que pode me dar espaço livre em um volume físico LVM em megabytes / gigabytes?

Josh
fonte
Tenho certeza de que um mestre em perl poderia criar um oneliner. Eu estou trabalhando em um rubi um, mas minhas habilidades rubi oneline são um pouco enferrujado ...
Josh
A matemática também pode ser feita no Bash, embora você provavelmente esteja procurando uma mudança para uma das meia dúzia de ferramentas relacionadas ao LVM.
slm
1
@terdon - adicionou alguma saída
slm
Obrigado @sim! Eu o editei para mostrar minha saída real mais a fórmula, apenas porque meu PV tem ~ 7 GiB livres.
21713 Josh

Respostas:

13

A ferramenta pvsmostra a saída em quaisquer unidades que você desejar.

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

Notei essa menção na página do 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

Exemplo

Você pode substituir as unidades da seguinte forma:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m
slm
fonte
perfeito e me salva do oneliner terrível que eu estava tentando criar!
21713 Josh
3

Bem, eu disse que daria a você uma lista, então aqui está, mas realmente não é muito bom. A resposta da @ slm é obviamente o caminho a percorrer. De qualquer forma, a linha de baixo abaixo assume que o tamanho do PV é expresso em KBytes (o que nem sempre é o caso) e imprime GiB por padrão.

$ 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
fonte
1

Eu sei que estou um pouco atrasado para responder, mas acho que a maneira mais fácil é a seguinte: (As mesmas opções também funcionam para 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
fonte