AIX系统上FS的可用空间信息

AIX系统上FS的可用空间信息

我正在寻找一种更快的方法来了解 AIX 系统上的文件系统有多少可用空间。目前,我正在使用:

lsvg -o | lsvg -i -l
savevg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
logsave             jfs2log    1       1       1    open/syncd    N/A
rmanlvp             jfs2       282     282     1    open/syncd    /oradata/rman
opcon               jfs2       4       4       1    open/syncd    /opt/OpCon

这样我就知道我的FS /选择/OpCon是在VG保存 然后 :

lsvg savevg
VOLUME GROUP:       savevg                   VG IDENTIFIER:  00f612c600004c000000014c2c91c0fb
VG STATE:           active                   PP SIZE:        1024 megabyte(s)
VG PERMISSION:      read/write               TOTAL PPs:      699 (715776 megabytes)
MAX LVs:            256                      FREE PPs:       217 (222208 megabytes)

有没有办法直接知道文件系统有多少可用空间?

答案1

下面的脚本对输入进行一些健全性检查(期望只有一个文件系统,并且它应该存在),然后按步骤发现所需的信息:

  1. 给定文件系统,从中提取 LVlsfs
  2. 使用 LV,从 中提取 VGlslv
  3. 使用 VG,从中提取可用空间lsvg

这是脚本:

#!/bin/sh

# input: a filesystem
# output: free MB in the containing VG

if [ "$#" -ne 1 ]
then
  printf "Usage: %s [ fs ]\n" "$0" >&2
  exit 1
fi

if ! /usr/sbin/lsfs -c "$1" > /dev/null 2>&1
then
  printf "Error: filesystem %s not found\n" "$1" >&2
  exit 2
fi

lv=$(/usr/sbin/lsfs -c "$1" |
        awk -F: 'NR == 2 {
                           split($2, fields, "/");
                           print fields[3]
                         }')
vg=$(LANG=C lslv "$lv" 2>/dev/null | awk '/VOLUME GROUP/ { print $6 }')
copies=$(LANG=C lslv "$lv" 2>/dev/null | awk '/^COPIES:/ {print $2}')
mb=$(LANG=C /usr/sbin/lsvg "$vg" |
  awk -F: '/FREE PP/ {match($3, /\([[:digit:]]*/); print substr($3, RSTART+1, RLENGTH-1)}')
printf "%d Mb available\n" "$((mb / copies))"

描述一下代码中可能不明显的一些部分:

  • 的脚本awklsfs输出分割为冒号,并且仅在第 2 行上运行(因为第 1 行是标题)。字段 2 中的值类似于/dev/opcon,因此我们fields根据正斜杠将其拆分为数组。元素一为空(第一个之前没有任何内容/),元素二为dev,元素三为opcon,即我们想要的 LV 名称。
  • 的脚本awk挑选lsvg出自由空间线;第三个以冒号分隔的字段是 后的文本FREE PPs:,例如217 (222208 megabytes)。我们要求match()该字段匹配(后跟一些数字。我们假设这里成功了!因为匹配从左括号开始,所以当我们提取空闲 Mb 的数字时,我们会跳过 RSTART 并从 RLENGTH 中减去 1。

如果您计划将此脚本的输出用作另一个管道的一部分,请考虑调整语句printf以仅输出数字,而不输出“Mb available\n”部分。

相关内容