显示每个文件系统驻留在哪个hdisk的脚本,用于IBM AIX

我具有以下脚本,该脚本显示IBM AIX的每个文件系统驻留在哪个磁盘上。

#!/bin/ksh
for vg in `lsvg -o`; do 
    for fs in `lsvgfs $vg`; do 
            printf "%-22s" $fs; 
            for disk in `lsvg -p $vg | tail +3 | awk '{print $1}'`; do
                    lspv -l $disk | grep -q " ${fs}$" && printf "%-8s" $disk; 
            done; 
            echo
    done; 
done

输出内容如下:

/apps/data/IAMV1/sys1hdisk189hdisk200hdisk146hdisk151hdisk136hdisk141
/apps/data/IAMV1/sys2hdisk188hdisk201hdisk144hdisk152hdisk137hdisk191

首先,输出将无法正确显示,因为它应该像这样:

/apps/data/IAMV1/sys1    hdisk189 hdisk200 hdisk146 hdisk151 hdisk136 hdisk141
/apps/data/IAMV1/sys2    hdisk188 hdisk201 hdisk144 hdisk152 hdisk137 hdisk191

我需要对其进行升级,以查看磁盘的总空间以及每个文件系统中文件系统使用的空间,例如

/apps/data/IAMV1/sys1    hdisk189 hdisk200 hdisk146 hdisk151 hdisk136 hdisk141
                         1000g    2000g    1000g    1000g    3000g    1000g
                          300g     500g     250g      90g      80g      30g 

/apps/data/IAMV1/sys2    hdisk188 hdisk201 hdisk144 hdisk152 hdisk137 hdisk191
                         1000g    2000g    1000g    1000g    3000g    1000g
                          300g     500g     250g      90g      80g      30g 

在此示例中,fs / apps / data / IAMV1 / sys1使用hdisk189中的300g 等等...说实话,我不知道该怎么做,我知道我可以用这个来拥有磁盘的总空间

getconf DISK_SIZE /dev/hdisk189 

谢谢大家。

g8bp8 回答:显示每个文件系统驻留在哪个hdisk的脚本,用于IBM AIX

我创建了一个初始版本,该版本可能适合您的需求。在AIX 7.1上进行了测试。

我没有带多个PV的vg,所以不确定文本是否正确对齐。

可能的错误:我用lspvawk表示输出{PP大小/总PP /使用的PP /计数),我不知道这在不同的AIX版本中是否有所不同。


deccnt-控制十进制数,并根据需要更改。只需稍作调整,就可以将其作为脚本执行的参数。

如果最长的磁盘名称短于总磁盘大小号,且总磁盘大小号大于8个字符,那么您将看到如下所示的未对齐:

/apps/data/IAMV1/sys1    hdisk189 hdisk200   hdisk146 hdisk151 hdisk136 hdisk141
                         1000g    200000000g 1000g    1000g    3000g    1000g
                          300g         5000g  250g      90g      80g      30g 

/apps/data/IAMV1/sys2    hdisk188 hdisk201 hdisk144 hdisk152     hdisk137 hdisk191
                         1000g    2000g    1000g    10000000000g 3000g    1000g
                          300g     500g     250g             90g   80g      30g

可以通过在此处BEGIN{lng=0;cap=8}')增加较低的8个字符的硬上限来进一步缓解此问题,但这也将增加磁盘列之间的默认间隔。我不相信您会经常看到这种行为,但我想提一提。在任何其他情况下,对齐方式都应该很好。

#!/bin/ksh

# Accuracy
deccnt='2'

# FS name lenght 
fsLng=$(lsvg -l rootvg | awk 'BEGIN{lng=0} !/N\/A/{if(NR>2){if (lng < length($7)){lng=length($7)}}} END{print lng}')
# Disk name lenght | cant be less than 8 
diskLng=$(lspv | awk 'BEGIN{lng=0;cap=8} !/N\/A/{if(NR>2){if(lng < length($1)){lng=length($1)}}} END{if(lng > cap){print lng}else{print cap}}')

for vg in $(lsvg -o)
do
  for fs in $(lsvgfs ${vg})
  do
    line1="$(printf "%-${fsLng}s  " ${fs})"
    line2="$(printf "%-${fsLng}s  " '')"
    line3="$(printf "%-${fsLng}s  " '')"

    for disk in $(lsvg -p $vg | awk '{if(NR>2){print $1}} END{print "hdisk0";print "hdisk0"}')
    do
      set -A diskparam $(lspv ${disk} | awk 'BEGIN{PPsize=0;PPtotal=0;PPused=0}
        /^PP SIZE:/{ if($4~"gigabyte" ){PPsize=$3}else 
                     if($4~"megabyte" ){PPsize=$3/1000}else 
                     if($4~"kilobyte" ){PPsize=$3/1000000} }
        /^TOTAL PPs:/{ PPtotal=$3 }
        /^USED PPs:/{ PPused=$3 }
        END{ GBtotal=PPtotal*PPsize
             GBused=PPused*PPsize
             print length(int(GBtotal))" "GBtotal" "GBused
           }
      ')

      NumWdt=$(( ${diskparam[0]}+${deccnt} ))
      [[ ${deccnt} -ne  0 ]] && (( NumWdt=NumWdt+1 )) # +1 due we have decimal point char

      if [[ ${NumWdt} -lt ${diskLng} ]]
      then
        colWdt=${diskLng}
      else
        colWdt=$(( ${NumWdt}+1 )) # +1 hence 'g' char make line2-3 larger if NumWdt control the column width. 
      fi

      if lspv -l ${disk} | grep -q " ${fs}$"
      then
        line1="${line1} $(printf "%-${diskLng}s%-$(( ${colWdt}-${diskLng} ))s" ${disk} '')"
        line2="${line2} $(printf "%${NumWdt}.${deccnt}f%-$(( ${colWdt}-${NumWdt} ))s" ${diskparam[1]} 'g')"
        line3="${line3} $(printf "%${NumWdt}.${deccnt}f%-$(( ${colWdt}-${NumWdt} ))s" ${diskparam[2]} 'g')"
      fi
    done
    print "${line1}\n${line2}\n${line3}\n"
  done
  print
done
本文链接:https://www.f2er.com/2891073.html

大家都在问