Lvm

AIX 系統上有關 FS 的可用空間資訊

  • August 21, 2019

我正在尋找一種更快的方法來了解我在 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 /opt/OpConVG savevg下 然後:

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. 給定文件系統,從中提取 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))"

描述一些可能不明顯的程式碼部分:

  • 用於在冒號上拆分輸出的awk腳本lsfs僅在第 2 行上執行(因為第 1 行是標題)。欄位 2 中的值類似於,因此我們根據正斜杠/dev/opcon將其拆分為數組。fields元素一是空的(在第一個之前什麼都沒有/),元素二是dev,元素三是opcon,我們想要的 LV 名稱。
  • 用於挑選自由空間行的awk腳本;lsvg第三個以冒號分隔的欄位是 之後的文本FREE PPs:,例如217 (222208 megabytes). 我們呼叫match()該欄位以匹配(後跟一些數字。我們在這裡假設成功!因為匹配從左括號開始,所以當我們提取空閒 Mb 的數字時,我們跳過 RSTART 之後的一位並從 RLENGTH 中減去一位。

如果您計劃將此腳本的輸出用作另一個管道的一部分,請考慮將printf語句調整為僅輸出數字,而沒有“Mb available\n”部分。

引用自:https://unix.stackexchange.com/questions/536400