The PVC is stored on the vSAN datastore, and the customer wants to know the actual disk usage occupied by backend vsan objects.
vSAN 7.x
vSAN 8.x
CNS
1. Install GOVC
2. Access to the vCenter
export GOVC_INSECURE=1
export GOVC_URL='https://[email protected]:<SSO_PW>@<VCENTER_IP>'
3. Get the volume info
govc volume.ls > volumes.txt
Output similar to:
#######-####-####-####-########### pvc-########-####-####-####-###########
#######-####-####-####-########### pvc-########-####-####-####-###########
4. Copy the text file to ESXi
5. Run the script
#!/bin/sh
FCD_DIR="/vmfs/volumes/vsanDatastore/fcd"
VOLUME_MAP_FILE="volumes.txt"
# 检查映射文件是否存在
if [ ! -f "$VOLUME_MAP_FILE" ]; then
echo "❌ Volume map file '$VOLUME_MAP_FILE' 不存在"
exit 1
fi
echo "🔍 正在处理 CNS Volume → PVC 映射文件: $VOLUME_MAP_FILE"
echo "📦 FCD 路径: $FCD_DIR"
echo
# 读取映射文件中的每一行
while read -r LINE; do
# 忽略空行或注释
[ -z "$LINE" ] && continue
echo "$LINE" | grep -q '^#' && continue
# 拆分 volume ID 和 PVC 名
CNS_ID=$(echo "$LINE" | awk '{print $1}')
PVC_NAME=$(echo "$LINE" | awk '{print $2}')
echo "🔸 CNS Volume ID: $CNS_ID"
echo "🔸 PVC Name : $PVC_NAME"
FOUND=0
# 遍历 FCD 目录中的 .vmdk 文件
for VMDK_FILE in "$FCD_DIR"/*.vmdk; do
# 跳过 flat.vmdk 文件
echo "$VMDK_FILE" | grep -q 'flat.vmdk$' && continue
# 获取描述文件中的 PVC 名
MATCHED_NAME=$(grep 'ddb.fcd.name' "$VMDK_FILE" | cut -d'"' -f2)
if [ "$MATCHED_NAME" = "$PVC_NAME" ]; then
# 提取 vSAN UUID(Extent description 下一行中的路径)
EXTENT_LINE=$(awk '/^# Extent description/{getline; print}' "$VMDK_FILE")
VSAN_UUID=$(echo "$EXTENT_LINE" | awk -F'/' '{print $NF}' | sed 's/"//g')
echo "✅ 匹配成功:"
echo " 描述文件 : $VMDK_FILE"
echo " PVC 名称 : $MATCHED_NAME"
echo " vSAN UUID : $VSAN_UUID"
# 执行 localcli 命令,获取实际使用的容量
USED_CAPACITY=$(localcli vsan debug object list -u "$VSAN_UUID" | grep "Used:" | awk '{print $2}')
if [ -n "$USED_CAPACITY" ]; then
echo " 实际使用容量 : $USED_CAPACITY"
else
echo " 无法获取实际使用容量"
fi
echo
FOUND=1
break
fi
done
if [ "$FOUND" -eq 0 ]; then
echo "❌ 未在 $FCD_DIR 中找到 PVC 匹配: $PVC_NAME"
echo
fi
done < "$VOLUME_MAP_FILE"
6. Output similar to
🔍 正在处理 CNS Volume → PVC 映射文件: volumes.txt
📦 FCD 路径: /vmfs/volumes/vsanDatastore/fcd
🔸 CNS Volume ID: #########-####-####-####-#########
🔸 PVC Name : pvc-#########-####-####-####-#########
✅ 匹配成功:
描述文件 : /vmfs/volumes/vsanDatastore/fcd/<VMDK_NAME>.vmdk
PVC 名称 : pvc-#########-####-####-####-#########
vSAN UUID : <VSAN_OBJECT>
实际使用容量 : 0.18