Как я могу найти свободное место на LVM PV в удобочитаемом формате?

9

Я ищу способ получить свободное место на физическом томе LVM без использования калькулятора.

Я знаю, что pvdisplayкоманда покажет мне размер размера PE, а также свободный PE, и, таким образом, умножив размер PE на свободный PE, я знаю свободное место в КБ. Но я бы хотел команду, которая сообщает мне свободное место в мегабайтах, гигабайтах и ​​т. Д.

Вывод 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

Таким образом, в данном случае свободное пространство составляет 32768 КБ * 221 Свободного PE = 7241728 КБ или 6,90625 ГБ. Но это много математики, чтобы обойтись без калькулятора ;-)

Есть ли команда, которая может дать мне свободное место на физическом томе LVM в мегабайтах / гигабайтах?

мистифицировать
источник
Я уверен, что Perl-мастер мог бы взбить лайнер. Я работаю над рубином, но мои навыки работы с ruby ​​oneline немного ржавые ...
Джош
Математика также может быть выполнена в Bash, хотя вы, вероятно, ищете переход на один из 1/2 дюжины инструментов, связанных с LVM.
SLM
1
@terdon - добавил вывод
slm
Спасибо @ сим! Я отредактировал его, чтобы показать мой фактический результат плюс формулу, просто потому, что у моего PV на самом деле ~ 7 ГБ бесплатно.
Джош

Ответы:

13

Инструмент pvsпоказывает результат в любых единицах измерения, которые вам нравятся.

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

Я заметил это упоминание на странице руководства:

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

пример

Вы можете переопределить единицы следующим образом:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m
SLM
источник
совершенство и спасает меня от ужасного одиночка, которого я пытался создать!
Джош
3

Ну, я сказал, что дам тебе один лайнер, так что вот оно, но на самом деле это не очень хорошо. Ответ @ slm, очевидно, путь. В любом случае, нижняя строка ниже предполагает, что размер PV выражается в килобайтах (что не всегда так) и печатает 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
Тердон
источник
1

я знаю, что немного поздно ответить, но я думаю, что самый простой способ это просто: (те же параметры работают и для VGS),

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

/dev/sda2      0g
/dev/sdb   18.40g
/dev/sdc    5.00g
/dev/sdd   14.00g
Валид Феррас
источник