Lvm
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 /opt/OpCon在VG 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)
有什麼方法可以直接知道文件系統可以增長多少空間?
下面的腳本對輸入進行了一些完整性檢查(期望只有一個文件系統,並且它應該存在),然後逐步發現所需的資訊:
- 給定文件系統,從中提取 LV
lsfs
- 使用 LV,從中提取 VG
lslv
- 使用 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”部分。