Comment puis-je trouver l'espace libre sur un PV LVM au format lisible par l'homme?

9

Je cherche un moyen d'obtenir l'espace libre sur un volume physique LVM sans avoir à utiliser de calculatrice.

Je sais que la pvdisplaycommande me montrera la taille d'une taille PE ainsi que le PE libre, et donc en multipliant la taille PE par le PE libre, je connais l'espace libre en Ko. Mais je voudrais une commande qui me dit l'espace libre en mégaoctets, gigaoctets, etc.

La sortie de pvdisplayest:

[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

L'espace libre dans ce cas est donc de 32 768 Ko * 221 PE libre = 7241728 Ko, ou 6,90625 Gio. Mais c'est beaucoup de calculs à faire sans calculatrice ;-)

Existe-t-il une commande qui peut me donner l'espace libre sur un volume physique LVM en mégaoctets / gigaoctets?

Josh
la source
Je suis sûr qu'un maître Perl pourrait concocter un oneliner. Je travaille sur un rubis mais mes compétences en ligne rubis sont un peu rouillées ...
Josh
Le calcul pourrait également être fait dans Bash, bien que vous recherchiez probablement un basculement vers l'un des 1/2 douzaines d'outils liés à LVM.
slm
1
@terdon - ajout d'une sortie
slm
Merci @sim! Je l'ai édité pour afficher ma sortie réelle ainsi que la formule, juste parce que mon PV a en fait environ 7 Gio libres.
Josh

Réponses:

13

L'outil pvsaffiche la sortie dans toutes les unités que vous aimez.

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

J'ai remarqué cette mention dans la page de manuel:

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

Exemple

Vous pouvez remplacer les unités comme suit:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m
slm
la source
parfait et me sauve du redoutable oneliner que j'essayais de créer!
Josh
3

Eh bien, j'ai dit que je vous donnerais une doublure alors la voici mais ce n'est vraiment pas très bon. La réponse de @ slm est évidemment la voie à suivre. Quoi qu'il en soit, le one-liner ci-dessous suppose que la taille PV est exprimée en Ko (ce qui n'est pas toujours le cas) et imprime GiB par défaut.

$ 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
la source
1

je sais que je suis un peu en retard pour répondre, mais je pense que la façon la plus simple est juste: (Les mêmes options fonctionnent également pour les 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
la source