私は、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にありますVGsave それから:
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つだけであり、ファイルシステムが1つだけ必要)、必要な情報を取得する手順を実行します。
- 与えられたファイルシステムから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
を基準に配列に分割します。要素1は空で(最初の要素の前には何もありません/
)、要素2はでdev
、要素3はですopcon
。これは私たちが望むLV名です。 - スクリプトは空きスペース行を
awk
選択しますlsvg
。コロンで区切られた3番目のフィールドは次のテキストですFREE PPs:
(例:)217 (222208 megabytes)
。match()
一致するフィールド(
と数字が必要です。ここでは成功を想定しています!一致は左かっこで始まるため、利用可能なMbの数を抽出するときは、RSTARTをスキップしてRLENGTHから1を減算します。
このスクリプトの出力を別のパイプラインの一部として使用する場合は、printf
「Mb available \ n」部分ではなく数値のみを出力するようにステートメントを調整することをお勧めします。