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?


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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.