1.空闲磁盘场景

2.空闲云盘扫描脚本

a.win系统的空闲云盘扫描脚本

# 优化版本:仅在发现问题时输出信息
$issues = @()
$issuesFound = $false

try {
    # 获取服务器IP地址(仅在需要输出时才获取)
    $serverIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {
        $_.InterfaceAlias -notlike "*Loopback*" -and 
        $_.IPAddress -ne "127.0.0.1"
    } | Select-Object -First 5).IPAddress
}
catch {
    $serverIP = "无法获取IP地址"
}

try {
    # 获取所有物理磁盘
    $Disks = Get-Disk -ErrorAction Stop

    foreach ($disk in $Disks) {
        # 检查脱机状态
        if ($disk.OperationalStatus -eq "Offline") {
            $issues += "磁盘 $($disk.FriendlyName) (ID: $($disk.Number)) 处于脱机状态"
            $issuesFound = $true
        }
        # 只有在磁盘联机时才检查是否已分区
        elseif ($disk.OperationalStatus -eq "Online") {
            try {
                $partitions = Get-Partition -DiskNumber $disk.Number -ErrorAction SilentlyContinue
                if (-not $partitions -or $partitions.Count -eq 0) {
                    $issues += "磁盘 $($disk.FriendlyName) (ID: $($disk.Number)) 已联机但未进行分区"
                    $issuesFound = $true
                }
            }
            catch {
                # 可选:记录分区检查错误(也可静默)
                # $issues += "无法读取磁盘 $($disk.Number) 的分区信息: $($_.Exception.Message)"
                # $issuesFound = $true
            }
        }
    }
}
catch {
    # 获取磁盘失败也视为问题(根据需求决定是否报告)
    # 若希望完全静默无错误也不输出,可注释以下三行
    $issues += "无法获取物理磁盘信息: $($_.Exception.Message)"
    $issuesFound = $true
}

# === 只有在发现问题时才输出结果 ===
if ($issuesFound) {
    Write-Host ""
    Write-Host "=" * 50 -ForegroundColor Cyan
    Write-Host "检查结果: 发现问题" -ForegroundColor Red
    Write-Host "服务器IP: $serverIP" -ForegroundColor Red
    Write-Host "问题详情:" -ForegroundColor Red
    $issues | ForEach-Object { Write-Host "  - $_" -ForegroundColor Red }
    Write-Host "=" * 50 -ForegroundColor Cyan
}

b.linux空闲云盘扫描脚本

#!/bin/bash

# 获取服务器IP信息的函数
get_ip_info() {
    echo "=== Server IP Information ==="
    # 获取所有网络接口的IP地址
    ip addr show | grep -E 'inet ' | grep -v '127.0.0.1' | awk '{print "Interface: " $NF ", IP: " $2}'
    echo "============================"
}

# 检查磁盘分区和挂载情况
check_disk_mount() {
    local has_issue=false
    
    # 获取所有磁盘设备(排除虚拟设备和光驱)
    disks=$(lsblk -d -o NAME,TYPE | grep disk | awk '{print "/dev/"$1}')
    
    # 检查每个磁盘
    for disk in $disks; do
        # 检查磁盘是否已分区
        partitions=$(lsblk -o NAME,TYPE "$disk" | grep -c part)
        
        if [ "$partitions" -eq 0 ]; then
            # 磁盘未分区
            echo "Warning: Disk $disk is not partitioned"
            has_issue=true
        else
            # 磁盘已分区,检查分区是否挂载
            disk_partitions=$(lsblk -o NAME,TYPE,MOUNTPOINT "$disk" | grep part)
            
            # 逐行检查每个分区
            while IFS= read -r line; do
                partition_name=$(echo "$line" | awk '{print "/dev/"$1}')
                mount_point=$(echo "$line" | awk '{print $3}')
                
                # 如果分区没有挂载点(显示为空或[SWAP]除外)
                if [ -z "$mount_point" ] || [ "$mount_point" = "" ]; then
                    # 检查是否为swap分区
                    if ! lsblk -o NAME,LABEL,TYPE "$partition_name" | grep -q swap; then
                        echo "Warning: Partition $partition_name is not mounted"
                        has_issue=true
                    fi
                fi
            done <<< "$disk_partitions"
        fi
    done
    
    # 如果发现问题,打印IP信息
    if [ "$has_issue" = true ]; then
        get_ip_info
        return 1
    fi
    
    return 0
}

# 主函数
main() {
    # 检查是否以root权限运行(可选,某些信息可能需要root权限)
    if [ "$EUID" -ne 0 ]; then
        echo "Note: Running without root privileges, some information may be limited"
    fi
    
    # 执行磁盘检查
    check_disk_mount
}

# 执行主函数
main