You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM AIX文件系统对应磁盘脚本优化:修正格式并添加空间信息

解决AIX文件系统关联hdisk的格式与空间展示问题

这里有个调整后的Korn Shell脚本,既解决了原脚本输出无空格分隔的问题,还新增了你需要的磁盘总空间、文件系统在对应hdisk上的已用空间展示功能:

#!/bin/ksh
# 打印表头,提升可读性
printf "%-35s %-25s %-25s %-25s\n" "文件系统" "关联hdisk" "磁盘总空间(GB)" "文件系统已用空间(GB)"
printf "%s\n" "--------------------------------------------------------------------------------------------------------"

for vg in `lsvg -o`; do
  for fs in `lsvgfs $vg`; do
    # 初始化存储数组,避免循环间的残留数据
    unset hdisk_list size_list used_list
    typeset -a hdisk_list size_list used_list

    # 遍历当前卷组下的所有物理磁盘
    for disk in `lsvg -p $vg | tail +3 | awk '{print $1}'`; do
      # 检查当前磁盘是否包含该文件系统对应的逻辑卷(保留原脚本的匹配逻辑)
      if lspv -l $disk | grep -q " ${fs}$"; then
        # 获取磁盘总空间:转换扇区数为GB(AIX默认扇区512字节)
        disk_size=$(( $(getconf DISK_SIZE /dev/$disk) * 512 / 1024 / 1024 / 1024 ))
        # 获取该文件系统在当前磁盘上的已用空间:转换MB为GB
        used_mb=$(lspv -l $disk | grep " ${fs}$" | awk '{print $4}' | sed 's/M//')
        used_space=$(( used_mb / 1024 ))

        # 将结果存入对应数组
        hdisk_list+=("$disk")
        size_list+=("${disk_size}G")
        used_list+=("${used_space}G")
      fi
    done

    # 格式化输出:用空格连接数组元素,确保分隔清晰
    printf "%-35s %-25s %-25s %-25s\n" \
      "$fs" \
      "$(IFS=' '; echo "${hdisk_list[*]}")" \
      "$(IFS=' '; echo "${size_list[*]}")" \
      "$(IFS=' '; echo "${used_list[*]}")"
  done
done

关键改动说明:

  1. 修复空格分隔问题:
    原脚本直接拼接printf输出导致无空格,现在用数组存储每个文件系统对应的hdisk、空间数据,最后通过IFS=' '将数组元素用空格连接,确保输出格式清晰。

  2. 添加磁盘总空间计算:
    使用getconf DISK_SIZE /dev/$disk获取磁盘总扇区数,再转换为GB单位(AIX默认每个扇区是512字节),如果需要更精确的浮点数值,可以替换为awk计算:

    disk_size=$(getconf DISK_SIZE /dev/$disk | awk '{printf "%.2fG", ($1 * 512) / 1024 / 1024 / 1024}')
    
  3. 添加文件系统已用空间计算:
    从lspv -l $disk的输出中提取对应逻辑卷的已用空间(默认单位是MB),转换为GB后存入数组,最后和hdisk、总空间对应展示。

  4. 优化可读性:
    新增了表头和分隔线,让输出结构一目了然,同时在循环前重置数组,避免不同文件系统间的数据污染。

注意事项:

  • 如果你的逻辑卷名称和文件系统挂载点不一致,原脚本的grep " ${fs}$"可能无法匹配,此时需要先通过mount | grep "$fs" | awk '{print $1}'获取逻辑卷设备名(如/dev/lv_apps),再提取LV名称(lv_apps)用于匹配。
  • 确保使用的Korn Shell版本支持数组(建议ksh93及以上),老版本ksh可能需要调整数组的使用方式。

内容的提问来源于stack exchange,提问作者TenEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:11:03