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
关键改动说明:
修复空格分隔问题:
原脚本直接拼接printf输出导致无空格,现在用数组存储每个文件系统对应的hdisk、空间数据,最后通过IFS=' '将数组元素用空格连接,确保输出格式清晰。添加磁盘总空间计算:
使用getconf DISK_SIZE /dev/$disk获取磁盘总扇区数,再转换为GB单位(AIX默认每个扇区是512字节),如果需要更精确的浮点数值,可以替换为awk计算:disk_size=$(getconf DISK_SIZE /dev/$disk | awk '{printf "%.2fG", ($1 * 512) / 1024 / 1024 / 1024}')添加文件系统已用空间计算:
从lspv -l $disk的输出中提取对应逻辑卷的已用空间(默认单位是MB),转换为GB后存入数组,最后和hdisk、总空间对应展示。优化可读性:
新增了表头和分隔线,让输出结构一目了然,同时在循环前重置数组,避免不同文件系统间的数据污染。
注意事项:
- 如果你的逻辑卷名称和文件系统挂载点不一致,原脚本的
grep " ${fs}$"可能无法匹配,此时需要先通过mount | grep "$fs" | awk '{print $1}'获取逻辑卷设备名(如/dev/lv_apps),再提取LV名称(lv_apps)用于匹配。 - 确保使用的Korn Shell版本支持数组(建议ksh93及以上),老版本ksh可能需要调整数组的使用方式。
内容的提问来源于stack exchange,提问作者TenEM
相关产品推荐
相关产品推荐

