나는 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
다음 스크립트는 입력에 대해 몇 가지 온전성 검사를 수행한 후(파일 시스템이 하나만 있어야 하며 파일 시스템이 하나만 있어야 함) 필요한 정보를 검색하는 단계를 수행합니다.
- 주어진 파일 시스템에서 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
. 콜론으로 구분된 세 번째 필드는 다음의 텍스트입니다FREE PPs:
(예: )217 (222208 megabytes)
.match()
일치하는 필드(
와 숫자가 필요합니다 . 우리는 여기서 성공을 가정합니다! 일치는 왼쪽 괄호에서 시작하므로 사용 가능한 Mb 수를 추출할 때 RSTART를 건너뛰고 RLENGTH에서 1을 뺍니다.
이 스크립트의 출력을 다른 파이프라인의 일부로 사용하려는 경우 printf
"Mb available\n" 부분이 아닌 숫자만 출력하도록 명령문을 조정하는 것이 좋습니다.