Bagaimana saya bisa mengetahui ruang kosong pada LVM PV dalam format yang dapat dibaca manusia?

9

Saya mencari cara saya bisa mendapatkan ruang kosong pada volume fisik LVM tanpa harus menggunakan kalkulator.

Saya tahu pvdisplayperintah akan menunjukkan ukuran PE dan PE gratis, dan dengan mengalikan ukuran PE dengan PE gratis saya tahu ruang kosong di KB. Tapi saya ingin perintah yang memberi tahu saya ruang kosong dalam megabita, gigabita, dll.

Output dari pvdisplayadalah:

[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

Jadi ruang kosong dalam hal ini adalah 32768 KByte * 221 Free PE = 7241728 KiB, atau 6.90625 GiB. Tapi itu banyak matematika yang harus dilakukan tanpa kalkulator ;-)

Apakah ada perintah yang dapat memberi saya ruang kosong pada volume fisik LVM dalam megabita / gigabita?

Josh
sumber
Saya yakin perl master bisa menyiapkan oneliner. Saya sedang mengerjakan yang ruby ​​tapi keterampilan ruby ​​oneline saya agak berkarat ...
Josh
Matematika bisa dilakukan di Bash juga, meskipun Anda mungkin mencari peralihan ke salah satu dari 1/2 lusin alat terkait LVM.
slm
1
@terdon - menambahkan beberapa output
slm
Terima kasih @im! Saya mengeditnya untuk menampilkan output aktual saya ditambah formula, hanya karena PV saya benar-benar memiliki ~ 7 GiB gratis.
Josh

Jawaban:

13

Alat pvsmenunjukkan output dalam unit apa pun yang Anda suka.

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

Saya perhatikan penyebutan ini di halaman 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

Contoh

Anda dapat menimpa unit seperti:

$ pvs --units m
  PV         VG             Fmt  Attr PSize     PFree
  /dev/sda2  vg_switchboard lvm2 a--  37664.00m    0m
slm
sumber
sempurna dan menyelamatkan saya dari oneliner mengerikan yang saya coba buat!
Josh
3

Yah, saya katakan saya akan memberi Anda satu liner jadi ini dia tapi sebenarnya tidak terlalu bagus. @ slm jawaban jelas cara untuk pergi. Bagaimanapun, satu-liner di bawah ini mengasumsikan bahwa ukuran PV dinyatakan dalam KBytes (yang tidak selalu terjadi) dan mencetak GiB secara default.

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

saya tahu saya agak terlambat untuk menjawab tetapi saya pikir cara termudah adalah hanya: (Opsi yang sama juga berlaku untuk vgs),

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

/dev/sda2      0g
/dev/sdb   18.40g
/dev/sdc    5.00g
/dev/sdd   14.00g
walid ferra
sumber