LVM + pvs + 如何获取pvs结果

LVM + pvs + 如何获取pvs结果

我们想要编写获取Pfree大小但使用整数而不是浮点数的命令

 pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  vg   lvm2 a--  277.97g 111.97g

例如下面pvs我们可以做

pvs --units g | awk '{print $NF}' | sed s'/\./ /g' | awk '{print $1}' | tail -1

它给了

111

但在不同的情况下,我们得到两条或多PV条线然后需要计算总数Pfree

示例1

pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  vg   lvm2 a--  149.51g 53.51g
  /dev/sda3  vg   lvm2 a--   50.00g   2.1g
  

示例2

   pvs
  PV         VG   Fmt  Attr PSize   PFree
  /dev/sda2  vg   lvm2 a--  149.51g 520.00m
  /dev/sda3  vg   lvm2 a--   50.00g  3.51g

所以我们想搜索 lvm 命令,它可以给出 Giga 的计算结果

关于示例 1 ,我们应该得到55.6

或者

关于示例2,我们应该得到4.2

lvm 有什么建议可以实现这个魔法吗?

如果没有,我将很感激得到awk/sed/perl可以提供帮助的语法

答案1

仅获得 PV 可用空间pvs

# pvs -o pv_free --unit=g --no-suffix --no-heading 
   1.00
   0.31

并与bc

# pvs -o pv_free --unit=g --no-suffix --no-heading | paste -s -d+ - | bc
1.31

答案2

或者稍微不优雅且相当不必要地使用 awk (与 Vojtech 的解决方案相比),可以根据您的目的进行调整(因为您已经提到了您对 awk 的渴望):

[root@localhost Documente]# lvs --no-heading --unit=g
  root cl -wi-ao---- 17,00g
  swap cl -wi-ao----  2,00g
[root@localhost Documente]# lvs --no-heading --unit=g | awk '{sum+=$4} END {print sum}'
19

但我个人会坚持我上面的答案的简单性。

相关内容